Editor 和 View 是 Eclipse 中用於展示和管理資源的兩種 UI 元素。Editor 提供了一套方便的機制協助使用者實現對資源的修改及儲存。但對於 View,它在很大程度上提供是對資源的樹形展示,那如何將對資源的修改在 View 上反映出來,並通過對 View 的操作來儲存 View 中的資源呢? Common Navigator Framework(CNF)提供了不同於 Editor 的資源儲存機制 (Saveable Protocol) 來協助使用者完成對 View 中資源的儲存。
CNF 的介紹
Common Navigator Framework (CNF) 是一套協助使用者開發基於 eclipse 的內容導航視圖的架構,通過這套架構開發人員可以迅速地將特定的資源與模型無縫地整合到 eclipse 中,並利用其提供的的 API 以樹型的結構展示出來。CNF 最初來源於 Rational® Application Developer (RAD) v6.0 項目,並使用於 Eclipse 3.2。
接下來,簡要地介紹如何使用 CNF 為已存在的模型構造資源導航視圖。首先,利用 org.eclipse.ui.navigator 擴充點指定資源導航器所使用的 View,通過 CNF 架構,使用者不必自已重新實現一個新的 View,只需將擴充點的 View 實作類別指明為 org.eclipse.ui.navigator.CommonNavigator,如下圖所示。
圖 1. org.eclipse.ui.navigator.CommonNavigator 擴充點
接著,通過 org.eclipse.ui.navigator.navigatorContent 指明將要在 View 中展現的內容,包括 actionProvider,commonFilter, commonWizard, navigatorContent. 其中,在 navigatorContent 中,使用者可以定義 ContentProvider 和 LabelProvider,來展示資源導航器中的不同結點,並通過指定觸發條件來控制內容的展現時機。如下圖所示,當定義的 triggerPoints 運算式為真時,provider 的 getElements() 和 getChildren() 的方法將會被調用。
圖 2. triggerPoints 屬性
然後,通過 org.eclipse.ui.navigator.viewer 擴充點,將要展現的內容綁定到 view 上,使用者不再需要通過硬編程(hard-code)的方式將 ContentProvider 和 LabelProvider 註冊到特定的 View 上。在 org.eclipse.ui.navigator.viewer 擴充點上,我們需要指定 viewerContentBinding 來設定導航器中內容的可見度,其中 includes 語句表明該內容在 view 上為可見,pattern 為預先定義好的展示內容的 id。