GMF 教程 Mindmap 3

原创
2013/03/15 19:56
阅读数 757

Link Constraints

目前为止,工程运行一个Topic结点给自己连线,显然是没有意义的。接下来通过使用约束,避免这种现象。

1、打开mindmap.gmfmap,找到目前唯一的Link Mapping结点,右击,选择New Child > Link Constraints,然后右击这个Link Constraints,选择New Child > Source End Constraint,Language属性默认为ocl,设置Body属性为self <> oppositeEnd,如下图所示:

2、重新设成mindmap.gmfgen和diagram代码,运行一下,可以发现不可以给Topic结点自己连线了。

Another Connection

领域模型中的Relationship元素用来指明Topic元素之间若干可能的关系。接下来将要实现支持画出这个连线。这个例子将会更完全地说明GMF中的Link Mapping可用的属性。

Graphical Definition

3、打开mindmap.gmfgraph,右击Figure Gallery,选择New Child > Figure Descriptor,命名为DashedLineOpenArrow。然后右击新建的Figure Descriptor,选择New Child > Polyline Connection,将其命名为DashedLineOpenArrow,将Line Kind改成LINE_DASH。之后右击Figure Gallery,添加Polyline Decoration,命名为OpenArrow。默认的Decoration是一个打开的箭头,而Polygon Decoration是一个填充的三角形。最后将DashedLineOpenArrow的Target Decoration设置为OpenArrow:

4、现在定义好了图形,为Canvas创建一个Connection,命名为RelationshipLink,设置Figure属性为DashedLineOpenArrow:

5、我们希望subtopics结点的连线没有箭头,所以删除Figure Gallery中的TopicsSubtopicsTargetDecoration元素。

Tooling Definition

6、打开mindmap.gmftool文件,在Palette下创建一个Tool Group,命名为Links,并在这个Tool Group中添加一个Creation Tool,命名为Relationship,将TopicSubtopics工具拖到Links分组中,名重命名为Subtopic。最后将mindmap工具组的名称改为Nodes。将两个Tool Group的Collapsible属性都设置为true。

Mapping Definition

由于之前修改了Tool模型,需要在mapping definition中更新已存在的工具选择。可以右击mindmap.gmfmap,选择Validate,以检查出错的地方。

7、打开mindmap.gmfmap文件,创建一个Link Mapping,属性设置如下:

在上面的属性列表中,Domain meta information中的Element属性表示这个Link所代表的的领域中的元素。而在上一个Link中,这个属性是空的,这种情形下,Link的目标元素是由添加到源元素一列参照中的元素表示的。而在上面的属性设置中,Link在领域中是由它自己的类表示的,因此在Link映射中需要更多的信息。领域模型的Relationship类,是包含在Map元素的一列参照中。

8、此时,重新生成mindmap.gmfgen文件和diagram代码(可以借助GMF Dashboard),运行,效果如下图:

我们现在需要做的事,当创建Link的时候,为其初始化适当的类型。我们将会对每一个使用分别的工具,也可以选择使用清楚的可视化。现在,我们将简单的给Link添加标签,用来标示类型。

Feature Initializers

在我们graphical definition中,我们将为每一个类型创建一个图像和相应的连线,同样在tooling definition中也会为每个类型创建工具。

另一个初始化时设置Relationship的标签属性,这样便于区分类型。

Graphical Definition

9、打开mindmap.gmfgraphy,在Figure Gallery添加一个Figure Descriptor和一个Label,将它们都命名为DashedLineLabelFigure,然后右击Canvas,添加一个新的Diagram Label,命名为RelationshipLabel,并将Figure属性选择为DashedLineLabelFigure,并将Element Icon属性设置为false:

10、打开mindmap.gmftool文件,将Relationship工具重命名为Dependency(顺便把Description属性改了),然后使用复制粘贴添加两个工具Includes和Extends:

Mapping Definition

11、打开mindmap.gmfmap,将Relationship Link映射的工具改成Extends。

12、为这个Link Mapping添加Feature Seq Initializer和Constraint,添加相关内容,设置如下:

实际上,对一个领域模型创建多个映射的时候,都要添加Constraint。

13、最后为这个Link Mapping添加Feature Label Mapping:

14、然后复制粘贴这个Link Mapping两次,将相关属性改成dependency和includes。注意修改相应Link Mapping的Tool属性。

15、此时,若重新生成mindmap.gmfgen和diagram代码,运行效果如下图:

源码: http://www.oschina.net/code/snippet_164134_19253

双子座@开源中国:http://my.oschina.net/plumsoft

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部