使用Topcased改进EMF模型编辑视图

EMF 是 Eclipse 建模框架,它是 Eclipse MDA(Model Driven Architecture)的重要组成部分,其 元模型 ECore 是 MOF 的 Java 实现,根据 Java 语言特性对 MOF 适当简化并增加 Java 特性。EMF 主 要提供了元模型的创建,利用模型生成 java 代码,并且提供了一个基本的模型文件编辑环境。通过 EMF 可以自动生成模型的编辑视图。但 EMF 的默认编辑视图功能简单,用户界面不够灵活,难以满足大型业 务系统要求。Topcased 是一个开源的用于开发过程的建模工具。Topcased 构建于 Eclipse 平台之上, 并借助 EMF 和 GMF 技术,提供了元模型的定义,图形化编辑,代码生成等功能。它对 EMF 原有功能进 行扩充,提供了扩展的模型属性编辑视图,不但功能灵活,而且界面更加友好,给为项目开发提供带来极 大的便利。本文以一个图书管理系统演示 Topcased 的使用。

简介

EMF 全称 Eclipse Modeling Framework.,是 Eclipse 建模框架。它是 Eclipse MDA(Model Driven Architecture)的一个重要组成部分,其元模型 ECore 是 MOF 的 Java 实现,根据 Java 语言特性对 MOF 适当简化并增加 Java 特性。EMF 主要提供了元模型的创建,利用模型生成 java 代码,并且提供了 一个基本的模型文件编辑环境。下图是一个典型 EMF 提供的模型文件编辑环境。

图 1. 模型文件编辑环境

从上图可以看到 EMF 虽然能够提供建模的能力,但是生成的编辑视图很简单,直接使用有时无法完全 满足项目要求。特别是在企业级的应用项目开发过程当中,属性往往需要进行分类或分组,而不是简单罗 列。在不同阶段或时机,对模型对象属性进行填充。通过属性分组,有利于开发过程当中需求分析人员、 概要设计人员、编码人员的分工协作。我们知道 GMF 虽然提供了建立复杂建模视图的能力,但是实现复 杂,在建模中成本过高,所以需要一种既可扩充 EMF 的模型视图编辑能力,又要简单方便的技术解决方 案。Topcased 开源项目很好的扩展了 EMF 模型文件编辑视图,加强了模型文件的编辑能力。

Topcased 是 Airbus(空客)公司提出的开源项目,主要针对航空领域提供了一套开发软件工具包。 Topcased 构建于 Eclipse3.4 RCP 平台之上,并借助 EMF 和 GMF 技术,提供了元模型的定义,图形化 编辑,代码生成等功能。它对 EMF 原有功能进行扩充,提供了扩展的模型属性编辑视图,不但功能灵活 ,而且界面更加友好,给为大型项目开发提供带来极大的便利。

本文通过一个示例程序的方式展示如何通过 Topcased 扩展 EMF 的原有模型文件编辑功能。示例程序 所需开发环境如下。

Eclipse 版本:3.4 及以上版本。http://www.eclipse.org/downloads/。

EMF 版本:2.0.0 及以上版本。http://www.eclipse.org/modeling/emf/downloads/。

Topcased 版本:2.0.0 及以上版本。http://www.topcased.org/。

利用 EMF 创建元模型

搭建好相应的环境后,通过创建一个小型图书管理系统元模型开始我们的示例,在这个系统有这些元 模型对象,图书馆(BookLib)、图书类别(Catagory)、图书(Book)和用户(User)。首先创建一个 空 EMF 工程。打开菜单 File->New->Other, 在弹出的向导对话框中选择 Eclipse Modeling FrameWork->Empty EMF Project 会弹出以下对话框。如图 2 所示。

图 2. 创建空 EMF 工程

完成项目的创建后,接下来再进行 Ecore 的创建,相关的元模型结构图如下。

图 3. 图书管理元模型结构图

模型代码生成

元模型创建好后,需要生成代码。在 EMF 中代码生成使用的是 JET 技术,这就需要把刚才创建好的 ecore 模型转换为 JET 可以利用的 genmodel 模型。打开菜单 File->New->Other,在弹出的向导 对话框中选择 Eclipse Modeling FrameWork->EMF Model,然后一直默认选择下一步即可,中途需要 选择一下相关联的 Ecore model 文件,此时会弹出以下对话框,如图所示。

图 4. 创建 genmodel 文件的对话框

择好相关联的 ecore 模型文件后,点击 Finish 完成。选择创建好 genmodel 文件,在根节点上打点 开右键菜单(见图 4),选择 Generate All 生成 Plugin 工程代码。

图 5. 通过右键菜单生成 EMF 代码

生成的代码被组织在四个项目里如图 6 所示:

图 6. EMF 自动生成的项目

运行插件程序,我们看到以下模型文件编辑环境(如图 7 所示)。

图 7. 图书管理 model 文件编辑视图

可以看到默认的编辑视图比较单调,不够美观,对应的属性也没有分类。下面利用 Topcased 插件扩 展 EMF 模型属性编辑视图。

创建 Tab properties view 属性描述文件

Topcased 提供了一个 Tab properties view,利用它可以对 model 文件的属性进行编辑。在创建它 之前,首先需要创建一个文件后缀为 propertiesconfiguraTor 的描述文件,用于配置 Tab properties view 的外观和功能。具体创建方法如下。

右键点击 ecore 文件所在的文件夹,选择右键菜单中的 File->New->Other, 在弹出的向导对 话框中选择 Topcased 文件夹,选择 PropertiesConfiguraTor Model 如图所示。

图 8. 新建向导对话框

默认下一步,在弹出的对话框中选择 Tabbed View,它就代表了一个 Tab properties view 对象,如 图 9 所示。

图 9. PropertiesConfiguraTor Model 对象创建对话框

点击 Finish 按钮。点击生成的 propertiesconfiguraTor 文件 , 在右边的编辑器视图中导入 genmodel 文件,操作如图 10 所示。

图 10. 导入 genmodel 文件

在弹出的对话框中选择要导入的 genmodel 文件即可。编辑 Tabbed View 对项,它的 Gen Model 属 性选择为刚才导入的 genmodel 文件。相关属性配置如图 11。

图 11. Tab View 属性配置图

在 Tab View 下面可以创建多个 Category(类别),一个 Category 下面可以创建多个 Tab(tab 页 )如图所示。

图 12. Tab 页创建图

一个 Tab 对应的就是 Tab properties view 中的一个 Tab 页,它是一组属性的集合。创建好 Tab 并填好相应的属性后,就可以在 Tab 下面创建多个 Section 了,如图所示可以创建三种类型的 Section 。

图 13. Section 创建图

Single Feauture Section:对应于一个属性的展示和编辑。

Multiple Feature Section:目前最新版本的 Topcased 插件尚未支持该对象的生成。

Advanded Section:对应于多个属性的编辑和展示。

编辑 Section 属性时,它的 Feature 属性表明了需要关联的 EMF 元模型中的属性。如图所示。

图 14. Section 中 Feature 属性编辑图

根据描述文件生成属性视图

描述文件编辑完成后就可以生成代码了。右键单击描述文件,选择 Topcased->Generation- >Properties View 即可。

图 15. Topcased 代码生成图

生成后的代码组织在 demo.bookmanege.propertysheetpage 工程中,结构如下图。

图 16. Topcased 生成的 Property View 代码结构图

最后需要将生成的 property view 集成到 EMF 中即可。

更换 EMF 默认的属性表单页

在 EMF 生成的 ediTor 工程中找到类 ModelEdiTor。将类中的方法 getPropertySheetPage 修改为

清单 1. 修改 getPropertySheetPage 方法

public IPropertySheetPage getPropertySheetPage() {  if (propertySheetPage == null) {  propertySheetPage = new ModelPropertySheetPage(this);  }  return propertySheetPage;  }

由于 ModelPropertySheetPage 对象的构造函数中传入的对象需要实现接口 ItabbedPropertySheetPageContribuTor,所以将类 ModelEdiTor 继承该接口并实现方法 getContribuTorId,代码如下:

清单 2. 修改实现接口

public String getContribuTorId() {  return "demo.bookmanage.propertysheetpage.contribuTorID";  }

方法中返回的字符串即 Topcased 生成的工程中 plugin.xml 文件中扩展点 propertyContribuTor 的 contribuTorId 属性对应的值。重新运行程序,PropertyView 美化完成。效果图如图 17。

图 17. Topcased 生成的 Property View 效果图

结束语

利用 Topcase 的功能扩展 EMF 生成的模型编辑界面,可以使 EMF 的用户界面更加友好,也更能适应 大型企业开发的需求。Topcase 除改进 EMF 模型编辑视图之外还有建模功能,如读者有兴趣可以深入研 究 Topcase 开发手册。

本文配套源码

你是自由的,不仅是身体上的自由,

使用Topcased改进EMF模型编辑视图

相关文章:

你感兴趣的文章:

标签云: