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。