[Eclipse]GEF入门系列(八、使用EMF构造GEF的模型) - 编程入门网
[Eclipse]GEF入门系列(八、使用EMF构造GEF的模型)时间:2011-04-19 cnblogs bjzhanghaoGEF的设计没有对模型部分做任何限制,也就是说,我们可以任意构造自己的模型,唯一 须要保证的就是模型具有某种消息机制,以便在发生变化时能够通知GEF(通过EditPart)。 在以前的几个例子里,我们都是利用java.beans包中的PropertyChangeSupport和 PropertyChangeListener来实现消息机制的,这里将介绍一下如何让GEF利用EMF构造的模 型. EMF使用自己定义的Ecore作为元模型,在这个元模型里定义了EPackage、EClassifier、 EFeature等等概念,我们要定义的模型都是使用这些概念来定义的。同时因为ecore中的所有 概念都可以用本身的概念循环定义,所以ecore又是自己的元模型,也就是元元模型。关于 ecore的详细概念,请参考EMF网站上的有关资料。 利用EMF为我们生成模型代码可以有多种方式,例如通过XML Schema、带有注释的Java接 口、Rose的mdl文件以及.ecore文件等,EMF的代码生成器需要一个扩展名为.genmodel的文件 提供信息,这个文件可以通过上面说的几种方式生成,我推荐使用Omondo公司的EclipseUML 插件来构造.ecore文件,该插件的免费版本可以从这里下载。(也许需要使用国外代理才能 访问omondo网站) 图1 示例模型 为了节约篇幅和时间,我就不详细描述构造EMF项目的步骤了,这里主要把使用EMF与非 EMF模型的区别做一个说明。图1是例子中使用的模型,其中Dimension和Point是两个外部 java类型,由于EMF并不了解它们,所以定义为datatype类型。 使用两个Plugins 为了让模型与编辑器更好的分离,可以让EMF模型单独位于一个Plugin中(名为 SubjectModel),而让编辑器Plugin (SubjectEditor)依赖于它。这样做的另一个好处是 ,当修改模型后,如果你愿意,可以很容易的删除以前生成的代码,然后全部重新生成。 EditPart中的修改 在以前我们的EditPart是实现java.beans.PropertyChangeListener接口的,当模型改用 EMF实现后, EditPart应改为实现org.eclipse.emf.common.notify.Adapter接口,因为EMF 的每个模型对象都是 Notifier,它维护了一个Adapter列表,可以把Adapter作为监听器加入 到模型的这个列表中。 实现Adapter接口时须要实现getTarget()和setTarget()方法,target代表发出消息的那 个模型对象。我的实现方式是在EditPart里维护一个Notifier类型的target变量,这两个方 法分别返回和设置该变量即可。 还要实现isAdapterForType()方法,该方法返回一个布尔值,表示这个Adapter是否应响 应指定类型的消息,我的实现一律为"return type.equals(getModel().getClass());"。 [Eclipse]GEF入门系列(八、使用EMF构造GEF的模型)(2)时间:2011-04-19 cnblogs bjzhanghao另外,propertyChanged()方法的名称应改为notifyChanged()方法,其实现的功能和以前 是一样的,但代码有所不同,下面是NodePart中的实现,看一下就应该明白了:
还有active()/deactive()方法中的内容需要修改,作用还是把EditPart自己作为Adapter (不是 PropertyChangeListener了)加入模型的监 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |