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 開發手冊。
本文配套源碼