1 摘要
RSA為基于UML進行業務建模并完成底層代碼生成的開發人員提供了可視化的建模環境,開發人員可以因此方便的從Palette中拖取合適的UML元素來表達業務語義。但是在很多時候,開發人員希望在Palette中定制自己的工具項,從而便捷的使用具有更豐富業務概念和關系語義的UML元素。本文基于RSA 6.0中UML建模元素的容器--標準palette插件,從靜態配置和動態加載兩種途徑提供了擴展Palette的基本方法和其中需要關注的技術難點。文章也舉例說明了如何在具體實現中嵌入對Palette擴展工具項所生成的UML元素的定制。
2 引言
IBM® Rational Software Architect -- IBM軟件開發平臺的一部分,是IBM在2003年2月并購Rational以來首次發布的Rational產品。RSA作為一個集成化的設計和開發工具,支持使用UML進行模型驅動的開發以得到架構良好的應用和服務。RSA是在Eclipse 3.0 的基礎之上創建的,因而支持Eclipse 提供的使用特性,其中最為主要的就是Eclipse插件技術。
本文所要討論的Palette就是使用Eclipse插件技術嵌入到RSA工具環境中的一個UI組件。假設有如下的場景:
開發人員使用RSA為一個網上電子零售業務進行業務建模,在建模過程中需要大量重用如下4個業務角色:
- 提供商
- 消費者
- 商品
- 零售商
使用RSA建模環境下原有的Palette,需要反復拖入Class元素并為每個這樣創建的Class賦予相應的構造型(Stereotype)以表達如上之一的業務角色。如下是使用RSA中未擴展的UML建模環境進行建模時的界面:
圖1 使用RSA經典UML建模環境進行網上電子零售業務建模
為了提高建模的效率,開發人員希望在Palette中定制代表了這些業務角色的新元素。本文基于上面的實例總結了開發人員在進行Palette擴展時所采用的基本實現技術和難點。
3 基于RSA的Palette靜態擴展
從前面的討論可以知道,RSA是構建在Eclipse3.0的基礎之上的。Eclipse的插件結構是Eclipse重要的基礎設施和體系結構,其中應用擴展點是兩個或者多個插件完成協作的基礎;赗SA的Palette靜態擴展方法就是通過Eclipse,定義單獨的插件來完成Palette擴展點的定義,從而增加新的建模功能。
本節將通過一個簡單的"零售業務建模"的例子向您逐步展示如何來對RSA的Palette進行擴展。在"零售業務建模"中,我們需要四類角色:零售提供商、商品、消費者和零售商。為了提供更好的操作感覺和交互過程,我們將擴展Palette面板,這樣進行零售業務建模就如同UML建模一樣的直觀快捷。
同RSA平臺中其他插件一樣,Palette也是通過擴展點來進行定義的,所以,必須要在插件清單plugin.xml文件中聲明所需要的擴展點,并且提供相應的實現類。對于Palette而言,要聲明的擴展點就是com.ibm.xtools.presentation.paletteProvider,要提供的實現類必須實現com.ibm.xtools.presentation.internal.services.palette.IPaletteProvider接口。當然,也可以使用缺省的com.ibm.xtools.presentation.internal.services.palette.DefaultPaletteProvider類,因為DefaultPaletteProvider已經完全實現了IPaletteProvider接口,在RSA的一些建模插件中,可以查找到使用的都是這個缺省的Palette提供類。
就palette而言,只有這樣的聲明是不夠的,更加完整的擴展聲明如清單1所示。
清單1 一個完整的Palette擴展聲明
其中,比較重要的部分就是contribution節點,該節點聲明了要為Palette添加內容,他的屬性factoryClass必須要指定一個實現類,提供生成相應工具的工廠方法。在Contribution節點中,通過聲明entry節點來實現在Palette面板上要添加的抽屜(drawer,Palette面板上容納工具的容器)或者工具盒(tool)。例如,首先要添加一個容納零售業務建模工具的抽屜,那么清單2中的片斷就完成了這樣的聲明:
清單2 一個典型的Palette抽屜擴展聲明
以清單2為例,上述entry節點中
- label聲明了要在Palette面板中顯示的名字;
- kind聲明了該Entry是drawer類型(或者是tool類型);
- id聲明了他的唯一性并在程序中將使用該id來唯一標識;
- path聲明了他在Palette或者drawer中的位置,他的格式同Menu和Toolbar中擴展的path格式是一致的。
類似的,在添加了抽屜之后,就要在抽屜中添加建模的工具,對應的就是零售提供商工具、商品工具和消費者工具,如清單1中所示。
這個時候我們新建立一個插件工程,并把上述Palette擴展聲明填寫進插件清單文件中去,然后以工作臺方式運行,我們新建的這個插件也會被自動裝載進啟動的工作臺中。新建"UML模型",打開"建模"視圖,我們可以在palette面板上看到如圖2的所示的截圖。
圖2 用于零售業務建模的Palette片斷
雖然,我們新擴展的零售建模工具已經在Palette面板中出現,但是他們不能執行任何操作,甚至會拋出異常,因此,我們要進一步添加功能方面的擴展。
首先,對應著Palette中的工具,在插件中要有相應的工具類來完成該工具的操作。這個工具類通常要求繼承自com.ibm.xtools.presentation.internal.tools.CreationTool,例如實現消費者的模型生成工具類的代碼段如下:
其中,
- 構造函數,傳進參數IElementType,定義該模型具有的語義信息;
- performCreation,具體的執行動作,為了簡單起見,我們都是調用了父類的方法。
類似的,我們也實現了零售提供商和商品的生成工具類,即SupplierCreationTool和ProductCreationTool。這些工具生成類的對象控制都是由插件清單中指定的工廠類來進行控制的,如清單1中的片斷,
這個工廠需要繼承自com.ibm.xtools.gef.internal.ui.palette.PaletteFactory.Adapter,事實上PaletteFactory的Adapter已經完成了絕大部分的工作,在例子中實現的工廠類BizdemoPaletteFactory中僅僅需要重載一個方法就可以了,如下面程序段所示:
其中:
- 參數toolId,表示的是目前需要生成的工具id,對應的也就是插件清單文件中Entry節點聲明的id;
- 返回值,返回對應的生成工具對象,也就是我們前面已經實現的四個生成工具類;
- 傳遞給生成工具對象的ElementType,為了簡單起見,我們將UML中的CLASS類型傳給了生成工具,在第五章中,我們將介紹如何對他進行進一步的擴展,包括在語義方面的擴展。
至此,我們就已經用靜態擴展的方式對Palette進行了擴展,提供了一個簡單的零售業務的建模工具。
共3頁: 1 [2] [3] 下一頁 |