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 閱讀(4296) 評論(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
          主站蜘蛛池模板: 垫江县| 调兵山市| 开阳县| 乌拉特后旗| 中方县| 万年县| 邯郸市| 嘉鱼县| 佛坪县| 芦溪县| 扶风县| 伊通| 长岛县| 社旗县| 延长县| 兰州市| 类乌齐县| 西乌| 承德市| 双牌县| 富源县| 武隆县| 盐亭县| 田阳县| 龙泉市| 隆尧县| 永登县| 贵定县| 南康市| 沙雅县| 郓城县| 斗六市| 鄱阳县| 保德县| 宝兴县| 哈密市| 镶黄旗| 明水县| 蕉岭县| 花莲县| 常熟市|