除了以XML的方式配置Figure组件之外,GMF还允许用户直接编写Figure的实现类。
同GEF一样,GMF在视图展现上依然使用Java的draw2d技术框架,而我们所创建的Figure组件一般继承org.eclipse.draw2d.Figure
类或其子类。这里,我们可以参考JBPM自带的流程编辑器源代码,把它已定义好的Figure组件copy过来稍作修改,拿来直接使用。比如StartFigure,用于定义开始节点的视图组件。
另外,我们所自定义的Figure,或其他组件最好放到一个独立的bundle中进行管理,与GMF所驱动出的代码加以区分,比如在现有
的bundle基础上加custom表示该bundle不是GMF所驱动出来的,而是我们人为定义的。
Figure定义好之后,便可将它引入到我们的视图模型中去,新建一个Figure Descriptor,name属性设置为StartFigure,然后添加一个Custom Figure节点,将Qualified Class Name属性设置成StartFigure的类名全称,设置完成以后,还需要把StartFigure所在的包添加到MANIFEST.MF文件包依赖关系中去,因为我们所定义的Figure在另一个Bundle中,最后在Canvas节点下实例化我们所声明的StartFigure,新添加一个Node节点,Name属性设置成Start,Figure属性设置成StartFigure,至此,视图模型定义结束。
定义好视图模型之后,修改工具模型。
新建一个Creation Tool,Title属性设置为"开始",Description属性设置为"创建开始节点",然后为该工具指定默认的图标信息。
最后修改映射模型,完成开始节点的映射关系。
新建一个Top Node Reference,Containment Feature属性设置为Process.nodes,为其添加Node Mapping节点,完成如图所示的属性设置。
模型修改完成以后,我们需要重新生成generator模型,右键映射模型配置文件,在弹出的菜单中选择Create generator model按照向导,完成模型的生成操作。
最后重新生成项目代码,启动项目实例,可以看到Start节点也已经添加到视图中去。
可以按照此方法,完成End节点的添加操作,这里略去。