`

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

阅读更多

      在前面我介绍了在首选项中来对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 

分享到:
评论

相关推荐

    idea插件开发-自定义语言

    - `plugin.xml`:插件配置文件,定义组件、扩展点、菜单项等。 - `src/main/java`:存放Java源代码。 - `src/main/resources`:存放资源文件,如图标、配置文件等。 - `META-INF`:包含插件的元数据信息。 6. *...

    Openlayers扩展插件ol-ext ,2022年4月版本v3.2.23

    而ol-ext是针对OpenLayers的一个扩展插件,它增加了许多额外的功能和视觉效果,使得地图开发更为便捷和美观。 在2022年4月发布的ol-ext版本v3.2.23中,我们关注以下几个关键知识点: 1. **图形和符号**:ol-ext...

    eclipse-jsp插件-GEF-ALL-3.10.0

    开发者可以创建自定义的插件来扩展IDE的功能,比如增加新的编程语言支持、调试器、代码分析工具等。插件的安装通常通过Eclipse的内置更新管理器或者手动复制到正确目录。 3. **版本号3.10.0**:在软件开发中,版本...

    自定义eclipse插件

    3. **扩展点与扩展**:Eclipse插件通过扩展点(Extension Points)来接入Eclipse的工作台。扩展点定义了插件可以插入的接口,而扩展则是实现这些接口的具体功能。 4. **Java编程**:大部分Eclipse插件是用Java编写...

    Revit高级应用----Dynamo可视化编程培训(软件所)

    总之,Revit二次开发是一个持续学习和实践的过程,通过上述知识点的掌握,开发者可以快速入门并逐步掌握Revit的高级开发技巧。对于希望成为高级Revit开发者的人员,还需不断积累经验,拓宽知识面,并持续关注技术的...

    eclipse扩展点介绍 插件

    7. **首选项(Preferences)**:插件可以通过扩展点提供自定义的首选项页,让用户配置插件的行为。 **三、插件开发与扩展点的使用** 开发Eclipse插件时,首先需要识别出需要扩展的特定扩展点,然后在插件的清单文件...

    layui-自定义多选-禁用.rar

    在实际应用中,这个自定义版本的layui日期控件可以极大地提升用户体验,特别是在需要高级日期选择功能的项目中。开发者可以通过解压“layui-自定义多选-禁用.rar”文件,查看源代码并根据自己的需求进行二次开发或...

    eclipse插件开发---简单例子

    - **Extensions and Extension Points**: 插件通过扩展点来添加功能,其他插件则可以通过扩展点来消费这些功能。 - **Perspective and Views**: 视图是用户界面的一部分,透视图组织视图来提供特定的工作环境。 - ...

    仿有赞自定义模板魔方插件

    在IT行业中,自定义模板和...通过这个“仿有赞自定义模板魔方插件”的项目,开发者不仅可以学习到前端开发的各种技术,还能掌握如何设计和实现一个灵活、可扩展的插件系统,从而提升自身在电商解决方案领域的专业能力。

    springboot集成generator自定义插件.rar

    3. **自定义注释插件**:在MBG中,我们可以创建一个自定义插件,扩展`ICommentGenerator`接口,覆盖其方法来实现自定义的注释逻辑。例如,添加版权信息、作者信息或者生成特定的Javadoc。 4. **Maven打包**:在...

    安卓插件机制相关-插件化动态加载在宿主程序中调用插件的组件或类.zip

    在Android开发中,插件化技术是一种非常重要的高级技能,它允许我们把一部分功能模块(插件)独立打包,然后在运行时动态加载到主应用(宿主程序)中,从而实现灵活的功能扩展和更新。这个压缩包"安卓插件机制相关-...

    Android-weex-vue2.0快速开发框架扩展组件支持weexweexpack

    开发者可以通过解压并研究这个项目,学习如何利用Weex和Vue 2.0进行Android应用的开发,同时了解如何扩展和自定义组件。 【Android开发中的其他杂项】 在Android开发中,除了使用Weex这样的跨平台框架,还会涉及很...

    kindeditor--自定义添加网络视频插件,修改批量图片上传方式flash为h5

    总结来说,这个压缩包文件的内容涉及了KindEditor的扩展能力,包括自定义插件开发和利用HTML5技术进行文件上传。通过这样的定制,可以使得KindEditor更好地适应现代浏览器环境,提供更优秀的用户体验。如果你正在...

    EXT 自定义控件扩展

    EXT 自定义控件扩展是EXT框架中的一个重要特性,它允许开发者根据项目需求创建具有特定功能或界面风格的自定义组件。EXT是一个强大的JavaScript库,主要用于构建富客户端的Web应用程序,其核心理念是提供一套完整的...

    --表格-插件.zip--

    标签为“插件”,这进一步强调了这是一个可以被Vue项目所使用的第三方组件,通常插件会提供额外的功能或者扩展Vue的默认行为,以增强应用程序的性能和用户体验。 在压缩包中包含的“表格-插件”可能是该插件的源...

    自定义eclipce扩展点步骤(详细).doc

    在Eclipse中,扩展点(Extension Point)是一种机制,允许开发者通过编写插件来扩展Eclipse的功能。Eclipse的插件体系结构是基于OSGi的,每个插件都可以提供一个或多个扩展点,其他插件则可以通过这些扩展点来实现...

    活字格-高级自定义弹出框.zip

    "活字格-高级自定义弹出框.zip"是一个压缩包,其中包含了多个与Web开发相关的组件和资源,主要用于在活字格(GrapeCity Forguncy)平台中实现高级自定义弹出框功能。活字格是一个企业级的应用程序生成器,允许用户...

    qt自定义插件的创建

    在Qt框架中,自定义插件的创建是一个强大的特性,它允许开发者构建可扩展的应用程序。这种方式使得软件在设计时可以保持简洁,而在后期可以根据需求动态添加或更新功能,极大地提高了软件的灵活性和可维护性。下面将...

    osgi 扩展点实例

    这些服务可以是API、配置、组件等,其他插件可以通过查找和绑定这些扩展点来使用这些服务。 2. **扩展点注册**:每个插件(bundle)可以声明一个或多个扩展点,并在启动时将其注册到OSGi框架。框架维护一个全局的...

    Node.js-vscode-element-helper:一款Element的VSCode插件

    总的来说,"vscode-element-helper"是Node.js与VS Code结合的一个典型案例,它利用Node.js的开发能力和VS Code的插件扩展机制,为使用Element UI的开发者提供了强大的辅助工具,简化了开发流程,提升了开发效率。

Global site tag (gtag.js) - Google Analytics