使用EMF Query查询EMF模型 - 编程入门网
使用EMF Query查询EMF模型时间:2011-02-12 IBM 郝萍EMF 是 Eclipse 组织推出的建模框架。它能够帮助我们将模型(UML, XSD等)转换成为健壮且功能丰富的Java 代码。通过使用 EMF,我们编写的程序能免费的获得一个健壮的模型层,它通常比我们自己手工编写的模型层更为健壮。事实上,有很多商业产品都使用了 EMF 来作为其模型层。由于 EMF 的广泛使用,Eclipse 组织为其推出了众多的周边模块。 1 介绍 由于EMF(全称Eclipse Modeling Framework)在Java阵营中的广泛使用,用户迫切的需要更多基于EMF的功能。因而,Eclipse组织为其推出了众多的周边模块。例如目前已经较为成熟的GEF(Graphical Editing Framework)和GMF (Graphical Modeling Framework)就能帮助用户开发基于EMF的图形编辑器。事实上,基于EMF的新技术远不止GEF和GMF。EMFT (Eclipse Modeling Framework Technology) 是Eclipse专门用来发展基于EMF的新技术的专门项目。今天我们将要介绍的EMF Query就是EMFT的一个子组件。我们可以使用它来对EMF模型进行查询,从而降低了处理复杂模型的难度。 2 建立Library模型 在介绍EMF的文章中,最常用的例子是Library样例。Library模型的UML图如下所示: (本文中用到的ecore model和源代码在附件emfquery.zip中) 图 1 Library模型 正如我们所看到的,Library例子相当简单,它仅仅包含三个类:Library, Writer, Book,以及一个BookCategory枚举类型。在使用EMF时,我们首先需要获得一个ECore模型,这个Ecore模型将用于定义用户模型(例如Library模型)的metadata。我们可以从头开始创建一个ECore模型,也可以通过别的模型导入。如果使用Rational家族中的产品进行UML建模,那么我们能够在Rational产品中直接将UML模型导出为ECore模型。另外,我们也可以通过创建XSD文档或者Annotated Java文件,并且利用EMF自带的向导转换为ECore模型。 在获得了Ecore模型之后,我们在Eclipse中创建一个Java项目。在"New Java Project"向导中,我们将工程的名称设置为test.emf.query,并且我们应当选择分离源代码目录和输出目录。我们在新建好的 test.emf.query项目中建立一个新的model目录,并将library.ecore文件保存到这个目录中。 为了生成模型的Java实现,我们首先需要利用EMF提供的向导将.ecore模型转化为.genmodel模型。这可以通过如图 2所示的"New EMF Model"向导来进行。 图 2 使用"New EMF Model"向导建立新项目 使用EMF Query查询EMF模型(2)时间:2011-02-12 IBM 郝萍我们将Library.genmodel生成到model目录下,并双击其进行编辑。在.genmodel的编辑器中,我们选择Library包,并修改其"Base Package"属性为emf.model。这个属性会影响生成的Java代码的包名称。 图 3 使用"New EMF Model"向导建立新项目 接下来,我们就可以生成Library模型的Java实现了。在Library包上单击右键,并在弹出菜单中选择Generate Model Code项,在test.emf.query项目中生成Library的Java实现。经过这一步之后,我们的test.emf.query将会变成一个插件项目,这并不意味着EMF只能作为插件被使用。对于插件项目而言,我们可以更为方便的设置对插件的依赖关系。现在我们通过双击打开 plugin.xml,然后进入Dependencies标签页,并添加对org.eclipse.emf.query插件的依赖,如图 4所示。 图 4 添加对EMF Query的依赖 在进行完迄今为止的这些步骤之后,我们可以开始编写代码来测试EMF Query的功能了。 3 使用EMF Query查询 EMF Query是一个非常容易使用的框架,Query框架将遍历模型中的每个元素,而用户需要做的工作是编写一个继承自Condition的类来判断模型中的元素是否应该出现在 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |