Get busy living or get busy dying!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  1 随笔 :: 13 文章 :: 0 评论 :: 0 Trackbacks
ECLIPSE的扩展主要体现在EXTENTION-POINT和EXTENTION上。
比如扩展ECLIPSE的视图:
<extension point="org.eclipse.ui.view"/>
     扩展ECLIPSE的编辑器:
<extension point="org.eclipse.ui.editors">
      扩展ECLIPSE的透视图:
<extension point="org.eclipse.ui.perspective">
而这些扩展都是建立在已经有:
<extension-point="org.eclipse.ui.*">
的基础上的。ECLIPSE会在加载extension-point时查找其相应的插件,当然要对应ID,从而实现扩展。
当然,也可以自己编写扩展点:
下面,我们要在net.softapp.worklist插件中定义workList扩展点。
 1. 扩展点的定义文件按照Eclipse的存放方式,一般存放在schema目录下,我们把文件命名为worklist.exsd。内容如下,此内容由PDE生成:
<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="mtn.esip.worklist">
<annotation>
      <appInfo>
         <meta.schema plugin="net.softapp.worklist" id="workList" name="workList"/>
         <!--通过这个定义,我们可以看出,定义的扩展点的id是 net.softapp.worklist.workList,以后引用时要注意,同时注意大小写-->
      </appInfo>
      <documentation>
         [Enter description of this extension point.]
      </documentation>
   </annotation>

   <element name="extension">
      <complexType>
         <choice minOccurs="0" maxOccurs="unbounded">
            <element ref="category" minOccurs="0" maxOccurs="1"/>
            <element ref="worklist" minOccurs="0" maxOccurs="1"/>
         </choice>
         <attribute name="point" type="string" use="required"><!--定义point-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string"><!--定义id-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string"><!--定义name-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>
 
  <!--定义category-->
   <element name="category">
      <complexType>
         <attribute name="name" type="string"><!--定义category/name-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string"><!--定义category/id。引用category时,必须指出应用的id,而name给出了一个可供显示的直观的名字-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="parentCategory" type="string"><!--定义父category,也就是说我们的category可以嵌套形成树状结构-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <!--定义worklist,注意大小写-->//必须的
   <element name="worklist">
      <complexType>
         <attribute name="name" type="string"><!--定义worklist/name,可供显示的直观的名字-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="icon" type="string"><!--定义worklist/icon,可供显示的直观的图标-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="category" type="string">!--定义worklist/category,存放的category位置。如果引用嵌套形式的category,则采用 parent_id/child_id的形式 -->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
         <attribute name="class" type="string"><!--定义worklist/class,实现功能的类名称-->
            <annotation>
               <documentation>                 
               </documentation>
               <appInfo>
                  <meta.attribute kind="java"/>
               </appInfo>
            </annotation>
         </attribute>
         <attribute name="id" type="string" use="required"><!--定义worklist/id,唯一标志-->
            <annotation>
               <documentation>                 
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <!--以下内容为PDE自动生成,与我们的编程无关-->
   <annotation>
      <appInfo>
         <meta.section type="since"/>
      </appInfo>
      <documentation>
         [Enter the first release in which this extension point appears.]
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="examples"/>
      </appInfo>
      <documentation>
         [Enter extension point usage example here.]
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="apiInfo"/>
      </appInfo>
      <documentation>
         [Enter API information here.]
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="implementation"/>
      </appInfo>
      <documentation>
         [Enter information about supplied implementation of this extension point.]
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="copyright"/>
      </appInfo>
      <documentation>        
      </documentation>
   </annotation>

</schema>
  这样我们就定义好了扩展的属性。
  然后在plugin.xml加入:
     <extension-point id="workList" name="workList" schema="schema/workList.exsd"/>
  就定义好了!
2. 实现扩展
  定义完扩展之后,接下来要编写解析此扩展的相关代码。可喜的是,Eclipse为我们提供了大量的API可以调用,省下了若干代码的编写。另外我们还可以借鉴Eclipse实现的其他代码,通过模仿来编写我们自己的解析代码。本例参考了View的解析部分。同View,我们定义了WorkListDescriptor,WorkListRegistry,WorkListRegistryReader.其中WorkListDescriptor完成对上述定义的解析,WorkListRegistry存放了其他插件对workList扩展的相关信息,WorkListRegistryReader则从WorkListRegistry读取信息供我们使用。
  此处代码从略,具体请参考View实现部分的ViewDescriptor,ViewRegistry,ViewRegistryReader相关代码。
3. 编写界面部分
   在类里面编写代码就行。
可见,自己编写扩展点有点复杂,好要等进一步研究:)

posted on 2007-06-27 23:04 一条辉 阅读(200) 评论(0)  编辑  收藏 所属分类: ECLIPSE

只有注册用户登录后才能发表评论。


网站导航: