📄 extenderreader.java
字号:
/*******************************************************************************
* $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 + -