插件高级应用---通过扩展点自定义组件

      在前面我介绍了在首选项中来对bstekIDE进行扩展(dorado studio插件定制扩展应用两则 ),这个扩展只能应付一些简单的基于已有的,静态的定制(比如修改前缀,修改已有组件的属性来得到一个新的组件等等),如果要实现更复杂的定制(比如通过自定义dataset,在加载数据的地方加入一些其他的业务信息),则可以通过我们提供的扩展点(com.bstek.ide.core.viewRules)以插件的方式来进行定制扩展.
      在dorado studio Swing版本中,为了做到对view-rules.xml进行定制,一般的步骤是:先将写好的java打成jar包以及需要依赖的jar包放到studio的lib目录下,然后把自定义user-view-rules.xml文件放到studio的configs目录下即可
在插件版本中的做法基本类似,下面我们就具体做法进行介绍
      在2007-11-07之后我们推出的插件版本中增加了一个扩展点com.bstek.ide.core.viewRules,它就是用来实现user-view-rules.xml配置文件的作用
      首先我们需要先使用带有插件开发功能的PDE插件的Eclipse创建一个插件工程,具体步骤,可以参考"bstekIDE Eclipse插件扩展点应用介绍 "这篇文章的介绍
创建好插件工程之后,打开MANIFEST.MF文件,转到Dependencies设置页,添加依赖的插件工程,这里我们需要选择两个依赖插件: com.bstek.ide.core, com.bstek.libraries
      接着是转到extensions设置页,点击add按钮,添加要使用的扩展点:com.bstek.ide.core.viewRules
      如果你以前在dorado studio Swing版本下已经定义好了user-view-rules.xml文件,那么,我们可以直接将其copy到我们当前添加的扩展点下.但是还有一些小的地方需要修改
       虽然dorado插件版和Swing版使用的xxx-view.xml配置文件大部分情况下是一致的,但是还是有少部分区别,一个是listener和objectClazz property定义加了个kind以及superClazz属性,这里的kind值目前均为java,而superClazz如同他的名字一样,就是在给属性dataset的listener属性生成一个java类的时候,指定的父类,对于dataset的listener一般为"com.bstek.dorado.data.AbstractDatasetListener", 另一个是function的clazz属性,在定义的时候注意一下区别,比如:

xml 代码 
  1. <function text="Open Listener" icon="java/java.png" clazz="com.bstek.designer.impl.module.ShowDatasetListenerClassFunction"/>需要改成   
  2. <function text="Open Listener" icon="java/java.png" clazz="com.bstek.ide.action.OpenListenerAction"/>  
  3. 而   
  4. <property name="listener"/>  
  5. <property name="objectClazz" type="java.lang.String"/>  
  6. 需要改成   
  7. <property name="listener" kind = "java" superClazz="com.bstek.dorado.data.AbstractDatasetListener"/>  
  8. <property name="objectClazz" type="java.lang.String" kind="java"/>  

对于dataset来说,如果你的dataset的object属性指定的类是从com.bstek.dorado.data.db.AutoSqlDataset继承过来的,那么"Auto create fields"这个function的clazz属性要保持跟Dataset-AutoSql里面的"Auto create fields" function一致,其他的以此类推,如果是直接从AbstractViewDataset继承的,则function的clazz需要设置为com.bstek.ide.action.GenerateViewDatasetFieldAction

