eclipse GMF 制作简单工作流流程设计器(1)

本文介绍了 Graphical Modeling Framework(GMF)项目制作简单的工作流流程设计器,本文不再介绍GMF框架架构,只通过例子怎么玩转GMF。

本文的内容:

  1. 准备环境
  2. 建立GMF工程
  3. 建立ecore模型
  4. 建立emf generator model
  5. 建立Graphical Definition Definition Model
  6. 建立Tooling Definition Model
  7. 完成图形和工具的映射
  8. 生成GMF generator
  9. 运行
  10. TODO LIST

 

1.准备环境:

本文用到到的环境是撰写此文日期(2009-06-20)的最新GMF版本(2.2.0 Stable Builds),
下载地址:http://www.eclipse.org/modeling/gmf/downloads/
相关依赖下载如下:

 



 

注意:插件版本必须与eclipse版本匹配,不匹配有可能导致GMF无法工作。本文是在Ubutu9.04 linux  JDK6.0.13运行的。

 

 

2.建立GMF工程

New->Project...->Graphical Modeling Framework->New GMF Project,项目名称:com.mjt.flow.

3.建立ecore模型

在刚才新建的项目中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.

 

 

4.建立emf generator model

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, 模型创建完毕。
生成代码完毕后如下:


5.建立Graphical Definition Definition Model

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居中。

  • 展 开Canvas flow->Figure Gallery Default->Figure Descriptor ManulActivity Figure->Rectangle ManualActivityFigure, 删除Flow Layout false节点,添加GridLayout(右键点击Rectangle ManualActivityFigure,New Child->Grid Layouet), 右键点击新建的Grid Layout 1,新建Margin和Spacing(New Child->Margins Dimision, New Child->Spacing Dimision),默认值都为0。在紧接下面的节点Label ManaulActivityNameFigure添加Grid Layout Data(New Child->Grid Layout Data),设置如下:
属性

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即可。

6.建立Tooling Definition Model

    创建flow.gmftool文件,右键点击flow.ecore文件,New->other...->Graphical Modeling Framework->Simple Tooling Definition Model, 在向导后面选择ecore domain model的Diagram Element为WorkflowProcess. 然后选择工具如下:


7.完成图形和工具的映射

 

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,如下:


8.生成GMF generator

最后一个文件了.
a)右键点击flow.gmfmap文件,Create generator model..., 新建flow.gmfgen文件,最后可以选择RCP富客户端程序,也可以不选择,这里先不选择,作为eclipse插件启动,如下:


 

 

c)如果没有任何错误,
    以org.eclipse.ui.ide.workbench启动,运行结果如下:


 

啊哈,终于第一步成功了,但是是否觉得很丑、很不好用、不满足我们需求,我们还需要做什么呢...?

 

源代码见附件。

 

 

 

TODO LIST

1.有没有发现所有的活动类型都是START? 这是接下来待续的怎样使用OCL给对象属性赋值;
2.怎么回事,迁移线怎么没有箭头,没有箭头算什么呢?
3.我怎么区分不出来开始活动和结束活动,哎!搞了这么多步骤,原来做出来的编辑器是这么烂,失望! :) 别慌,在后续的文章的会继续讲到如何自定义图标;
4.线条少了约束,无拘无束!啊哈,还是需要OCL帮忙解决这个无法无天的编辑器;
5.头痛的国际化;
6.........还有什么呢?赶紧解决以上问题再说啦!

 

 

 

下一节的内容:

  1. 迁移线上加入箭头;
  2. 使用OCL语言给活动节点类型赋值。

 

 

Email:mjtfly@gmail.com 欢迎与我联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值