無論在哪一個開發工具中資源管理器無疑都是使用最頻繁的功能之一因此一個資源器好用與否在很大程度上就決定了一個開發工具的易用程度我們常用的Eclipse工具中的Java資源管理器就是一個非常優秀的資源管理器所以在EOS Studio中我們也照樣抄襲它的功能但是Java的資源管理器做了非常多的功能如果從頭開始做一個相似的資源管理器將是一個非常大的工作量無論技術風險還是項目時間都是非常可觀的幸好Eclipse還提供了一個優秀的插件orgeclipseuinavigator(以下簡稱為CNF即Common Navigator Framework)這個插件提供了完整而且靈活的擴展機制可以幫助開發人員進行各種相應的類資源管理器功能其實這個插件在WTP在自己的項目中提供的最早是用來開發數據庫視圖的(根源在於RAD但在WTP中源代碼被大量重寫所以直接就寫成WTP)這個插件有足夠的實力證明了自己的優秀隨後在Eclipse版本中它正式成為Eclipse UI層的核心插件之一默認的Eclipse平台上有一個Project Explorer視圖就是基於它開發的一個資源管理器視圖它允許各種插件提供相應的內容從而定制適合於各種環境下的資源管理器下圖顯示了它的界面和相應的擴展功能
左面是一個對應的資源管理器而右面的對話框則顯示了當前資源管理器提供的擴展功能可以方便用戶選擇各種資源管理視圖的處理方式
Studio在orgeclipseuinavigator的基礎上開發了資源管理視圖以及相應的功能因此要擴展和維護Studio的資源管理器就需要先了解orgeclipseuinavigator這個插件特別是它的擴展機制
orgeclipseuinavigator盡管只提供了以下三個擴展點卻涉及到expression還有wizardfilter等一堆內容所以還是比較復雜的
orgeclipseuinavigatorviewer
用來在視圖和擴展之間建立關系
orgeclipseuinavigatornavigatorContent
用來提供模型菜單以及過濾器等內容
orgeclipseuinavigatorlinkHelper
用來支持文件與資源管理器聯動
現在先用一個簡單的實例方便開發人員上手以便進一步了解相關的內容這個實例就是使用現有的資源無須編寫一行代碼僅僅是通過pluginxml的配置來配置出一個簡單的Java資源管理器
首先請先通過向導新建一個Eclipse插件項目orgdemonavigator如下圖所示:
在新建完項目以後請導入以下插件:
reruntime
Eclipse的核心之一
reresources
Eclipse的資源模型
orgeclipseui
Eclipse的UI框架
orgeclipseuinavigator
我們本章要講的插件
orgeclipseuinavigatorresources
一個基於orgeclipseuinavigator的插件提供了ProjectExplorer視圖
然後在Eclipse擴展配置的功能頁面中進行了一系列配置以後可以得到以下的內容心急的同學可以將該內容復制到pluginxml文件中然後運行該插件即可看到一個簡單的Eclipse資源管理器
<?xml version= encoding=UTF?>
<?eclipse version=?>
<plugin>
<extension
point=orgeclipseuiviews>
<view
category=orgeclipseui
class=orgeclipseuinavigatorCommonNavigator
id=orgdemonavigatorview
name=DemoNavigator/>
</extension>
<extension
point=orgeclipseuinavigatorviewer>
<viewer viewerId=orgdemonavigatorview/>
<viewerContentBindingviewerId=orgdemonavigatorview>
<includes>
<contentExtension pattern=orgdemonavigator*/>
<actionExtension pattern=orgdemonavigator*/>
</includes>
</viewerContentBinding>
</extension>
<extension
point=orgeclipseuinavigatornavigatorContent>
<navigatorContent
contentProvider=orgeclipseuiinternalnavigatorresourcesworkbenchResourceExtensionContentProvider
id=orntent
labelProvider=orgeclipseuiinternalnavigatorresourcesworkbenchResourceExtensionLabelProvider
name=DemoNavigator>
<enablement>
<or>
<instanceofvalue=reresourcesIResource/>
<adapt type=reresourcesIProject/>
</or>
</enablement>
</navigatorContent>
</extension>
</plugin>
盡管我們並沒有寫任何一行Java代碼但是卻已經提供了一個具有基本功能的資源管理器由此可以該插件的強大
現在針對對應的配置圖來講述相應的內容:
在這個例子使用了三個擴展點分別是:orgeclipseuiviewsorgeclipseuinavigatorviewer和orgeclipseuinavigatornavigatorContent
Eclipse插件開發人員對於orgeclipseuiviews一定不陌生因為這是Eclipse中最常用的一個擴展點它用來定義Eclipse的視圖象屬性視圖大綱視圖都是通過該擴展點來定義的
orgeclipseuinavigatorviewer則是CNF的一個基本擴展點它提供了將orgeclipseuinavigatornavigatorContent與一個CommonNavigator綁定的功能
<extension
point=orgeclipseuinavigatorviewer>
<viewer viewerId=orgdemonavigatorview/>
<viewerContentBindingviewerId=orgdemonavigatorview>
<includes>
<contentExtension pattern=orgdemonavigator*/>
<actionExtension pattern=orgdemonavigator*/>
</includes>
</viewerContentBinding>
</extension>
這段代碼表示所有名稱符合orgdemonavigator*的orgeclipseuinavigatornavigatorContent都可作為資源管理器的樹模型擴展
最後一個擴展點orgeclipseuinavigatornavigatorContent的配置則是CNF框架中最為復雜的一個點在例子中則只采用了最簡單的配置信息
<extension
point=orgeclipseuinavigatornavigatorContent>
<navigatorContent
contentProvider=orgeclipseuiinternalnavigatorresourcesworkbenchResourceExtensionContentProvider
id=orntent
labelProvider=orgeclipseuiinternalnavigatorresourcesworkbenchResourceExtensionLabelProvider
name=DemoNavigator>
<enablement>
<or>
<instanceofvalue=reresourcesIResource/>
<adapt type=reresourcesIProject/>
</or>
</enablement>
</navigatorContent>
</extension>
每一個orgeclipseuinavigatornavigatorContent擴展點都有相應的contentProvider和labelProvider屬性用來定制樹模型以及相應的顯示功能而enablement則表示在何種情況下才會調用激活這個指定的擴展功能enablement則采用了reexpression中定義的擴展點支持各種復雜的表達式方便開發人員定義各種條件
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28580.html