下面是我们为了与synchroflow工作流进行整合而自定义的几个dataset的plugin.xml配置文件

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <!---->eclipse version="3.2"?>  
  3. <plugin>  
  4.    <extension  
  5.          point="com.bstek.ide.core.viewRules">  
  6.       <rules>  
  7.  <rule name="Datasets">  
  8.   <children>  
  9.    <child name="Dataset-SCFUserDataset" insertable="true" defaultNamePrefix="dataset"/>  
  10.    <child name="Dataset-SCFProDefDataset" insertable="true" defaultNamePrefix="dataset"/>  
  11.    <child name="Dataset-SCFProInsDataset" insertable="true" defaultNamePrefix="dataset"/>  
  12.    <child name="Dataset-SCFRelDataset" insertable="true" defaultNamePrefix="dataset"/>  
  13.    <child name="Dataset-SCFWorkItemDataset" insertable="true" defaultNamePrefix="dataset"/>  
  14.   children>  
  15.  rule>  
  16.  <rule name="Dataset-SCFUserDataset" text="SCFUserDataset" tagName="Dataset" object="com.bstek.dorado.synchroflow.dataset.SCFUserDataset" nameAttribute="id" editable="true" icon="view/scf/synchroflow.png" expanded="true" eventSet="Dataset">  
  17.   <properties>  
  18.    <property name="id" required="true"/>  
  19.    <property name="listener" kind = "java" superClazz="com.bstek.dorado.data.AbstractDatasetListener"/>  
  20.    <property name="state" visible="false"/>  
  21.    <property name="type" visible="false" defaultValue="SCFUserDataset"/>  
  22.    <property name="objectClazz" type="java.lang.String" kind="java"/>  
  23.    <property name="autoLoadData"  defaultValue="false"/>  
  24.    <property name="insertOnEmpty"  defaultValue="true"/>  
  25.   properties>  
  26.   <children>  
  27.    <child name="MasterLink" fixed="true"/>  
  28.    <child name="Fields-Base" fixed="true"/>  
  29.    <child name="Parameters" fixed="true"/>  
  30.    <child name="Properties" fixed="true"/>  
  31.   children>  
  32.   <functions>  
  33.    <function text="Auto create fields" icon="module/list-field.png" clazz="com.bstek.ide.action.GenerateViewDatasetFieldAction"/>  
  34.    <function text="Open Listener" icon="java/java.png" clazz="com.bstek.ide.action.OpenListenerAction"/>  
  35.   functions>  
  36.  rule>  
  37.  <rule name="Dataset-SCFProDefDataset" text="SCFProDefDataset" tagName="Dataset" object="com.bstek.dorado.synchroflow.dataset.SCFProDefDataset" nameAttribute="id" editable="true" icon="view/scf/synchroflow.png" expanded="true" eventSet="Dataset">  
  38.   <properties>  
  39.    <property name="id" required="true"/>  
  40.    <property name="listener" kind = "java" superClazz="com.bstek.dorado.data.AbstractDatasetListener"/>  
  41.    <property name="state" visible="false"/>  
  42.    <property name="type" visible="false" defaultValue="SCFProDefDataset"/>  
  43.    <property name="objectClazz" type="java.lang.String" kind="java"/>  
  44.   properties>  
  45.   <children>  
  46.    <child name="MasterLink" fixed="true"/>  
  47.    <child name="Fields-Base" fixed="true"/>  
  48.    <child name="Parameters" fixed="true"/>  
  49.    <child name="Properties" fixed="true"/>  
  50.   children>  
  51.   <functions>  
  52.    <function text="Auto create fields" icon="module/list-field.png" clazz="com.bstek.ide.action.GenerateViewDatasetFieldAction"/>  
  53.    <function text="Open Listener" icon="java/java.png" clazz="com.bstek.ide.action.OpenListenerAction"/>  
  54.   functions>  
  55.  rule>  
  56.  <rule name="Dataset-SCFProInsDataset" text="SCFProInsDataset" tagName="Dataset" object="com.bstek.dorado.synchroflow.dataset.SCFProInsDataset" nameAttribute="id" editable="true" icon="view/scf/synchroflow.png" expanded="true" eventSet="Dataset">  
  57.   <properties>  
  58.    <property name="id" required="true"/>  
  59.    <property name="listener" kind = "java" superClazz="com.bstek.dorado.data.AbstractDatasetListener"/>  
  60.    <property name="state" visible="false"/>  
  61.    <property name="type" visible="false" defaultValue="SCFProInsDataset"/>  
  62.    <property name="objectClazz" type="java.lang.String" kind="java"/>  
  63.   properties>  
  64.   <children>  
  65.    <child name="MasterLink" fixed="true"/>  
  66.    <child name="Fields-Base" fixed="true"/>  
  67.    <child name="Parameters" fixed="true"/>  
  68.    <child name="Properties" fixed="true"/>  
  69.   children>  
  70.   <functions>  
  71.    <function text="Auto create fields" icon="module/list-field.png" clazz="com.bstek.ide.action.GenerateViewDatasetFieldAction"/>  
  72.    <function text="Open Listener" icon="java/java.png" clazz="com.bstek.ide.action.OpenListenerAction"/>  
  73.   functions>  
  74.  rule>  
  75.  <rule name="Dataset-SCFRelDataset" text="SCFRelDataset" tagName="Dataset" object="com.bstek.dorado.synchroflow.dataset.SCFRelDataset" nameAttribute="id" editable="true" icon="view/scf/synchroflow.png" expanded="true" eventSet="Dataset">  
  76.   <properties>  
  77.    <property name="id" required="true"/>  
  78.    <property name="listener" kind = "java" superClazz="com.bstek.dorado.data.AbstractDatasetListener"/>  
  79.    <property name="state" visible="false"/>  
  80.    <property name="type" visible="false" defaultValue="SCFRelDataset"/>  
  81.    <property name="objectClazz" type="java.lang.String" kind="java"/>  
  82.    <property name="autoLoadData"  defaultValue="false"/>  
  83.    <property name="insertOnEmpty"  defaultValue="true"/>  
  84.   properties>  
  85.   <children>  
  86.    <child name="MasterLink" fixed="true"/>  
  87.    <child name="Fields-Base" fixed="true"/>  
  88.    <child name="Parameters" fixed="true"/>  
  89.    <child name="Properties" fixed="true"/>  
  90.   children>  
  91.   <functions>  
  92.    <function text="Auto create fields" icon="module/list-field.png" clazz="com.bstek.ide.action.GenerateViewDatasetFieldAction"/>  
  93.    <function text="Open Listener" icon="java/java.png" clazz="com.bstek.ide.action.OpenListenerAction"/>  
  94.   functions>  
  95.  rule>  
  96.  <rule name="Dataset-SCFWorkItemDataset" text="SCFWorkItemDataset" tagName="Dataset" object="com.bstek.dorado.synchroflow.dataset.SCFWorkItemDataset" nameAttribute="id" editable="true" icon="view/scf/synchroflow.png" expanded="true" eventSet="Dataset">  
  97.   <properties>  
  98.    <property name="id" required="true"/>  
  99.    <property name="listener" kind = "java" superClazz="com.bstek.dorado.data.AbstractDatasetListener"/>  
  100.    <property name="state" visible="false"/>  
  101.    <property name="type" visible="false" defaultValue="SCFWorkItemDataset"/>  
  102.    <property name="objectClazz" type="java.lang.String" kind="java"/>  
  103.   properties>  
  104.   <children>  
  105.    <child name="MasterLink" fixed="true"/>  
  106.    <child name="Fields-Base" fixed="true"/>  
  107.    <child name="Parameters" fixed="true"/>  
  108.    <child name="Properties" fixed="true"/>  
  109.   children>  
  110.   <functions>  
  111.    <function text="Auto create fields" icon="module/list-field.png" clazz="com.bstek.ide.action.GenerateViewDatasetFieldAction"/>  
  112.    <function text="Open Listener" icon="java/java.png" clazz="com.bstek.ide.action.OpenListenerAction"/>  
  113.   functions>  
  114.  rule>  
  115. rules>  
  116.    extension>  
  117.   
  118. plugin>  


