利用GMF构建双击节点展开子视图的图形化建模环境

来源:互联网 发布:c语言中break 编辑:程序博客网 时间:2024/05/17 12:23

GMF能够根据基于Ecore的元模型构建图形化建模环境。

在图形化建模中,这样一种需求是非常必要的:双击一个模型,展开一个新视图,在这个视图中可以构建由模型的内部元素描述的内部模型。下面就介绍下使用GMF中实现一功能的图形化建模环境的方法。

  • 第一步,构建基于Ecore的领域模型

下图是我们定义的领域模型,其中根节点包含CapabilityViewport,ServiceViewport,OrganizationTypeViewportSystemViewport四个元素,它们是顶视图中的建模元素,又分别包含Capability,Service,PersonRoleTypeSystem。在构建的图形化建模环境中,希望首先是由CapabilityViewport,ServiceViewport,OrganizationTypeViewportSystemViewport四个元素作为建模元素构建的顶视图。当创建某个元素例如CapabilityViewport的一个实例后,在视图上点击该实例,就打开一个新视图,该新视图的建模元素为CapabilityViewport包含的元素,即Capability,用以进一步描述CapabilityViewport内部的信息。
Ecore元模型

  • 第二步 生成包含所有必要元素的gmfgraphgmftool文件

选择根节点为Diagram Element,生成一对.gmfgraphGraphical Def Model)和.gmftool文件(Tooling Def Model),包含所有必要元素(向导将自动选择)的图元和工具。

定义graph和tool

  • 第三步,生成gmfmap文件

根据Ecore领域模型和第二步的两个文件生成.gmfmapMapping Model,映射模型)文件,选择在顶层视图中显示的元素和它们对应的图元和工具。

gmfmap模型

  • 第四步,创建第三步创建的gmfmap文件对应的gmfgen文件

为上一步生成的映射模型文件创建.gmfgenDiagram Editor Gen Model)文件。因为是最顶层视图,为了作为图形化建模环境启动视图,勾选Transform按钮上的RCP check项。选择Gen Editor Generator节点下的第一个叫做Gen Plugin的子节点,为视图设置一个唯一的IDName
设置Editor Gen Model

  • 第五步,创建子视图的gmfmap文件

为各个子视图创建映射模型文件,选择点击后会打开新视图的元素,这里为CapabilityViewpoint, SystemViewpoint, ServiceViewpointOrganizationType。点击项目指示器上的Combine按钮,输入子视图名称,选择领域模型中的各类,依次创建映射模型文件。本例中要创建4个子映射模型文件,分别命名为capabilityviewpoint.gmfmap,systemviewpoint.gmfmap,serviceviewpoint.gmfmaporganizationtypeviewpoint.gmfmap

这里写图片描述

  • 第六步,为各个子映射模型文件创建相应的gmfgen模型

Package Explore中右键点击各个子视图的gmfmap模型,在右键菜单中选择Create generator model...,打开gmfgen模型向导,采用默认设置,为各个子映射模型文件生成相应的gmfgen模型。

Generator向导

打开各个子gmfgen模型,选择Gen Editor Generator节点,确保Diagram File ExtensionDomain File Extension和根gmfgen模型相同。并确保ModelID为唯一的值,与其他gmfgen模型区分。修改Package Name Prefix值以反映视图。

设置子<code>gmfgen</code>模型

  • 第七步,修改子gmfgen模型将生成的类名

选择gmfgen模型的Gen Editor Generator节点下的子节点Gen Diagram,除了那些DEPRECATED的项,其余涉及Class Name的项都要修改为以当前gmfgen模型所对应的模型类名。例如在一个systemviewpoint.gmfgen中,将Edit Part Factory Class Name属性值由自动生成的Executabledm2EditPartFactory修改为SystemViewpointEditPartFactory

修改子gmfgen生成类名

  • 第八步,关联子视图和顶视图

选择顶视图的gmfmap模型,选择顶节点,右键点击,从右键菜单中选择Load Resource...将各子节点的gmfmap文件加载进来。选择双击会展开新视图的Top Node Reference节点,选择其子节点,在其Misc类下的Related Diagrams赋值。
Related Diagrams赋值面板

由于无法区分各个Canvas Mapping,可以先尝试复制,然后通过文本打开,查看所指定的是不是指定的视图。一般应该是和在根gmfmap中各子gmfmap模型的顺序一致。

查看Canvas Mapping类型

  • 第九步,重新生成顶层gmfmap对应的gmfgen模型。

定位到gmfgen模型的各个双击会创建新视图的Gen Top Level Node,选择其中的Open Diagram Behaviour元素,没有则创建一个。分别设置它的Diagram KindEditorIDEdit Policy Class Name。其中Diagram Kind属性的值为对应的子gmfgen文件中的Gen Editor Generator下的Model ID属性的值。EditorID属性的值为对应的子gmfgen文件中的Gen Editor Generator节点下的Gen Diagram节点下的Gen Editor View节点的ID属性。修改Edit Policy Class NameOpenXXXDiagramEditPolicy以彼此区分。

  • 第十步,生成代码,进行运行配置

参照第四步,为每个子gmfgen模型的Gen Plugin节点指定唯一的IDName属性。由各个gmfgen模型生成Diagram代码,由genmodel生成模型代码、编译代码和编辑器代码。进行运行配置。

运行后,创建Genenal项目,在项目节点的右键菜单中选择New->Example。可见除了生成顶层视图,对于每一个子视图,也生成了单独的建模环境。

项目向导

选择Executabledm2 Diagram创建一个项目,在其中创建SystemViewport, OrganizationTypeViewpoint等,双击就可以打开子视图。

创建子视图

由于没有调整gmfmap因此,Tool和创建的元素并不对应,这要通过后续调整gmfmap来解决。

参考文献

http://wiki.eclipse.org/Diagram_Partitioning

0 0
原创粉丝点击