EMF介绍系列(三、定制应用程序的基本方法) - 编程入门网
EMF介绍系列(三、定制应用程序的基本方法)时间:2011-04-30 博客园 bjzhanghao借助EMF的帮助,不用亲自编写一行代码就可以生成一个完整的应用程序,你是不是对EMF 有些感兴趣了?不过生成的应用程序看起来都像是从同一个模子里出来的,即一个多页编辑 器,一个大纲视图和属性页,这当然无法满足所有人的需求。不用耽心,只要了解EMF的机制 ,按照我们的要求修改这个应用程序并不是一件很困难的事情。 首先大概的看一下EMF为我们生成了哪些东西吧。按照前文的操作,EMF应该一共生成了四 个插件项目:com.my.shop、 com.my.shop.edit、com.my.shop.editor和com.my.shop.tests ,其中最后一个项目是方便我们编写单元测试的框架代码,这里我们先不管它,暂时把注意 力集中在前三个项目上。 第一个项目是模型部分,主要包含你定义的ecore模型里各类型(EClass,在ecore元模型 里类型称为EClass,属性称为 EAttribute)对应的java接口和缺省的实现类代码,例如 Product.java和ProductImpl.java,它们分别被放置在 com.my.shop和com.my.shop.impl包 里;一个工厂类(ShopFactory)使用工厂模式创建新的模型实例;一个 Package类 (ShopPackage)维护关于元模型的信息,提供了一堆静态成员变量;此外还生成了 ShopAdapterFactory和 ShopSwitch这两个类,它们是可选的,它们俩的作用这里卖个关子暂 时先不说。 第二个项目是.edit部分,这里面包含了一系列ItemProvider类,用来为在jface的各种查 看器(Viewer)里显示这些模型对象提供便利,以CategoryItemProvider为例,它实现了 IStructuredItemContentProvider、 ITreeItemContentProvider和IItemLabelProvider这些 接口,注意把这些接口名字中的"Item"去掉就是 jface里需要的Provider,可以把这些带 有"Item"字样的Provider想象成对jface相应Provider的包装。有了这些 Provider,在应用 程序里使用jface的TreeViewer、TableViewer等查看器就很方便了。(前面讲GEF的一个帖子 里曾利用 EMF构造模型,当时使用的就仅仅是模型部分,因为并未用到jface查看器。所以视 你的应用程序而定,可以只生成模型部分来用,.edit部分依赖模型部分,而反之不然。) 第三个项目是编辑器,这个部分依赖.edit部分,主要包含了几个UI方面的类。EMF为我们 生成的这个编辑器有两个用途:一是让我们可以不用从零开始,而是在这个编辑器的基础上 进行修改得到自己的编辑器;二是通过这些代码展示怎样在应用程序里使用前两个项目里的 那些类,编辑器包含那么多Tab正是为了演示各种查看器的用法。下面来说一下怎样定制生成 的应用程序。 一、修改ecore模型和genmodel模型 在ecore模型和genmodel模型里我们可以通过修改一些属性改变所生成的代码,例如希望 新创建的类别和产品的名称不是空字符串而是" (Unnamed)",就可以在类图里修改 NamedElement类的name属性的"Default Value Literal"属性(没错,属性的属性。见图1) 。修改ecore模型后,必须更新genmodel模型,方法是在Package Explorer里右键单击 shop.genmodel文件,在弹出菜单里选择"Reload...",这样genmodel会从修改后的ecore模型 里获得修改过的信息。之后,再次从genmodel模型生成一遍代码,这样得到的程序运行后, 类别和产品的名称缺省就是"(Unnamed)"了。在 genmodel模型里则可以定制更多属性,例如 所生成的每个项目的id、生成类所在的包名(本例中为com.my)、类名前缀(本例中为Shop )、是否生成图标、标准属性页里各属性的分类等等。 图1 在EclipseUML类图里修改属性的缺省值 有人对 ecore模型和genmodel模型各自的用途搞不清楚,其实因为JET是直接通过 ge |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |