⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extenderreader.java

📁 对eclipse gef进行封装,可以生成图形化编辑器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************
 * $Header: /cvsroot/EOS6/work_dir/niegy/com.primeton.studio.gef.ui/src/com/primeton/studio/gef/ui/parts/ExtenderReader.java,v 1.9 2006/12/30 02:45:04 niegy Exp $
 * $Revision: 1.9 $
 * $Date: 2006/12/30 02:45:04 $
 *
 *==============================================================================
 *
 * Copyright (c) 2001-2006 Primeton Technologies, Ltd.
 * All rights reserved.
 * 
 * Created on 2006-11-14
 *******************************************************************************/


package com.primeton.studio.gef.ui.parts;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.Platform;
import org.eclipse.gef.NodeEditPart;
import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.jface.resource.ImageDescriptor;

import com.primeton.studio.gef.core.Connection;
import com.primeton.studio.gef.core.Element;
import com.primeton.studio.gef.core.NodeElement;
import com.primeton.studio.gef.core.TLineType;
import com.primeton.studio.gef.core.TNodeType;
import com.primeton.studio.gef.ui.GefUiPlugin;
import com.primeton.studio.gef.ui.editor.AbstractGraphicalEditor;
import com.primeton.studio.gef.ui.editor.ModelCreationFactory;
import com.primeton.studio.gef.ui.util.PathUtil;

/**
 * TODO 此处填写 class 信息
 *
 * @author niegy (mailto:niegy@primeton.com)
 */
/*
 * 修改历史
 * $Log: ExtenderReader.java,v $
 * Revision 1.9  2006/12/30 02:45:04  niegy
 * 重构代码
 *
 * Revision 1.8  2006/12/20 02:57:07  niegy
 * 重构代码
 *
 * Revision 1.7  2006/12/16 09:04:42  niegy
 * 重构代码
 *
 * Revision 1.6  2006/12/08 07:04:32  niegy
 * 重构代码
 *
 * Revision 1.5  2006/12/05 05:18:59  niegy
 * 修改模型,增加连线的扩展点
 *
 * Revision 1.4  2006/11/23 02:42:21  niegy
 * table
 *
 * Revision 1.3  2006/11/22 07:07:38  niegy
 * 增加table
 *
 * Revision 1.2  2006/11/18 12:13:53  niegy
 * 增加容器模型
 *
 * Revision 1.1  2006/11/17 03:15:13  niegy
 * create
 * 
 */
public class ExtenderReader {

	private static final String NOTE = "note";
	private static final String INHERITANCE = "inheritance";
	private static final String REFERENCE = "reference";
	private static final String OTHERS = "others";
	private static final String OPERATIONCOLUMN = "operationcolumn";
	private static final String ATTRICOLUMN = "attricolumn";
	private static final String TABLE = "table";
	private static final String CHILD = "child";
	private static final String PARENT = "parent";

	/**
     * 缓存对应编辑器连续模型id
     */
    private HashMap linkIdMap;
    
	/**
     * 缓存扩展名对应的NodeEditPartFactory
     * 
     */
    private HashMap editPartFactoryMap;
    
    /**
     * 缓存扩展名对应的ModelCreateFactory
     */
    private HashMap modelCreateFactoryMap;
    
    /**
     * 缓存扩展名对应的Property
     */
    private HashMap modelPropertyMap;
    
    /**
     * 缓存扩展名对应的paletteEntry
     */
    private List paletteEntryList;
    
    /**
     * 缓存扩展名对应的paletteLine
     */
    private List paletteLineList;
    
    /**
     * 缓存AttriNode
     */
    private HashMap nodeAttriMap;
    
    /**
     * 缓存OperMap
     */
    private HashMap nodeOperMap;
    
    /**
     * 扩展点ID
     */
    private static final String EXT_PARTFACTORY = "com.primeton.studio.gef.ui.editPartFactory"; //$NON-NLS-1$
    
    /**
     * 扩展点ID
     */
    private static final String EXT_MODEL = "com.primeton.studio.gef.ui.modelcreation"; //$NON-NLS-1$
    
    /**
     * 扩展点ID
     */
    private static final String EXT_PALETTE = "com.primeton.studio.gef.ui.palette"; //$NON-NLS-1$
    
    /**
     * 扩展点ID
     */
    private static final String EXT_PROPERTY = "com.primeton.studio.gef.ui.property"; //$NON-NLS-1$
    
    /**
     * 扩展点元素名
     */
    private static final String EXT_PART_FACTORY_NAME = "editpartFactory"; //$NON-NLS-1$
    
    /**
     * 扩展点元素名
     */
    private static final String EXT_MODEL_ELEMENT_NAME = "modelcreate"; //$NON-NLS-1$
    
    /**
     * 扩展点元素名
     */
    private static final String EXT_PALETTE_ELEMENT_NAME = "paletteEntry"; //$NON-NLS-1$
    
    /**
     * 扩展点元素名
     */
    private static final String EXT_PALETTE_LINE_NAME="paletteLine";
    
    /**
     * 扩展点元素名
     */
    private static final String EXT_PROPERTY_ELEMENT_NAME = "propertyPath"; //$NON-NLS-1$
    
    /**
     * 扩展点属性
     */
    private static final String EXT_ATTR_ID = "id"; //$NON-NLS-1$
    private static final String EXT_ATTR_CLASS = "class"; //$NON-NLS-1$
    private static final String EXT_ATTR_PROPERTY = "filePath";//$NON-NLS-1$
    
    /**
     * paletteEntry扩展点属性
     */
    private static final String EXT_ATTR_NAME = "name";
    private static final String EXT_ATTR_ICONSMALL = "smallIcon";
    private static final String EXT_ATTR_ICONLARGE = "largeIcon";
    private static final String EXT_ATTR_DESC = "desc";
    private static final String EXT_ATTR_MATHOD = "method";
//    private static final String EXT_ATTR_PLUGIN_ID = "pluginid";
    private static final String EXT_ATTR_NODETYPE = "nodeType";
    private static final String EXT_ATTR_LINETYPE = "lineType";
    private static final String EXT_ATTR_GROUP = "group";
    
    private static ExtenderReader instance = new ExtenderReader();
        
    /**
     * 获取单一实例
     * @return DSBUnitExtender
     */
    public static ExtenderReader getInstance() {
        return instance;
    }
    
    /**
     * 禁止外部实例化此类
     *
     */
    private ExtenderReader() {
        editPartFactoryMap = new HashMap(10);
        modelCreateFactoryMap = new HashMap(10);
        modelPropertyMap = new HashMap(10);
        nodeAttriMap = new HashMap(10);
        nodeOperMap = new HashMap(10);
        linkIdMap = new HashMap<String, List<String>>(10);
        paletteEntryList = new ArrayList();//modelPropertyMap
        paletteLineList = new ArrayList();
        
        initFromExtension(EXT_PROPERTY,EXT_PROPERTY_ELEMENT_NAME,modelPropertyMap);
        initFromExtension(EXT_PARTFACTORY,EXT_PART_FACTORY_NAME,editPartFactoryMap);
        initFromExtension(EXT_MODEL,EXT_MODEL_ELEMENT_NAME,modelCreateFactoryMap);
        initFromExtension(EXT_PALETTE,EXT_PALETTE_ELEMENT_NAME,paletteEntryList);
        initFromExtension(EXT_PALETTE,EXT_PALETTE_LINE_NAME,paletteLineList);
    }
    
    private void initFromExtension(String extend,String extendName,Object map) {
        IExtension[] exts = Platform.getExtensionRegistry().getExtensionPoint(extend).getExtensions();
		for (int i = 0; i < exts.length; i++) {
			String pluginid = exts[i].getContributor().getName();
			IConfigurationElement[] unitElements = exts[i].getConfigurationElements();
			for (int j = 0; j < unitElements.length; j++) {
				IConfigurationElement unitElement = unitElements[j];
				if (extendName.equalsIgnoreCase(unitElement.getName())) {
					if(extendName.equals(EXT_PALETTE_ELEMENT_NAME))
						intiFromPalette(unitElement,(List)map,pluginid,extendName);
					else if(extendName.equals(EXT_PALETTE_LINE_NAME))
						intiFromPalette(unitElement,(List)map,pluginid,extendName);
					else if(extendName.equals(EXT_PROPERTY_ELEMENT_NAME))
						intiFromProperty(unitElement,(HashMap)map,pluginid);
					else{						
						String extStr = pluginid;
						if (extStr == null || extStr.length() <= 0) {
						    continue;
						}
						try {
//							configElement = unitElement;
						    Object factory = unitElement.createExecutableExtension(EXT_ATTR_CLASS);
						    ((HashMap)map).put(getKey(extStr), factory);	                            	
						} catch (Exception e) {
						}
					}
				}
			}
		}
    }
    
    private void intiFromProperty(IConfigurationElement element,HashMap map,String pluginId){
//    	String pluginId = getAttribute(element,EXT_ATTR_PLUGIN_ID);
    	String filePath = getAttribute(element,EXT_ATTR_PROPERTY);
    	String realPath = PathUtil.pluginInstallPath(pluginId, filePath);
    	map.put(pluginId, realPath);
    }
    
    private void intiFromPalette(IConfigurationElement element,List paletteList,String pluginId,String extendName){
    	List list = new  ArrayList();
    
//    	getAttribute(element,EXT_ATTR_PLUGIN_ID,list);
    	list.add(pluginId);
    	getAttribute(element,EXT_ATTR_NAME,list);
		try {
		    Object factory = element.createExecutableExtension(EXT_ATTR_CLASS);
		    String mathodNsme = element.getAttribute(EXT_ATTR_MATHOD);
		    Method method = factory.getClass().getMethod(mathodNsme, null);
		    Object targetObj = method.invoke(factory, null);
		    if(extendName.equals(EXT_PALETTE_ELEMENT_NAME)){
		    	String extStr = element.getAttribute(EXT_ATTR_NODETYPE);
		    	setNodeType(extStr,(NodeElement)targetObj);
		    }
		    else{
		    	String extStr = element.getAttribute(EXT_ATTR_LINETYPE);
		    	setLineType(extStr,(Connection)targetObj);
		    }
		    list.add(targetObj);
		    ImageDescriptor smallIcon = null;
		    ImageDescriptor largeIcon = null;
		    String smallString = element.getAttribute(EXT_ATTR_ICONSMALL);
		    String largeString = element.getAttribute(EXT_ATTR_ICONLARGE);
		    if(smallString != null && smallString.length()>0)
		    	smallIcon = GefUiPlugin.imageDescriptorFromPlugin((String)list.get(0), smallString);
		    if(largeString != null && largeString.length()>0)
		    	largeIcon = GefUiPlugin.imageDescriptorFromPlugin((String)list.get(0), largeString);
			if(smallIcon != null)
				list.add(smallIcon);
			else
				list.add("");
			if(largeIcon != null)
				list.add(largeIcon);
			else
				list.add("");
						

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -