[Eclipse]GEF入门系列(八、使用EMF构造GEF的模型) - 编程入门网
听器列表,下面是SubjectPart的实现, 其中eAdapters()得到监听器列表:
可以看到,我们对EditPart所做的修改实际是在两种消息机制之间的转换,如果你对以前 的那套机制很熟悉的话,这里理解起来不应该有任何困难。 ElementFactory的修改 这个类的作用是根据template创建新的模型对象实例,以前的实现都是"new XXX()"这样 ,用了EMF以后应改为"ModelFactory.eINSTANCE.createXXX()",EMF里的每个模型对象实例 都应该是使用工厂创建的。
使用自定义CreationFactory代替SimpleFactory 在原先的PaletteFactory里定义CreationEntry时都是指定SimpleFactory作为工厂,这个 类是使用 Class.newInstance()创建新的对象实例,而用EMF作为模型后,创建实例的工作应 该交给ModelFactory来完成,所以必须定义自己的CreationFactory。(注意,示例代码里没 有包含这个修改。) [Eclipse]GEF入门系列(八、使用EMF构造GEF的模型)(3)时间:2011-04-19 cnblogs bjzhanghao处理自定义数据类型 我们的Node类里有两个非标准数据类型:Point和Dimension,要让EMF能够正确的将它们 保存,必须提供序列化和反序列化它们的方法。在EMF为我们生成的代码里,找到 ModelFactoryImpl类,这里有形如convertXXXToString()和 createXXXFromString()的几个 方法,分别用来序列化和反序列化这种外部数据类型。我们要把它的缺省实现改为自己的方 式,下面是我对 Point的实现方式:
注意,修改后要将方法前面的@generated注释删除,这样在重新生成代码时才不会被覆盖 掉。要设置使用这些类型的变量的缺省值会有点问题(例如设置Node类的location属性的缺 省值),在EMF自带的Sample Ecore Model Editor里设置它的defaultValueLiteral 为"100,100"(这是我们通过convertPointToString()方法定义的序列化形式)会报一个错, 但不管它就可以了,在生成的代码里会得到这个缺省值。 保存和载入模型 EMF通过Resource管理模型数据,几个Resource放在一起称为ResourceSet。前面说过,要 想正常保存模型,必须保证每个模型对象都被包含在Resource里,当然间接包含也是可以的 。比如例子这个模型,Diagram是被包含在Resource里的(创建新Diagram 时即被加入),而 Diagram包含Subject,Subject包含Attribute,所以它们都在Resource里。在图1中可以看到 , Diagram和Connection之间存在一对多的包含关系,这个关系的主要作用就是确保在保存 模型时不会出现 Dangling |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |