缺省条件下,EMF不会为每个对象维护一个唯一的id,这在一些情况下不太方便,例如要在web环境下编辑一个EMF模型实例,通常需要在URL里传递对象的id以便确定目标。
有两种方式解决这类问题。第一种是在模型里给每个对象增加一个id属性,并维护使其保持唯一,例如在XXXFactory
的createXXX()
方法里为这个属性赋值。
另一种方式是借助EMF的功能。其实EMF的XMIResource
维护了一个id与对象的映射表,并且会为每个新创建的对象自动赋值,只要稍微设置一下就可以启用这个功能,具体的方法如下。
- 在
xxx.genmodel
里选中package节点,在属性视图里把Resource Type
属性的值设置为XMI
。
-
重新生成代码,EMF生成的代码里会比原来多出
XXXResourceImpl.java
文件。 -
在
XXXResourceImpl.java
里,覆盖useUUIDs()
方法,让其返回true
(缺省返回的是false
)。 -
重新生成代码。(删除以前的
Manifest.MF
和plugin.xml
文件以便这两个文件能得到更新)
这样,如果用文本方式查看新创建的模型实例文件,会发现每个对象都多出一个xmi:id
属性,如xmi:id="_gitpslkoEd2PdI7FPnuunA"
。要在程序里使用这个id,只需要用resource.getId(eobject)
即可得到,其中resource可以通过eobject.eResource()
很方便的获得。
参考链接
How To Enable UUID In EMF Generated Model To Get Copy&Paste Working
这个链接里的方法太麻烦了,但功效一样。
Eclipse GMF - Enabling UUIDs in Semantic model - The Simplest Way
用GMF的时候这个链接里的方法应该比较方便
欢迎转载
请保留原始链接:https://bjzhanghao.com/p/2667
请保留原始链接:https://bjzhanghao.com/p/2667