Rational Rose创建EMF相比XSD和Java Bean来说更直观,更符合“设计态”。在一些重量级的应用里面经常能看到Rational Rose做的EMF Model,比如EMF本身,UML2, WTP,DTP等。
Rational Rose有很多的版本,我用的是7.0.0.4-IFIX02,基本与常见的EMF模型兼容。
1 打开之前的设置
任何EMF ECore模型都需要引用ECore,在Eclipse Plugins目录下有一个org.eclipse.emf.ecore插件,将其解压缩到硬盘某个目录,比如我机器上就是D:\extract\org.eclipse.emf.ecore,在子目录model下就是所有ECore模型相关的描述了,这里我们只留意两个文件:ECore.mdl和org.eclipse.emf.Ecore.cat,都是Rational Rose文件。
使用文本编辑器如Notepad++打开ECore.mdl会看到$VABASE_PLUGINS_PATH的字样,这就是rational rose中需要设置的path map。打开Rational Rose,在菜单File->Edit Path Map中设置这个变量,比如我的:
这个设置完成之后最好重启Rational Rose.
2 引用ECore
引用之前首先在Rose的Logical View中创建一个package,因为EMF是以Package为单位的。创建完之后,选择Control XXX,生成一个cat文件。
选中菜单 File->Unit->Load,在弹出的对话框里面选择刚才解压缩的ecore插件model目录下的org.eclipse.emf.Ecore.cat,这样Ecore包就被引入进来了。
现在在包下面创建Class 没有任何问题,也能够使用Ecore的相关模型元素。但是如果要设置一些非Rational Rose的信息,就没啥办法了。比如在EMF中一个类名字叫做Man,有一个ID属性作为主键。在这种情况下需要引入一些“额外”的Ecore meta model信息,这就是Rational Rose的PTY文件
3 设置Ecore 的PTY
ECore的PTY文件同样在Eclipse Plugin目录下,找到org.eclipse.emf.importer.rose插件,解压缩到某个目录,在其名为"rose"的子目录下有一个ecore.pty文件
右键单击Rose工程最下面的Model Properties,在菜单中选中"ADD”,选中刚才看到的ecore.pty文件,增加之后有什么效果呢?
没有增加ecore.pty之前的某个Class属性页
增加了ecore.pty之前的某个Class属性页
可以看到,多了一个名为Ecore相关的设置页,这个页里面就包含我们所见到的各种额外设置。
4 导入EMF Model
使用安装了EMF SDK的Eclipse,创建一个新的empty emf project,然后通过向导创建一个新的emf generator model,在"select a model importer"向导页中选中Rose Class model。
在导入过程中还会有一个对话框,里面有一个CDM_EXTRACT_PATH,同样设置成为刚才解压插件的目录,比如我本机是D:\Extract。
5 Stereotype的使用
StereoType是UML提供的一种强大扩展机制,EMF也用了一些,常见的如下:
- enumeration: 一个class的stereotype如果是enumeration,那么在导入之后,这个类的所有属性将会作为emum literal,类本身会变成一个ecore emum。