文档章节

GMF 教程 Mindmap 3

双子座
 双子座
发布于 2013/03/15 19:56
字数 1051
阅读 640
收藏 0

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

© 著作权归作者所有

上一篇: GMF 教程 Mindmap 4
下一篇: GMF 教程 Mindmap 2
双子座
粉丝 540
博文 78
码字总数 61009
作品 0
南京
程序员
私信 提问
文章里的问题,请帮忙解答下

@双子座 你好,想跟你请教个问题: 在 GMF 教程 Mindmap 1这篇文章里,在mindmap.gmfgen右击Generate diagram code时出现初始化类的错误 请问怎么解决,谢谢了...

操场和巷口
2013/12/31
9
1
GMF 教程 Mindmap 2

对Step1做补充操作,主要增加的功能: 为Topic结点添加划分(compartment),实现结点嵌套,使得可以在结点上半部显示结点名称,在下半部可以添加新的内容(这里是加入Thread子结点) Graphi...

双子座
2013/03/13
0
1
GMF 教程 Mindmap 5

这一部分主要实现的是: 使用扩展的Plug-in为我们的Diagram添加一个自定义动作 Creating a Customization Plug-in 尽管可以给生成的代码添加备注@generated NOT来避免下次重新生成代码时覆盖...

双子座
2013/03/17
0
0
MDSF:如何使用GMF来做TOGAF建模工具

在MDSF:架构工具简要功能说明中说到我要做一个支持TOGAF的架构工具,本篇介绍一下如何使用GMF来做一个简单的建模工具。 前提知识   如果你还不知道生成建模工具的基本过程以及基础知识,请...

技术小胖子
2017/11/14
0
0
思维导图软件--FreeMind

FreeMind是一套由Java撰写而成的实用的开源思维导图/心智(MindMap)软件,可用来帮助你整理思绪的工具软体,可将每一个环节用 图形表示,透过将思路图形化、结构化,帮助你对整个作业流程的了...

匿名
2008/09/17
82.9K
6

没有更多内容

加载失败,请刷新页面

加载更多

Vue-Ueditor

记录,忘了还要写啥了,先发吧,后面再补。。。 代码示例 import UEditor from '@/components/UE.vue';components: { UEditor },return {config: { //可以在此处定义工...

华山猛男
昨天
2
0
jupyter部署安装

python373 -m ipykernel install --name python373 ipython kernelspec list sc create myjupyterservice binpath="D:\apply\Python373\Scripts\jupyter-notebook --config=V:/my_work/jupyt......

mbzhong
昨天
4
0
聊聊feign的Contract

序 本文主要研究一下feign的Contract Contract feign-core-10.2.3-sources.jar!/feign/Contract.java public interface Contract { /** * Called to parse the methods in the class t......

go4it
昨天
3
0
Linux 软链接和硬链接简介

本文主要介绍了Linux系统中的链接文件。 文件系统 在Linux系统中,将文件分为两个部分:用户数据和元数据。 元数据(inode) 元数据即文件的索引节点(inode),用来记录文件的权限(r、w、x...

问题终结者
昨天
5
0
RocketMQ的事务投递

RocketMQ的事务投递 这是阿里的分布式事务图: 1、A服务先发送个Half Message给Brock端,消息中携带 B服务 即将要+100元的信息。 2、当A服务知道Half Message发送成功后,那么开始第3步执行本...

春哥大魔王的博客
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部