自己理解的GMF

GMF概况:

GMF该框架是一个Eclipse建模项目的子项目,其目标是为Eclipse建模框架EMF和图形化编辑框架GEF提供一个统一的桥梁。GMF的一个目标就是允许一个图形化定义可以被很多领域复用。通过使用一个独立的映射模型来将图形定义和工具定义连接到所选择的领域模型,GMF漂亮的完成了这一目标。

GEF与EMF: 

EMF的主要功能就是根据领域知识,配置xml,通过工具自动生成领域模型java代码。最后被你的调用,不涉及图形。GEF的主要功能是根据模型定义的Node,connection等信息,将模型信息进行图形化的显示。

EMF中定义的模型并没有关于显示方面的信息,例如loction和size等信息,而这些信息正是GEF的model所需要提供的。 GMF提供了这样一种手段, 将领域模型与图形化的显示整合到一起。GMF 定义了一套自己的模型用于被GEF使用。 GEF将图元模型归结为三个:Diagram,Node 和 Edge。 Diagram是总的容器类, Node 对应一个节点,Edge 表示Node 之间的连接信息。同时GEF将图形相关的一些属性加入到这些表示中,从而提供了一种统一的访问机制,来控制这些外观。

 EMF 模型与 GEF 框架整合在一起有一定的技术难度(如不同的命令堆栈),导致 EMF 模型并没有很快被基于 GEF 的编辑器接受。最终,GMF 项目在这种逆境中应运而生,并希望能够引入一种快速生成图形化编辑器的方法。通过类似的方法,EMF 生成适用于 EMF 模型的基本编辑器。

GMF安装:

参考以下Eclipse安装GMF插件的方法,不再重复说明:

http://my.oschina.net/plumsoft/blog/84613

http://blog.sina.com.cn/s/blog_4b84d10901009j1y.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-gmfsamp/

http://blog.csdn.net/kabini/article/details/1738132

参考资料:

基础:

15 分钟学会 EclipseGMF

http://www.ibm.com/developerworks/cn/opensource/os-ecl-gmf/

GMF实例解析

http://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-gmfsamp/

GMF Tutorial part1中文版

http://blog.csdn.net/kabini/article/details/1738132

Graphical Modeling Framework/Tutorialpart 1,2,3,4

http://wiki.eclipse.org/Graphical_Modeling_Framework/Tutorial#Get_started

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

http://mjtfly.iteye.com/blog/421013

进阶:

GraphicalModeling Framework 进阶

http://www.ibm.com/developerworks/cn/opensource/os-ecl-gmfextend/

八进制博客

http://www.cnblogs.com/bjzhanghao/category/48143.html

GMF的主要组件(下图):


说明:GMF Editor 主要基于 GMF Runtime来构造应用框架,但同时允许开发人员直接使用 EMFGEF Eclipse 系统接口来完成一些特定功能(GMF不能很好支持的功能)

GMF模型(下图):




简略说明:

1. 生成一个领域模型.ecore

2. 生成一个图形定义模型.gmfgraph和工具定义模型.gmftool,定义编辑用的图形元素

3. 生成一个图形映射模型.gmfmap,定义领域模型和图形元素之间的映射

4. 生成图形编辑器(GenerationModel).gmfgen 

5.  编写代码扩充图形编辑器功能


在GMF的DashBoard中(window--> show view --> other --> GMF DashBoard),我们可以看到这些步骤以及它们之间的关系。

详细说明:

1.  GMF 编辑器首先需要一个 domain model,通常是一个 *.ecore 文件,GMF 根据这个 domain model 做进一步的操作,这个 model 是实施 GMF 后续工作的基础。

先建立一个GMF工程,操作:file-->newproject,任选红色框中的其中一种方式:




在成功生成ecore文件之后,我们就可以在ecore编辑器中以树形结构的方式对其进行编辑。在这一步我们首先要在属性视图中将根节点的Name属性的名称改为“XXX”,然后我们就可以按照下图所示的内容来构建领域模型。

 

如果你更喜欢可视化的编辑方式的话,也可以右键单击刚生成的.ecore文件,在弹出菜单中选择“Initialize ecore_diagram diagram file”,然后生成一个.ecore_diagram文件。值得注意的是,ecore文件和ecore_diagram文件的内容是一一对应的,我们在其中一个文件中所作的修改在我们进行了“保存”动作之后就会立即反映到另一个文件当中。


注意:也可以在此步骤之后直接创建 .genmodelNew --> Other --> EMF generator Model),并生成全部代码(在genmodel模型根节点的右键菜单里选Generate All命令),这个genmodel模型将被后面需要定义的一些模型引用,模型和.edit部分的代码是GMF图形项目编译的前提条件。

2  graphical model:定义了 ecore model 元素的图形信息,如形状,颜色,边框等等。严格的说这个图形信息是和 ecore model 无关的(以便于领域模型和用户界面模型的映射),但是在具体的操作过程中我们都是根据 ecore model 来生成其所对应的 graphical model.

选择下图其中任一红色框:


3  tool model:定义了在未来生成的图形编辑器中 palette view 里面的 palette entry 信息。

这个模型指定流程编辑器的调色板(Palette)里都可以有哪些工具,你还可以在这个模型里对这些工具进行分组。使用“GMFTool Simple Model”向导可以很快的得到这个模型。

4 map model:定义了 ecore model, graphical model tool model 三者间的映射关系,通过map model 来调整其他3个 model 的映射关系可以增强 model的可重用性和灵活性。

右键.gmfmap文件可选 Create generatorModel最后得到.genmodel文件和.gmfgen文件。

   

 然后在选择GenModel的阶段我们有两种方式可供选择,一个是采用EMF的生成器模型,另一个方法是点击“DefaultGenModel”让向导帮我们生成一个默认的GenModel。

 

为了测试需要,在下一个向导页我们点选“GenerateRCP Application”来生成一个测试应用程序以便检验效果。

 

5  generator model:由 map model 结合其他三个 model 生成,最终 GMF Runtime 根据 generator model 来生成 diagram editor的代码框架。可以通过调整 generatormodel 的一些属性来做一些个性化的工作。比如:默认 GMF 框架会把 ecore model 和 notation model(diagram model) 分开来保存,可以通过修改其属性"SameFile For Diagram And Model" 来使 model 和 view 保存在一个文件中。

下面进行具体操作:首先我们需要RCP程序的编辑器代码,在genmodel的根节点上右键单击,然后在弹出菜单中选择“Generate All”,这和用EMF生成编辑器代码是一样的。


会出现以下几个项目文件:

                                                  

这时你会注意到新的com.mjt.flow.diagram插件已经出现在你的工作空间中。


右键插件项目com.mjt.flow.diagram选择 run as--> eclipse aplication。


在新的Eclispe中Create anew General Project,名称为Flow,然后右击该工程,选择New——Example,找到FlowDiagram:



到目前为止,我一行代码也没写,就生成了一个拥有Palette、Outline视图、属性视图、默认工具栏、上下文相关的弹出菜单等等众多实用功能且可运行的编辑器框架,下面的工作就是在已经生成的框架的基础上就行个性化定制或修改,以使得最终的产品的获得与图表 3.6-1同样的效果。这一步将可能要涉及GMF Runtime和SDK的各个角落,包括对Palette中显示元素的详细定制(图标,动作等),图形元素的定制,标签和连接的定制以及各种元素的Style的定制等等。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值