Live a simple life

沉默(zhu_xing@live.cn)
随笔 - 48, 文章 - 0, 评论 - 132, 引用 - 0
数据加载中……

【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇

  【说明】
    引用了组里一个架构师的一片文章,写的很好的(尤其是里面看起来比较抽象、闲侃的部分)!!!


            使用
CommonNavigator开发资源管理器--基础篇

无论在哪一个开发工具中,资源管理器无疑都是使用最频繁的功能之一,因此一个资源器好用与否在很大程度上就决定了一个开发工具的易用程度。我们常用的Eclipse工具中的Java资源管理器就是一个非常优秀的资源管理器,所以在EOS Studio中,我们也照样抄袭它的功能,但是Java的资源管理器做了非常多的功能。如果从头开始做一个相似的资源管理器将是一个非常大的工作量,无论技术风险还是项目时间,都是非常可观的。幸好Eclipse还提供了一个优秀的插件org.eclipse.ui.navigator(以下简称为CNF,即Common Navigator Framework),这个插件提供了完整而且灵活的扩展机制,可以帮助开发人员进行各种相应的类资源管理器功能。其实这个插件在WTP在自己的项目中提供的,最早是用来开发数据库视图的(根源在于RAD6.0,但在WTP中,源代码被大量重写,所以直接就写成WTP),这个插件有足够的实力证明了自己的优秀,随后在Eclipse3.2版本中,它正式成为Eclipse UI层的核心插件之一,默认的Eclipse平台上有一个Project Explorer视图,就是基于它开发的一个资源管理器视图,它允许各种插件提供相应的内容,从而定制适合于各种环境下的资源管理器,下图显示了它的界面和相应的扩展功能。



     
    左面是一个对应的资源管理器,而右面的对话框则显示了当前资源管理器提供的扩展功能,可以方便用户选择各种资源管理视图的处理方式。

Studioorg.eclipse.ui.navigator的基础上开发了资源管理视图,以及相应的功能,因此要扩展和维护Studio的资源管理器,就需要先了解org.eclipse.ui.navigator这个插件,特别是它的扩展机制。

org.eclipse.ui.navigator尽管只提供了以下三个扩展点,却涉及到expression,还有wizardfilter等一堆内容,所以还是比较复杂的。

org.eclipse.ui.navigator.viewer

用来在视图和扩展之间建立关系

org.eclipse.ui.navigator.navigatorContent

用来提供模型,菜单以及过滤器等内容

org.eclipse.ui.navigator.linkHelper

用来支持文件与资源管理器联动

现在先用一个简单的实例方便开发人员上手,以便进一步了解相关的内容。这个实例就是使用现有的资源,无须编写一行代码,仅仅是通过plugin.xml的配置来配置出一个简单的Java资源管理器。

首先,请先通过向导新建一个Eclipse插件项目org.demo.navigator,如下图所示:



    在新建完项目以后,请导入以下插件
:

org.eclipse.core.runtime

Eclipse的核心之一

org.eclipse.core.resources

Eclipse的资源模型

org.eclipse.ui

EclipseUI框架

org.eclipse.ui.navigator

我们本章要讲的插件

org.eclipse.ui.navigator.resources

一个基于org.eclipse.ui.navigator的插件,提供了ProjectExplorer视图

然后在Eclipse扩展配置的功能页面中,进行了一系列配置以后,可以得到以下的内容,心急的同学可以将该内容复制到plugin.xml文件中,然后运行该插件,即可看到一个简单的Eclipse资源管理器。

<?xml version="1.0" encoding="UTF-8"?>

<?eclipse version="3.2"?>

<plugin>

   <extension

         point="org.eclipse.ui.views">

      <view

            category="org.eclipse.ui"

            class="org.eclipse.ui.navigator.CommonNavigator"

            id="org.demo.navigator.view"

            name="DemoNavigator"/>

   </extension>

   <extension

         point="org.eclipse.ui.navigator.viewer">

      <viewer viewerId="org.demo.navigator.view"/>

      <viewerContentBindingviewerId="org.demo.navigator.view">

         <includes>

            <contentExtension pattern="org.demo.navigator.*"/>

            <actionExtension pattern="org.demo.navigator.*"/>

         </includes>

      </viewerContentBinding>

   </extension>

   <extension

         point="org.eclipse.ui.navigator.navigatorContent">

      <navigatorContent

            contentProvider="org.eclipse.ui.internal.navigator.resources.workbench.ResourceExtensionContentProvider"

            id="org.demo.navigator.content"

            labelProvider="org.eclipse.ui.internal.navigator.resources.workbench.ResourceExtensionLabelProvider"

            name="DemoNavigator">

         <enablement>

            <or>

               <instanceofvalue="org.eclipse.core.resources.IResource"/>

               <adapt type="org.eclipse.core.resources.IProject"/>

            </or>

         </enablement>

      </navigatorContent>

   </extension>

</plugin>


    

    尽管我们并没有写任何一行
Java代码,但是却已经提供了一个具有基本功能的资源管理器,由此可以该插件的强大。

现在针对对应的配置图来讲述相应的内容:



    在这个例子,使用了三个扩展点,分别是
:org.eclipse.ui.viewsorg.eclipse.ui.navigator.viewerorg.eclipse.ui.navigator.navigatorContent

Eclipse插件开发人员对于org.eclipse.ui.views一定不陌生,因为这是Eclipse中最常用的一个扩展点,它用来定义Eclipse的视图,象属性视图,大纲视图都是通过该扩展点来定义的。

org.eclipse.ui.navigator.viewer则是CNF的一个基本扩展点,它提供了将org.eclipse.ui.navigator.navigatorContent与一个CommonNavigator绑定的功能。

   <extension

         point="org.eclipse.ui.navigator.viewer">

      <viewer viewerId="org.demo.navigator.view"/>

      <viewerContentBindingviewerId="org.demo.navigator.view">

         <includes>

            <contentExtension pattern="org.demo.navigator.*"/>

            <actionExtension pattern="org.demo.navigator.*"/>

         </includes>

      </viewerContentBinding>

   </extension>

这段代码表示所有名称符合"org.demo.navigator.*"org.eclipse.ui.navigator.navigatorContent都可作为资源管理器的树模型扩展。

最后一个扩展点org.eclipse.ui.navigator.navigatorContent的配置则是CNF框架中最为复杂的一个点,在例子中,则只采用了最简单的配置信息。

   <extension

         point="org.eclipse.ui.navigator.navigatorContent">

      <navigatorContent

            contentProvider="org.eclipse.ui.internal.navigator.resources.workbench.ResourceExtensionContentProvider"

            id="org.demo.navigator.content"

            labelProvider="org.eclipse.ui.internal.navigator.resources.workbench.ResourceExtensionLabelProvider"

            name="DemoNavigator">

         <enablement>

            <or>

               <instanceofvalue="org.eclipse.core.resources.IResource"/>

               <adapt type="org.eclipse.core.resources.IProject"/>

            </or>

         </enablement>

      </navigatorContent>

   </extension>

每一个org.eclipse.ui.navigator.navigatorContent扩展点都有相应的contentProviderlabelProvider属性,用来定制树模型以及相应的显示功能。而enablement则表示,在何种情况下,才会调用激活这个指定的扩展功能。enablement则采用了org.eclipse.core.expression中定义的扩展点,支持各种复杂的表达式,方便开发人员定义各种条件。



本博客中的所有文章、随笔除了标题中含有引用或者转载字样的,其他均为原创。转载请注明出处,谢谢!

posted on 2008-08-11 12:59 zhuxing 阅读(4231) 评论(7)  编辑  收藏 所属分类: Eclipse Plug-in & OSGI

评论

# re: 【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇[未登录]  回复  更多评论   

抄袭别人的文章,也不写个转字。。。晕
2008-08-29 11:09 | tian

# re: 【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇  回复  更多评论   

【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇
【说明】
引用了组里一个架构师的一片文章,写的很好的(尤其是里面看起来比较抽象、闲侃的部分)!!!


楼上的大哥看到了吗???????
2008-08-29 11:25 | zhuxing

# re: 【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇[未登录]  回复  更多评论   

被揭发之后才贴上去的,有什么意思呀,强烈鄙视此等虚伪。。。
2008-08-29 11:58 | tian

# re: 【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇[未登录]  回复  更多评论   

我是原文的作者
我证实,它不是后修改的
一开始就有这段话
2008-08-29 12:30 | 猪儿笨笨

# re: 【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇  回复  更多评论   

被揭发之后才贴上去的,有什么意思呀,强烈鄙视此等虚伪。。。 ????????????????????????????????????????????????????????????????


我可以负责任的讲,我发的时候就注明了!!! 而且是在文章的最开头和简介中都明确注明了!!!!!!!!!!如果你还有什么疑问,我可以给你他msn,这样可以吗???

如果你和我认识,有什么个人意见你可以当面跟我提!!!我博客上也有我的msn,你也可以在msn上面和我讲。这种匿名人身攻击没什么意思的!!!请你自重!!!

原文的作者和我是同事,也是我现在参与的产品主架构师,很长一段时间我跟他学了不东西,非常尊重他
2008-08-29 12:39 | zhuxing

# re: 【Eclipse插件开发】引用:使用CommonNavigator开发资源管理器--基础篇  回复  更多评论   

为什么好多图片都打不开啊?郁闷,看不到图片理解起来会比较抽象。
2009-06-18 13:16 | gfspirit

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


网站导航: