`
mjtfly
  • 浏览: 51180 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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 欢迎与我联系。

  • 大小: 27.4 KB
  • 大小: 16.6 KB
  • 大小: 48.2 KB
  • 大小: 76.3 KB
  • 大小: 17.3 KB
  • 大小: 47.8 KB
  • 大小: 38.8 KB
  • 大小: 81.8 KB
  • 大小: 68.2 KB
  • 大小: 144.2 KB
  • 大小: 58.1 KB
  • 大小: 42.6 KB
  • 大小: 33.1 KB
  • 大小: 34.7 KB
  • 大小: 48.6 KB
  • 大小: 137.4 KB
  • 大小: 143.4 KB
  • 大小: 152.6 KB
  • 大小: 30.7 KB
  • 大小: 86 KB
4
0
分享到:
评论
4 楼 windyer39 2011-08-02  
顶起 
3 楼 zhoujg 2009-07-18  
原来是我少做一步   h)设置标签:
2 楼 zhoujg 2009-07-18  
我到Create generator model...时报错,不知道什么原因?
The required feature 'diagramLabel' of 'Feature Label Mapping false' must be set
The required feature 'diagramLabel' of 'Feature Label Mapping false' must be set
The required feature 'diagramLink' of 'Link Mapping <Transition{}/>' must be set
1 楼 ixu 2009-07-10  
强力支持 ,正想了解如何在Eclipse上开发流程设计器,将持续关注。。。

相关推荐

Global site tag (gtag.js) - Google Analytics