为了提高建模的效率,开发人员希望在Palette中定制代表了这些业务角色的新元素。本文基于上面的实例总结了开发人员在进行Palette扩展时所采用的基本实现技术和难点。3 基于RSA的Palette静态扩展从前面的讨论可以知道,RSA是构建在Eclipse3.0的基础之上的。Eclipse的插件结构是Eclipse重要的基础设施和体系结构,其中应用扩展点是两个或者多个插件完成协作的基础。基于RSA的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扩展声明
以清单2为例,上述entry节点中
虽然,我们新扩展的零售建模工具已经在Palette面板中出现,但是他们不能执行任何操作,甚至会抛出异常,因此,我们要进一步添加功能方面的扩展。首先,对应着Palette中的工具,在插件中要有相应的工具类来完成该工具的操作。这个工具类通常要求继续自com.ibm.xtools.presentation.internal.tools.CreationTool,例如实现消费者的模型生成工具类的代码段如下:
其中,
其中:
该声明规定扩展点的id为bizdemoProviders,该id将作为未来提供扩展业务角色语义的新插件的定位扩展点的依据。同时,上面的声明还指出,未来这样的新插件必须在自己的plugin.xml声明中使用核心插件schema目录下bizdemoProviders.exsd文件所规定的XML语法来表达对该扩展点的扩展声明。因而,BizDemo核心插件必须在自己的工程目录下创建一个schema目录和其下的一个名为bizdemoProviders.exsd的XSD文件。如下给出了该文件的要害片断:清单4 描述BizDemo核心插件bizdemoProvider扩展点的XSD片断
该声明片断完全符合清单4定义的语法,它表示新的插件将使用BizDemo核心插件的扩展点bizdemo.palette.bizdemoProviders(bizdemo.palette是BizDemo核心插件的id,也作为扩展点的名字空间),并在bizdemoProvider元素的属性descriptor中指出了提供新的业务角色语义的文件名。接下来在新插件工程的根目录下生成名为bizdemo-role.xml的XML文件,并在文件中如下描述"国外提供商"Palette扩展工具项的基本属性:清单6 描述了"国外提供商"Palette扩展工具项属性bizdemo-role.xml声明片断


该声明用自定义的类bizdemo.palette.actions.BizdemoCustomizationAction对org.eclipse.ui.actionSets扩展点进行了扩展。
6 总结从本文的介绍可以看出,由于RSA是基于Eclipse技术搭建起来的,架构师或者开发人员在使用RSA提供的环境进行业务建模时,假如需要对相关的UI组件进行扩展,一般都可以考虑应用RSA内部实现该组件的插件的扩展点,编写新的插件,并在plugin.xml中的扩展点对应的标签内遵循XML模式定义进行扩展描述。假如确实需要在运行时动态加载相关扩展,则可以进一步在新的插件中暴露扩展点,并为未来扩展该插件的插件工程约定扩展项的描述规范。需要非凡指出的是,本文对Palette扩展的技术实现是基于RSA 6.0.0.1版本中标准Palette实现的API。假如RSA在未来被升级,这些API可能会有所变化,从而造成文中所涉及的相关代码和配置将不再准确。但是开发人员仍然可以复用本文的实现思想进行相关调整,从而保证应用开发的正常进行。(责任编辑:铭铭)新闻热点
疑难解答