现在的位置: 首页 > 综合 > 正文

用GMF产生业务模型编辑器

2013年08月14日 ⁄ 综合 ⁄ 共 2522字 ⁄ 字号 评论关闭
 

用gmf实现业务模型编辑器
过去用Graphical Editor Framework(GEF)实现业务模型编辑器既慢又痛苦,光是理解复杂的GEF框架,就要花费很长时间,GEF是个典型的MVC框架,用户可以自定义模型,只要当模型的属性发生变化时,通知模型的监听器就可以了,GEF中模型的监听器被称为控制器,它在MVC框架中处于核心地位,是连接模型和视图的桥梁,它负责将模型的变化反映到视图上,同时把用户在视图上所作的操作反映到模型上,在这过程中还涉及到命令和策略等一些概念,这里我们就不细说,毕竟不是介绍GEF的。
当然我们可以借助于Eclipse Modeling Framework(EMF)来实现模型,因为用EMF生成的模型,就已经实现了消息通知机制,省去了自定义模型中很多工作量,如果EMF和GEF真能很好的结合,估计也不会有GMF的产生了,由于EMF和GEF采用不同的命令堆栈,给EMF和GEF要实现无缝结合带来了很大的技术问题,这个时候GMF就应运而生了(“时势造英雄”),它解决了GEF和EMF相结合中遇到的技术问题,当然了我并不是说有了Graphical Modeling Framework (GMF),GEF和EMF就没有用武之地了,深刻理解GEF和EMF对学习GMF有很大的帮助。
我们还是进入正题吧!这段时间由于工作的原因,对GMF作了一些研究,虽然只是了解了一些皮毛,但也想写出来和大家一起分享,同时也恳请这方面的大虾们给点意见。
下面,我就用GMF实现了一个简单的业务模型编辑器,以后可以在这基础上扩展。
我们知道GMF是以EMF建模为基础了,所以需要一个ecore模型,这里我们的ecore模型是从mdl转化过来的,我们用Rose设计一个mdl文件,如图:
在此模型中,有IPackage和IClass类(以后可以增加IAttribute,IAssociation类),它们之间是聚合关系。
构造ecore模型
1.打开Eclipse,在导航器视图右键,New-->Project,,新建一个GMF项目etm;
2.mdlàecore,在导航器视图右键,New-->Other,,新建一个EMF Model:etm.genmodel
 在Select Model Importer向导页中选择“Rose class model”,在Rose model Import向导页,选择我们前面新建的etm.mdl文件,点击完成,这样就产生了ecore模型和genmodel。
产生Model和Edit Code
1.       打开刚才产生genmodel,在根节点右键,点击Generate Model Code和Generate Model Code(产生的两个项目会被以后产生的业务模型编辑器项目引用)。
 创建其他模型
GMF有个非常实用的工具,如图:
它可以帮助你如何一步步地生成编辑器。
1.从Domain Model开始,选择select,在弹出的对话框中,选择我们前面产生的etm.ecore;
2.在Domain Gen Model,选择select,在弹出的对话框中,选择我们前面产生的etm.genmodel;
3.选择Domain Model上面的Derive,将弹出向导对话框,这个向导对话框用来产生Graphical Def Model,熟悉GEF的人就知道,这些Model对应图形化编辑器中的图形模型。在这个向导对话框第一个向导页可以指定产生Graphical Def Model的文件名和存放路径,这里我们接受默认值etm.gmfgraph,点“下一步”,在第二个向导页中,可以指定对应的ecore模型,这里我们接受默认值etm.ecore,点“下一步”,在第三个向导页中,只要指定Diagram Element为IPackage,即指定画布对应的模型,其它接受默认值,点完成即可。
4.选择Domain Model下面的Derive,将弹出向导对话框,这个向导对话框用来产生Graphical Tool Model,熟悉GEF的人就知道,这些Model对应编辑器调色板中的图形模型。在这个向导对话框第一个向导页可以指定产生Graphical Tool Model的文件名和存放路径,这里我们接受默认值etm.gmftool,点“下一步”,在第二个向导页中,可以指定对应的ecore模型,这里我们接受默认值etm.ecore,点“下一步”,在第三个向导页中,只要指定Diagram Element为IPackage,其它接受默认值,点完成即可。
5.选择Domain Model右边的Combine,将弹出向导对话框,这个向导对话框用来产生emt.ecore,etm.gmfgraph,etm.gmftool三者的Mapping Model。在这个向导对话框第一个向导页可以指定产生GMFMap Model的文件名和存放路径,这里我们接受默认值etm.gmfmap,点“下一步”,在第二个向导页中,可以指定对应的ecore模型,gmfgraph模型,gmftool模型,这里我们接受默认值,点“下一步”,在第三个向导页中,只要指定Diagram Root Element为IPackage,点“下一步”,在第四个向导页中,可以指定节点(Node)和连接弧(Link)对应的类,这里我们接受默认值,点完成即可。这儿我们还必须修改生成的etm.gmfmap文件,否则下面的操作就会出错。给Mapping/Top
 Node Reference/Node Mapping/Label Mapping的Diagram Label属性指定一个值,这里我们指定Diagram Label IElementName,即在节点图形上显示节点的name属性。
6选择Mapping Model右面的Transform,将弹出对话框,这里我们接受默认值etm.gmfgen,点完成,接下来,又弹出弹出对话框,点“Yes”即可。
7选择Diagram Gen Model里面的Generator Diagram Editor,就可以生成图形化编辑器了。
我们重新启动一个Eclipse 工作台,File/New/Examples/Etm Diagram如图:

 

抱歉!评论已关闭.