在这个插件配置文件中<rules></rules>节点下的配置基本上跟我们以前在Swing版本下的配置一样.

在自定义的dataset中,我们使用到了一些自己定义的java类,这些java类已经打包,为了插件能调用到,我们需要在当前工程下新建一个文件夹lib,然后将我们的java文件打成的jar包以及相关的依赖jar包放到lib目录下.此外,还给我们自定义的dataset一个新的图标,这个我们也要添加到当前工程下

extension-1 

在打包前,我们还需要对我们引用的jar包进行一下设置
打开MANIFEST.MF文件,转到Runtime设置页的classpath选项,点击"add"按钮,选中我们添加的两个jar包,得到如下的设置

extension-2 
因为默认情况下在build的时候不会包含我们添加的资源文件,所以我们应该在Build选项页的"Binary Build"中将view文件夹选中

extension-3 
最后一步就是打包(选中工程,选择右键"export..."->"Plugin-in Development"->"Deployable plug-ins and fragment"选项,然后next->finish),因为我们这里使用图片资源文件,因此在打包的时候需要将"Package plug-ins as individual JAR archive"选项去掉,打包成文件夹的形式
将打包完成的插件放到Eclipse安装目录下的plugins文件夹中,重新启动Eclipse即可

extension-4 

你可能感兴趣的:(java,eclipse,xml,swing,ide)