`

bstekIDE Eclipse插件扩展点应用介绍

阅读更多

       众所周知,Eclipse开发平台本身就是基于插件体系的,为了实现某个功能,我们可以在Eclipse的基础上以插件的方式添加我们需要的功能,bstekIDE就是这样实现的,同时我们还可以通过给插件增加扩展点,来给插件添加插件从而达到对已有插件进行扩展以及定制来适应我们的需要
       为了提高bstekIDE的灵活性,我们给其增加了三个扩展点:com.bstek.ide.common.editor.generateNodeWizards, com.bstek.ide.common.editor.generateJspWizards, com.bstek.ide.common.editor.generateViewWizards.下面我们将分别对其进行讲解,帮助广大bstek用户来根据自己的需要在bstekIDE的基础上制作自己的插件


        1.com.bstek.ide.common.editor.generateNodeWizards
       在编辑view.xml文件的时候,我们会碰到以下几个问题:比如我们在添加一个DataTable control节点的时候,通常的步骤是点击controls节点,然后从右键菜单中选择DataTable菜单项,添加节点之后,然后指定dataset属性,以及其他的一些属性,最后修改默认id值,而这个id值一般都是根据dataset来的,比如我们关联的dataset id名为datasetEmployee,那么对应的DataTable的id名则为tableEmployee.通过该扩展点我们将简化这个过程,即提供一个新建DataTable Control节点向导,向导中会根据我们的需要只列出我们通常会设置的属性,而且在我们在指定了dataset的值之后,自动生成对应的DataTable的id值.

       要开发一个插件的过程非常简单,下面我们给出一个具体的实现过程:
      注意在安装eclipse的时候,必须带有PDE插件模块,该插件模块是专门用来开发插件的
      然后创建一个plug-in project, 指定工程名之后,一路next,直到finish即可,如下图所示


      然后打开MANIFEST.MF文件,转到Dependencies设置页,添加依赖的插件工程,这里我们需要选择三个依赖插件:com.bstek.ide.common.editor, com.bstek.ide.core, com.bstek.libraries.如下图:


      接着是转到extensions设置页,点击add按钮,添加要使用的扩展点:com.bstek.ide.common.editor.generateNodeWizards,如下图所示:


      在扩展点上点右键,选择new->wizard, 这里有两个属性设置:
      name:使用向导生成节点的节点名,如果不是节点名,则是创建节点的右键菜单名
      context:如果该向导不属于某个节点,那么则是某个节点的右键菜单,该属性用来指明节点的类型,通常就是rules.xml中某个rule的name值
       比如要对新建DataTable节点使用wizard,那么name的值为Control-DataTable(这个值是从view-rules.xml中找到的), 而这里的context属性不用设置,context一般在一个向导中创建两个关联节点的时候才会用到,比如我们一次要创建Button和Command两个节点,这里我们的name值就是我们希望在右键菜单看到的菜单项,而context则是当前创建的这个菜单项是放在那个节点下的,比如Controls(这个值也是从view-rules.xml中取得)

      然后是点击我们创建wizard节点,选择右键new->page,在wizard下添加一个page节点,这里面有四个属性需要进行设置:
      context:指定当前编辑节点类型,这个值是xxx-rules.xml文件中rule节点的name属性值
      reference:用来说明当前页中的id值是根据那个属性自动获得的,比如将该属性设置为dataset,则当前节点id属性值是根据reference的属性值使用指定的entryNameExtractingStrategy类来获取
      self:指定当前编辑的节点是否为前一页所编辑节点的子节点, true表示是,否则不是,默认是否
      entryNameExtractingStrategy:指定的实现类用来说明将采用何种方式从reference属性值中得到当前新增节点的id值,如果没有指定,将使用com.bstek.ide.contributor.EntryNameExtractingByReferenceStrategy
       作为默认实现类,该类将从reference中取得制定的值,并作为dataset的id进行解析来得到entryName,比如给定的reference是dataset,那么id值将从dataset属性中取得,如果dataset属性为datasetEmployee,那么默认情况下当前节点的id为"前缀+Employee",如tableEmployee
       说明:这里的的self属性一般不用设置,一般需要用多个向导页面来创建一个节点的时候,在后续的页面设置中才使用,用来表明,当前的设置是针对第一个页面中创建的节点的, reference一般都是dataset,因为该扩展点主要针对根据dataset创建control节点的情况,如果是针对dataset来创建的control的,那么entryNameExtractingStrategy属性一般也不用指定,用默认的就好

       选择我们前面创建的节点,右键选择new->property,创建一个属性节点,这里只有一个属性需要设置:
       name:指定属性名
       这里是用来指定在当前的向导页面中要对那些属性进行设置,简单的说就是把一个节点的常用的属性集中到向导页面中来进行设置


        这样针对com.bstek.ide.common.editor.generateNodeWizards的一个扩展就创建好了
        下面的工作就是将当前的插件工程进行打包
         选择当前工程,右键选择export->在列表中选择Plug-in Develop,然后再选择Deployable plug-ins and fragment, 点击next按钮,在Destination选项卡中制定要发布的目录,这里可以随便制定,最后点击finish按钮,创建的插件是以jar的形式打包的,然后放到eclipse的plugins目录下就可以了


         我们再次打开eclipse的时候,在xxx.view.xml文件中添加一个DataTable控件的时候,就不是以前我们那样添加直接新建一个节点,然后一个属性一个属性的设置了,而是把属性的设置放到向导页面中来做了,而且还能根据我们指定的dataset属性值来自动生成id值(如果该id值已经存在,它将给一个默认值)

         下面是的扩展是一次创建两个节点(Button和QueryCommand)的设置,它将在点击Controls的右键菜单项下新建一个叫"QueryCommand + Button"的菜单项

  1. <wizard  
  2.     context="Controls"  
  3.     name="QueryCommand + Button">  
  4.  <page  
  5.        context="Control-QueryCommand"  
  6.        reference="conditionDataset">  
  7.     <property name="queryDataset"/>  
  8.  page>  
  9.  <page  
  10.        context="Control-Button"  
  11.        reference="command">  
  12.     <property name="value"/>  
  13.     <property name="width"/>  
  14.  page>  
  15. wizard>  

         2.com.bstek.ide.common.editor.generateViewWizards
         有时候我们创建的view可能大同小异,比如针对单表操作的模块,唯一不同的可能在于dataset对应的数据库表不同而已,针对这种情况,我们一般想到的是提供一个模板,将变动的部分以参数的形式传递给模板引擎,最终生成我们需要的内容,这里我们提供了一个扩展点来让用户添加不同的模板.目前有各种不同的模板技术,这里我们使用的是velocity(http://velocity.apache.org/),该技术比较简单,可以通过它提供的文档熟悉其用法.
         在我们前面创建的插件工程中,首先添加com.bstek.ide.common.editor.generateViewWizards扩展点,然后选中该扩展点,在右键菜单中选中new->template,创建template节点,这里有两个属性要设置:
         name:对该模板的描述, 这里的名称可以随便取
         file:指定相关的模板文件,该模板文件需要我们来创建一个,下面是我们使用到的模板文件:

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <view>  
  3. <!---->
  4. ##定制变量   
  5. #if(${datasetEntryId})   
  6.  #set($datasetEntryId=${datasetEntryId})   
  7. #else   
  8.  #set($datasetEntryId="datasetEntry")   
  9. #end   
  10.   
  11. #if(${datasetSearchId})   
  12.  #set($datasetSearchId=${datasetSearchId})   
  13. #else   
  14.  #set($datasetSearchId="datasetSearch")   
  15. #end   
  16. -->  
  17.   <Datasets>  
  18.     <Dataset type="Wrapper" id="${datasetEntryId}" wrappedType="AutoSql">  
  19.       <MasterLink/>  
  20.       <Fields/>  
  21.       <Joins/>  
  22.       <MatchRules/>  
  23.       <SortRules/>  
  24.       <Parameters/>  
  25.       <Properties/>  
  26.     Dataset>  
  27.     <Dataset type="Form" id="${datasetSearchId}">  
  28.       <MasterLink/>  
  29.       <Fields/>  
  30.       <Parameters/>  
  31.       <Properties/>  
  32.     Dataset>  
  33.   Datasets>  
  34.   <Controls>  
  35.     <Control type="DataTable" dataset="${datasetEntryId}" height="100%" id="tblEntry" width="100%"/>  
  36.     <Control type="AutoForm" id="frmSearch" dataset="${datasetSearchId}"/>  
  37.     <Control id="btnSearch" command="cmdSearch" type="Button"/>  
  38.     <Control id="cmdSearch" queryDataset="${datasetEntryId}" type="QueryCommand" conditionDataset="${datasetSearchId}">  
  39.       <Parameters/>  
  40.     Control>  
  41.     <Control id="pltEntry" dataset="${datasetEntryId}" type="PagePilot"/>  
  42.   Controls>  
  43.   <Properties/>  
  44. view>  
  45.   

         该文件中使用了velocity中的一些定义模板的语法,不懂之处可以参考velocity的相关文档,它定义了一个查询操作的通用view.xml模板,包括两个dataset,一个用于对查询表的封装,一个对查询autoform的封装,然后在control中创建了一个DataTable,用来显示查询结果,一个AutoForm,用来查询条件,一个Button+QueryCommand,提交AutoForm中的查询条件,以及一个分页控件PagePilot
         在该模板文件中,我们指定了两个输入参数:datasetEntryId和datasetSearchId,为了将这两个参数值传递给模板,我们还需要给template节点添加两个parameter节点,节点的id为datasetEntryId和datasetSearchId
         parameter有三个属性:
         id:唯一标识符,用来与模板中要用到的变量对应
         defaultValue:为模板中要使用的变量给一个默认值
         options:有时候定义的变量值可能是一些固定的,比如如果是布尔值的时候就是true和false,该属性就是用来列出这些固定枚举值并用逗号分隔

        

          这样我们就扩展点就做好了,打包发布到eclipse的plugins目录下之后在新建view的时候,我们的向导中就会出现我们添加的模板选项,选择并指定参数,就可以调用模板生成我们需要的view.xml文件


         这里需要注意的是,在对插件工程进行打包的时候有几个设置要指定一下:
         一个就是MANIFEST.MF文件中的build选项里面的Binary Build中要将模板所在的文件夹选中

         在export设置中要将"Package plug-ins as individual JAR archive"选中去掉,这样生成的就不是jar包而是以文件夹形式生成插件

         3.com.bstek.ide.common.editor.generateJspWizards
         既然view.xml文件可以做成模板,那么相应的,由该文件生成的jsp页面也可以采用模板的形式来产生jsp文件,除此之外,我们还可以定制不同的布局模板,然后在根据view.xml配置生成jsp的时候,将制定的control放到制定的布局位置中,而不是简单的将所有jsp可见的控件以自定义标签的形式在jsp中列出.
         跟创建com.bstek.ide.common.editor.generateViewWizards类似,也是先添加com.bstek.ide.common.editor.generateJspWizards扩展点,然后在该扩展点下创建template节点,template的属性设置跟generateViewWizards一样,在parameter节点属性多了一个controlled属性,它用来标识该模板变量的值是否是当前要显示的所有控件id值(一个或者多个),默认为false,当为true的时候,该属性的值需要从control id列表中来选择


         这里我们定义了一个查询页面模板:

xml 代码
  1. <%@ page contentType="text/html; charset=UTF-8"%>  
  2. #if( ${importTagLib} == "true" )   
  3. <%@ taglib uri="http://www.bstek.com/dorado" prefix="d"%>  
  4. #end   
  5. <html>  
  6. <head>  
  7. <title>#if(${title})${title}#end</title>  
  8. </head>  
  9. <body scroll="${scroll}">  
  10. <d:View config="${config}">  
  11.     <d:Layout type="border">  
  12.         <d:Pane position="top">  
  13.             <d:Layout type="border">  
  14.                 <d:Pane position="center">  
  15.                     #if(${searchForm})   
  16.                         ${searchForm}   
  17.                     #end   
  18.                 </d:Pane>  
  19.                 <d:Pane position="bottom" align="right">  
  20.                     #if(${searchButton})   
  21.                         ${searchButton}   
  22.                     #end   
  23.                 </d:Pane>  
  24.             </d:Layout>  
  25.         </d:Pane>  
  26.         <d:Pane position="center">  
  27.                
  28.             <d:Layout type="border">  
  29.                 <d:Pane position="center">  
  30.                     #if(${searchTable})   
  31.                         ${searchTable}   
  32.                     #end   
  33.                 </d:Pane>  
  34.                 <d:Pane position="bottom" align="right">  
  35.                     #if(${tablePilot})   
  36.                         ${tablePilot}   
  37.                     #end   
  38.                 </d:Pane>  
  39.             </d:Layout>  
  40.           </d:Pane>  
  41.     </d:Layout>  
  42. </d:View>  
  43. </body>  
  44. </html>  

          扩展点设置完之后,打包发布到eclipse的plugins目录下,当我们再次点击view.xml文件中的view节点,新建一个jsp页面的向导页面中就会多出两个页面,即一个选择模板,另一个就是为模板中指定的不同位置添加不同的view.xml配置文件中新建的control节点

分享到:
评论

相关推荐

    eclipse扩展点介绍 插件

    在本文中,我们将深入探讨Eclipse的扩展点及其对开发者的重要性,同时也会提及如何通过插件来利用这些扩展点。 **一、Eclipse扩展点的概念** Eclipse的扩展点是它插件系统的核心组成部分,它定义了插件可以插入或...

    Eclipse插件开发扩展点大全(中文)

    "Eclipse插件开发扩展点API中文.chm"文件提供了中文文档,可以帮助开发者更容易地理解和应用这些概念,从而实现功能丰富的Eclipse插件。 开发Eclipse插件时,理解并熟练使用这些扩展点是至关重要的,因为它们决定了...

    Eclipse常用插件扩展点

    本篇文章将深入探讨Eclipse插件开发中的关键知识点,包括插件扩展点、RCP(Rich Client Platform)应用开发以及如何在Eclipse RCP中整合第三方库。 首先,让我们了解Eclipse插件扩展点。扩展点是Eclipse平台提供的...

    Eclipse插件开发扩展点API中文.chm

    "Eclipse插件开发扩展点API中文.chm"文档就是为帮助开发者理解并使用Eclipse插件开发中的扩展点API而编写的中文指南。 扩展点(Extension Point)是Eclipse插件框架的关键概念,它是插件之间进行交互和扩展的基础。...

    开发自己的eclipse扩展点

    在IT行业中,开发自己的Eclipse扩展点是一项高级技能,它涉及到Eclipse插件开发和平台扩展的深入理解。Eclipse作为一个强大的集成开发环境(IDE),提供了丰富的可扩展性,允许开发者根据自己的需求定制功能。本篇文章...

    RCP、PDE、Eclipse插件、模态、阻塞Eclipse平台、扩展点知识

    "扩展点"是Eclipse插件系统的关键概念,它是Eclipse平台允许插件之间进行通信和扩展的机制。通过定义和实现扩展点,插件可以声明它们提供的功能,而其他插件则可以通过这些扩展点来使用或扩展这些功能。 在压缩包的...

    Eclipse插件开发学习笔记.pdf

    在Eclipse中,插件主要由一系列的扩展点(Extension Points)组成,这些扩展点定义了插件可以提供的功能。插件开发者需要根据Eclipse平台提供的扩展点来开发自己的插件,从而与Eclipse的其他部分集成。 在进行...

    Eclipse从入门到精通 常用插件扩展点

    本章中,我们介绍了Eclipse插件开发中两个重要的扩展点:透视图(Perspectives)和视图(Views)。通过学习这些扩展点,开发者可以轻松地构建定制化的开发环境,满足不同项目的需求。在实际开发中,还有许多其他扩展...

    eclipse插件开发步步教你

    本教程旨在逐步指导初学者进行Eclipse插件的开发,通过实例演示如何利用Eclipse平台的API和扩展点来实现各种功能。 首先,我们要理解Eclipse插件的基本概念。Eclipse插件是基于OSGi模块系统构建的,每个插件都是一...

    Eclipse插件开发学习笔记全篇+源码.rar

    1. 插件体系结构:理解Eclipse的插件模型,如何通过插件来构建可扩展的应用。 2. OSGi框架:Eclipse基于OSGi运行,了解OSGi的概念和它在插件中的作用。 3. PDE(Plugin Development Environment):Eclipse内置的...

    Eclipse平台扩展点清单

    本文将详细介绍 Eclipse 平台中的多个关键扩展点及其作用,帮助开发者更好地理解和利用 Eclipse 的扩展能力。 #### 二、核心扩展点 **1. org.eclipse.core.contenttype.contentTypes** 此扩展点用于定义新的内容...

    Eclipse插件开发 第1篇到第4篇 开发基础 核心技术 高级进阶 综合实例 eclipse 插件安装方法.zip

    接着,《Eclipse插件开发 学习笔记 第2篇 核心技术》将深入探讨更复杂的主题,如扩展点(Extension Points)和扩展(Extensions)。扩展点是Eclipse平台提供的接口,允许插件向Eclipse生态系统添加功能。开发者需要...

    Eclipse插件开发(第3版 - 高清).pdf.zip

    这本书深入浅出地介绍了如何利用Java、SWT和JFace技术来构建强大的Eclipse插件。以下将详细探讨这些知识点: 1. **Eclipse插件开发**: Eclipse作为一个开放源码的集成开发环境(IDE),其核心设计就是基于插件的...

    eclipse插件开发PDF

    3. 编写扩展点:Eclipse插件之间通过扩展点来通信,开发者需要定义和实现扩展点来提供或使用其他插件的功能。 4. 用户界面开发:可以使用SWT(Standard Widget Toolkit)和JFace来开发用户界面。SWT模拟了操作系统...

    eclipse插件开发ppt

    开发Eclipse插件的基本步骤包括:确定插件与平台的集成方式、定义所需的扩展点、实现扩展点功能、编写plugin.xml文件来描述插件信息,然后进行测试、封装和发布。常见的扩展点包括视图(Views)、编辑器(Editors)...

    Eclipse插件开发教程PPT Eclipse插件开发教程PPT

    4. **扩展点(Extension Points)**:Eclipse通过扩展点允许插件添加新的功能到Eclipse环境中。开发者可以在`plugin.xml`中声明对特定扩展点的贡献,如菜单项、视图或透视图。 5. **插件编程模型**:基于Java的API...

    eclipse常用扩展点使用

    "eclipse常用扩展点使用"这一主题涵盖了Eclipse平台的核心特性——插件系统,它允许开发者通过扩展点来定制和增强Eclipse的功能。下面我们将深入探讨Eclipse的几个关键扩展点,并了解如何利用它们来提高开发效率。 ...

Global site tag (gtag.js) - Google Analytics