无论在哪一个开发工具中资源管理器无疑都是使用最频繁的功能之一因此一个资源器好用与否在很大程度上就决定了一个开发工具的易用程度我们常用的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中定义的扩展点支持各种复杂的表达式方便开发人员定义各种条件 |