何生成 Java 代码?即如何生成 IJavaObjectInstance 的实例?还是要回到构造函数上来,通过初始化字符串,传入正确类型的参数,生成相应的构造函数语句,就能够创建出 Visual Editor 可识别的 IJavaObjectInstance 实例,从而转化为代码编辑区中的 Java 代码。本例中解析的代码如下:
清单8:创建 IJavaObjectInstance 实例
private static final String TEXTITEMMODELCLASSPATH =
"developerworks.ve.example.textitem.TextItemModel";
private IJavaInstance createJavaObject(TextItemModel model) {
return BeanUtilities.createJavaObject(TEXTITEMMODELCLASSPATH,
JavaEditDomainHelper.getResourceSet(editDomain),
getJavaAllocation(model));
}
private JavaAllocation getJavaAllocation(TextItemModel model) {
String initString = "new " + TEXTITEMMODELCLASSPATH +
"(" + "\"" + model.getTitle() + "\", " + model.getMaxLength() + ")";
return BeanPropertyDescriptorAdapter.createAllocation(initString, editDomain);
}
扩展控件至 Palette
到目前为止,围绕该控件的编码工作已经完成:拥有了定制化的控件,描述该控件的 BeanInfo,以及对该控件进行编辑的编辑器。下一步要做的就是将该控件集成到 Visual Editor 的编辑器中,供用户使用了。
如何扩展该控件至 Palette?Visual Editor 的 Palette 由 EMF 的模型来描述,EMF 可以序列化为 XMI,而插件可以定制它们自己的XMI文件,描述控件的种类,归属于哪些控件组,以及图标和实现类等信息。对于本例中的 TextItem 来讲,编写了 palette.xmi 文件来描述该控件,使其被 Palette 所识别,对应于 TextItem,是<children></children>中的内容,分别描述了该控件由哪种图标表示,实现类是哪个,在 Palette 中显示的名称,以及创建后的实例,默认采用的名称。
清单 9:Palette.xmi 文件
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.ve.internal.cde.palette:Drawer xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
xmlns:org.eclipse.ve.internal.cde.palette=
"http:///org/eclipse/ve/internal/cde/palette.ecore"
xmlns:org.eclipse.ve.internal.cde.utility=
"http:///org/eclipse/ve/internal/cde/utility.ecore">
<entryLabel xsi:type="org.eclipse.ve.internal.cde.utility:ConstantString"
string="Custom Widgets"/>
<children xsi:type="org.eclipse.ve.internal.cde.palette:EMFCreationToolEntry"
icon16Name="platform:/plugin/developerworks.ve.example.textitem/icons/sample.gif"
creationClassURI="java:/developerworks.ve.example.textitem#TextItem">
<entryLabel xsi:type="org.eclipse.ve.internal.cde.utility:ConstantString"
string="TextItem"/>
<keyedValues xsi:type="ecore:EStringToStringMapEntry"
key="org.eclipse.ve.internal.cde.core.nameincomposition&quo
|