本文介绍了 Graphical Modeling Framework(GMF)项目制作简单的工作流流程设计器,本文不再介绍GMF框架架构,只通过例子怎么玩转GMF。
本文的内容:
本文用到到的环境是撰写此文日期(2009-06-20)的最新GMF版本(2.2.0 Stable Builds),
下载地址:http://www.eclipse.org/modeling/gmf/downloads/
相关依赖下载如下:
注意:插件版本必须与eclipse版本匹配,不匹配有可能导致GMF无法工作。本文是在Ubutu9.04 linux JDK6.0.13运行的。
New->Project...->Graphical Modeling Framework->New GMF Project,项目名称:com.mjt.flow.
在刚才新建的项目中model目录中,建立ecore模型;
a)New->Eclipse Modeling Framework->Ecore Model, 建立flow.ecore文件;
b)右键点击flow.ecore文件,Initialize ecore_diagram diagram file, 建立ecore图形编辑文件flow_ecore_diagram.
c)ecore模型文件图形显示如下:
此ecore文件定义了简单工作流流程模型,包括流程信息(WorkflowProcess)、活动(Activity)信息(开始活动 StartActivity、结束活动EndActivity、人工活动ManualActivity和自动活动AutoActivity)和线的 (Transitiion)信息, 在实际应用中不同活动的许多属性是相同的,作为一个基类。
在Transition和Activity关联中注意EOpposite这个属性,from--targets,to--sources.
a)右键点击flow.ecore,New->Ohter...->Eclipse Modeling Framework->EMF generator Model.
输入文件名flow.genmodel,如下图:
b)设置生成代码Base Package, 打开flow.genmodel, 选择Flow/Flow节点,在All分组属性的Base Package键入:com.mjt, 如下图:
c)然后点击右键Generate Model code 和 Generate Edit Code, 模型创建完毕。
生成代码完毕后如下:
a)右键点击flow.ecore文 件,New->other...->Graghical Modeling Framework->Simple Graphical Definition Model,建立flow.gmfgraph文件, 如下:
b)选择domain model文件,Diagram Element选择WorkflowProcess,如下:
c)下一步要定义图形节点、线以及标签显示,也可以在定义完毕后,手动再调整该定义,如下:
说明:WorkflowProcess没有在图形中作为节点显示,所以不用选择这两个了。所有活动作为NODE显示,Transition作为连接线,name作为显示的标签。
d)完成后打开flow.gmfgraph文件,设置节点Label居中。
属性 |
值 |
Grab Excess Horizontal Space(水平自动扩展,相当于占据剩余宽度100%) | true |
Grab Excess Vertical Space(垂直自动扩展,相当于占据剩余高度100%) | true |
Horizontal Alignment(水平对齐方式) | CENTER |
Horizontal Indent水平缩进像素 | 10 |
Horizontal Span(水平夸列) | 1 |
Vertical Alignment(垂直对齐方式) | CENTER |
Vertical Span(垂直夸行) | 1 |
e)同样对AutoActivity Figure设置,设置后如下:
f)设置Label前不显示图标:
选择Canvas->Diagram Label ManualActivityName, Diagram Label AutoActivityName, Diagram Label TransitionName, 将Element Icon设置成false即可。
创建flow.gmftool文件,右键点击flow.ecore文件,New->other...->Graphical Modeling Framework->Simple Tooling Definition Model, 在向导后面选择ecore domain model的Diagram Element为WorkflowProcess. 然后选择工具如下:
a)建立flow.gmfmap文件,New->other...->Graphical Modeling Framework->Guid Mapping Model Creation如下图:
b)选择Domain Model:
c)选择Diagram Palette:
d)选择Diagram Canvas:
e)Mapping:
说明:选择所有活动作为节点,Transition作为连接线。
f)对生成的flow.gmfmap进行调整,先调整工具和节点对应:
Mapping->Top Node Reference<activity:ManualActivity/ManualActivity>->Node Mapping<ManualActivity/ManualActivity>属性的Vitual representation->Tool选择Creation Tool ManualActivity, 其他的活动和线条也同理对应设置,如下图:
g)设置连接线Mapping:
设置Source Feature为Transition.from:Activity,Target Feature为Transition.to:Activity,Diagram Link为Connection Transition,Tool为Creation Tool StartActivity,如下图:
h)设置标签:
去掉StartActivity和EndActivity标签, 可以不要Label显示,开始结束活动以后可以用图标表示, 删除StartActivity和EndActivity的Feature Label Mapping fasle既可;
添 加线上的Label,右键点击Link Mapping<Transition{Transition.from:Activity->Transition.to:Activity}/Transition>, New->Child->Feture Label Mapping,如下:
最后一个文件了.
a)右键点击flow.gmfmap文件,Create generator model..., 新建flow.gmfgen文件,最后可以选择RCP富客户端程序,也可以不选择,这里先不选择,作为eclipse插件启动,如下:
c)如果没有任何错误,
以org.eclipse.ui.ide.workbench启动,运行结果如下:
啊哈,终于第一步成功了,但是是否觉得很丑、很不好用、不满足我们需求,我们还需要做什么呢...?
源代码见附件。
1.有没有发现所有的活动类型都是START? 这是接下来待续的怎样使用OCL给对象属性赋值;
2.怎么回事,迁移线怎么没有箭头,没有箭头算什么呢?
3.我怎么区分不出来开始活动和结束活动,哎!搞了这么多步骤,原来做出来的编辑器是这么烂,失望! :) 别慌,在后续的文章的会继续讲到如何自定义图标;
4.线条少了约束,无拘无束!啊哈,还是需要OCL帮忙解决这个无法无天的编辑器;
5.头痛的国际化;
6.........还有什么呢?赶紧解决以上问题再说啦!
下一节的内容:
Email:[email protected] 欢迎与我联系。