- 浏览: 255557 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
aquarion:
非常感谢,解决了我的问题
Perspective 自定义设置扩展点 -
zheng_zhen:
好文章,进一步问您一下,请问自己实现的run/debug如何能 ...
【原创】Eclipse Launcher (Run/Debug As 菜单扩展)实现 -
salever:
mwdnjupt 写道http://www.xeclipse. ...
浅析OSGI的bundle依赖 -
mwdnjupt:
http://www.xeclipse.com/?p=1165 ...
浅析OSGI的bundle依赖 -
Tom.X:
插件化、模块化应遵循高内聚、低耦合的原则,尽量不要在各bund ...
浅析OSGI的bundle依赖
这篇文章是继《Eclipse RCP/Plugin 入门自学教程》专题21之“Common Navigator Framework初探”,后重新整理的CNF知识。
参考链接:http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/cnf.htm
1 CNF 简介
Common Navigator Framework ,简称 CNF 。 JFace 的 Viewer 使用内容器( Content Provider )处理它对应的模型,而 CNF 与此类似,使用了一个或者多个 Content Provider 来管理视图的模型,除了基本的 Content Provider 以外,它还提供了 Label Provider 、 Sorter 、 Filter ,这一系列的 API 可以方便用户进行基于 Eclipse 资源导航视图的扩展。
CNF 是由 org.eclipse.ui.navigator 实现的,它仅依赖于 org.eclipse.ui ,因此它即可以用于 plugin 开发中,也可以用在 RCP 开发中。
2 组成部分
下面讲一下 CNF 的主要组成部分:
- View Part :由 org.eclipse.ui.navigator.CommonNavigator 实现,这个就是 Eclipse 自带的 Navgator 的实现类了。
- Viewer :由 org.eclipse.ui.navigator.CommonViewer 实现,它的主要功能就是显示一个树形结构视图, CommonNavigator 就使用了 CommonViewer 来进行各种资源的显示。 Eclipse 允许用户扩展 CommonViewer ,当然用户也可以自己实现 Viewer 。
- Navigator Content Extensions :“ org.eclipse.ui.navigator.navigatorContent ”,导航内容器扩展点。这个是 CNF 的核心,通过它将资源模型与 Viewer 连接起来,它的功能与 JFace Viewer 的 Content Provider 类似,不过 CNF 已经将 Content Provider 封装为一个扩展点了,只需要实现这个扩展点就行,当然扩展点中会包含一个 content Provider 实现。
- Navigator Viewer :“ org.eclipse.ui.navigator.viewer ”,导航视图扩展点,与 Navigator Content Extensions 类似, CNF 也将 Viewer 进行了封装,使用中只需要实现这个扩展点就行了,当然扩展点中包含一个 Viewer Part 的实现。
- Resource Support :资源支持, CNF 还提供了许多资源操作,具体参考 org.eclipse.ui.navigator.resources 包下面的类。
2 主要功能
2.1 Navigator
Navigator 是 CNF 的直接表现形式,在 Eclipse IDE 中就有三个与 CNF 相关的 Navigator ,分别为:
- Project Explorer :默认的工程导航视图, org.eclipse.ui.navigator.resources.ProjectExplorer ,继承自 org.eclipse.ui.navigator.CommonNavigator ,为所有的 Eclipse 工程提供导航功能;
- Package Explorer : Java 工程导航视图,属于 JDT ( Java Development Toolkit ),该视图与 Project Explorer 在处理 Java 工程上几乎一模一样,一个很重要的原因就是 CNF 的适配性和扩展性,这里就不对 JDT 的 Package Explorer 的实现进行分析,有兴趣的可以去看看 http://www.ceclipse.org/read-cec-tid-27476.html ;
- Navigator :默认的导航视图,目前暂时由 org.eclipse.ui.views.navigator.ResourceNavigator 实现,不过该类已经废弃,不建议使用,它不是由 CNF 实现的,也不具备扩展性,新版本中将逐步用 “ org.eclipse.ui.navigator.CommonNavigator ”替代。
2.2 Navigator Content Extensions
如果想使用 CNF ,必须学会使用这个扩展点,它提供了 CNF 的视图需要的 Content Provider 和 Lable Provider ,以及可能的各种过滤、模型隐藏呢。
2.3 Common Filters
配置过滤器,具体效果可以看看 Project Explorer 的 Filters 。
2.4 Common Wizards
配置基于 CNF 的视图的右键新建向导,这对于自定义向导很有帮助。
2.5 Action Providers
配置基于 CNF 的视图的右键菜单,很多时候用户只需要调用一下 Eclipse 中已经实现的菜单显示即可,比如常见的复制、粘贴、剪切等。
2.6 Drag and Drop Support
提供一些拖拽操作。
2.7 Link with Editor Support
将当前选中的文件节点与对应的编辑器(可能的)关联起来,此功能的效果见 Project Explorer 的 Link with editor 。
3 示例
下面以一个示例,来讲解如何使用 CNF ,示例的结果为在自定义的视图中,给 properties 属性文件添加子节点,子节点为属性对。效果如下图:
3.1 新建 plugin 工程
新建工程“ org.salever.rcp.tech.cnf ”,选择 plugin 。
注:以下代码为在 eclipse 官网上的 navigator example 基础上修改而来的。
3.2 添加视图
打开 META-INF 下的 MANIFEST.MF 文件,转到 Extension Tab 页,添加 “ org.eclipse.ui.view ” 扩展点,具体为:
这里我们使用默认的 CommonNavigator 。
3.3 添加 Navigator Viewer
继续添加扩展点“ org.eclipse.ui.navigator.viewer ”,这个扩展点就比较重要的,用于配置 CNF 的 Viewer ,这里我们使用刚刚定义的“ org.salever.rcp.tech.cnf.navigator.view ”。
马上我们会继续修改这个扩展点。
3.4 添加 Navigator Content
添加扩展点“ org.eclipse.ui.navigator.navigatorContent ”,点击右键添加 navigatorContent ,具体为:
注意这里有几个需要说明的:
-
contentProvider :提供内容器的类,一般实现 ITreeContentProvider ,与 JFace 类似
-
labelProvider
:提供标签显示的类,一般继承自
LabelProvider
,与
JFace
类似
-
triggerPoints :比较重要的子元素,用于提供触发 content provider 的情况,这里为:
<triggerPoints> <or> <and> <instanceof value="org.eclipse.core.resources.IResource" /> <test forcePluginActivation="true" property="org.eclipse.core.resources.extension" value="properties" /> </and> <instanceof value="org.salever.rcp.tech.cnf.PropertiesTreeData" /> </or> </triggerPoints>
作用为:在资源为 IResource ,而且资源后缀名为 properties ,或者资源为 PropertiesTreeData 触发此 content provider 。 -
possibleChildren :子节点的配置,这里为:
<possibleChildren> <or> <instanceof value="org.salever.rcp.tech.cnf.PropertiesTreeData"/> </or> </possibleChildren>
作用为:仅显示类型为 PropertiesTreeData 的子节点。
3.5 添加 Common Filters
在刚刚添加的扩展点“ org.eclipse.ui.navigator.navigatorContent ”,点击右键添加 commonFilter ,这里添加一个过滤非 java 工程的过滤器:
3.6 plugin.xml
至此,我们已经配置了 Viewer 、 Navigator Content 、 Common Filter ,下面是完整的 plugin.xml :
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin> <!-- Phase 1 --> <!-- Declare the view part to hold the default implementation --> <extension point="org.eclipse.ui.views"> <category id="org.salever.rcp.tech.cnf.navigator.category" name="Common Navigator Examples"/> <view allowMultiple="false" category="org.salever.rcp.tech.cnf.navigator.category" class="org.eclipse.ui.navigator.CommonNavigator" icon="icons/filenav_nav.gif" id="org.salever.rcp.tech.cnf.navigator.view" name="Example View"/> </extension> <!-- Declare the viewer configuration, and the default content/action bindings --> <extension point="org.eclipse.ui.navigator.viewer"> <viewer viewerId="org.salever.rcp.tech.cnf.navigator.view.view"/> <viewerContentBinding viewerId="org.salever.rcp.tech.cnf.navigator.view"> <includes> <contentExtension pattern="org.eclipse.ui.navigator.resourceContent"/> <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/> <contentExtension pattern="org.eclipse.ui.examples.navigator.filters.*"/> <contentExtension pattern="org.salever.rcp.tech.cnf.navigator.propertiesContent"> </contentExtension> </includes> </viewerContentBinding> <viewerActionBinding viewerId="org.salever.rcp.tech.cnf.navigator.view"> <includes> <actionExtension pattern="org.eclipse.ui.navigator.resources.*"/> </includes> </viewerActionBinding> </extension> <!-- Declare a simple filter example that uses core expressions --> <!-- Phase 2 --> <!-- Declare a content extension that renders the contents of a properties file --> <extension point="org.eclipse.ui.navigator.navigatorContent"> <navigatorContent id="org.salever.rcp.tech.cnf.navigator.propertiesContent" name="Properties File Contents" contentProvider="org.salever.rcp.tech.cnf.PropertiesContentProvider" labelProvider="org.salever.rcp.tech.cnf.PropertiesLabelProvider" activeByDefault="true" icon="icons/prop_ps.gif" priority="normal" > <triggerPoints> <or> <and> <instanceof value="org.eclipse.core.resources.IResource"/> <test forcePluginActivation="true" property="org.eclipse.core.resources.extension" value="properties"/> </and> <instanceof value="org.salever.rcp.tech.cnf.PropertiesTreeData"/> </or> </triggerPoints> <possibleChildren> <or> <instanceof value="org.salever.rcp.tech.cnf.PropertiesTreeData"/> </or> </possibleChildren> </navigatorContent> <commonFilter id="org.eclipse.ui.examples.navigator.filters.hideNonJavaProjects" name="Hide non-Java Projects"> <filterExpression> <not> <adapt type="org.eclipse.core.resources.IProject"> <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature"> </test> </adapt> </not> </filterExpression> </commonFilter> </extension> <!-- Bind the Properties content extension to the viewer --> </plugin>
3.7 测试
右键运行“ Eclipse Application ”,在新打开的 IDE 中,打开视图“ Common Navigator Examples ”——“ Navigator Example ”:
新建一个一般工程“ TestProject ”,分别新建文件夹“ folder ”,文件“ test.txt ”“ test.properties ”,然后修改 test.properties 内容为:
key1=value1 key2=value2 key3=value3
点击左侧视图中,查看效果:
打开Customize View,查看filter配置:
勾选上Hide no-Java Projects,如果你刚刚新建的不是java 工程,确定以后,发现testProject不见了,被过滤掉了。
右键菜单与Project Explorer一致,因为我们在Navigator Example中引入了常见的action provider:
<viewerActionBinding viewerId="org.salever.rcp.tech.cnf.navigator.view">
<includes>
<actionExtension pattern="org.eclipse.ui.navigator.resources.*"/>
</includes>
</viewerActionBinding>
最后可能有人要问,为什么会自己的视图中也会出现工程、文件夹和文件树形结构,很简单,因为我们引入了“org.eclipse.ui.navigator.resourceContent”,这个Eclipse提供的IResource Navigator Content 。
<viewerContentBinding viewerId="org.salever.rcp.tech.cnf.navigator.view">
<includes>
<contentExtension pattern="org.eclipse.ui.navigator.resourceContent"/>
<contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
<contentExtension pattern="org.eclipse.ui.examples.navigator.filters.*"/>
<contentExtension
pattern="org.salever.rcp.tech.cnf.navigator.propertiesContent">
</contentExtension>
</includes>
</viewerContentBinding>
- org.salever.rcp.tech.zip (1.6 MB)
- 下载次数: 338
评论
看看这个http://salever.iteye.com/blog/1285699
发表评论
-
基于Spring/Hibernate/Hessian的RCP客户端系统框架
2012-08-14 11:23 2707本文同步发表在 http://www.xeclips ... -
【资料整理】中国Eclipse社区开发资料整理
2012-05-13 21:53 4328前言 中国Eclipse社区(www.ceclipse ... -
【Eclipse plug-in】 org.eclipse.ui.activities 的使用
2011-11-30 15:20 2801整理一下org.eclipse.ui.activities的使 ... -
Eclipse plugin中获取工程的几种办法
2011-10-10 15:56 2814在Eclipse开发中,涉及到Resource的时候,经常会需 ... -
【SDK or Binary】Eclipse 开发版本选择
2011-08-19 14:11 5713前言:老手直接忽略。打开Eclipse的download页面, ... -
Eclipse Spring Application Context XML 小工具
2011-08-18 15:35 2219概述 Spring 开发经常需要配置bean clas ... -
OSGI MANIFEST.MF Header 小结
2011-07-26 10:43 28211 MANIFEST 文件 Bun ... -
【Eclipse所有示例】Eclipse CVS 平台源码
2011-04-21 10:06 1864总有TX上论坛要各种源码,首先并不提倡这种做法,这与间接的 ... -
中文版的Eclipse 帮助文档
2011-04-14 13:43 3545偶然在IBM的一个帮助网站上发现了部分Eclipse的部分的中 ... -
深入 Common Navigator Framework 完整版下载
2011-04-11 15:19 2591写完整个Common Navigator Framework之 ... -
深入 Common Navigator Framework 之 Link with Editor Support
2011-04-11 15:15 20038.1 概述 这个功能简单的说,就是将选中的节点与对应的编辑 ... -
深入 Common Navigator Framework 之 Drag and Drop Support
2011-04-11 15:11 22727.1 概述 顾名思义,Drag and Drop Supp ... -
深入 Common Navigator Framework 之 Action Providers
2011-04-11 15:05 22856.1 概述 有了工程的树形结构显示,自然就要考虑到菜单的配 ... -
深入 Common Navigator Framework 之 Common Wizards
2011-04-11 15:00 18065.1 概述 Common Wizard用于定制Naviga ... -
深入 Common Navigator Framework 之 Common Filters
2011-04-11 14:56 20294.1 概述 Common Filter负责进行节点过滤,类 ... -
深入 Common Navigator Framework 之 navigatorContent
2011-04-07 14:31 24873.1 概述 Eclipse为了方便 ... -
深入 Common Navigator Framework 之 Navigator
2011-04-07 14:18 31242.1 概述 Navigator 是CNF中用来显示资源结构 ... -
深入 Common Navigator Framework 之概述
2011-04-07 14:07 28691.1 概述 CNF,全称Common Navigato ... -
利用Eclipse SDK 学习 Extension Point
2011-03-07 11:27 4193很多Eclipser在开发RCP时候,会遇到Extension ... -
Eclipse Property Testers (Test expression) 的使用
2011-03-07 10:55 4677Eclipse Resource Plugin里面很多值得一看 ...
相关推荐
`CommonNavigator`类是实现此功能的基础,开发者可以通过扩展这个类并重写相关方法来自定义视图行为。 3. **AdapterFactories**:CNF使用适配器工厂(AdapterFactory)将模型对象转换为可以被视图渲染的结构。...
Common Navigator Framework(CNF)是Eclipse平台中的一个重要组件,主要负责提供一种统一的方式来展示和操作项目的导航结构。这个框架允许开发者创建自定义的导航视图,以适应各种不同的项目类型和开发环境。以下是...
《Salever Common Navigator Framework 分析》 Salever Common Navigator Framework(CNF)是基于Eclipse平台的一个可扩展的导航框架,它为开发人员提供了一种高效的方式来构建和展示复杂的、层次化的数据结构。CNF...
### Common Navigator Framework (CNF) 分析 #### 1. 概述 Common Navigator Framework (CNF) 是一种用于帮助用户开发基于 Eclipse 的内容导航视图的框架。它允许开发者快速地将特定的资源和模型无缝集成到 ...
Common Navigator Framework (CNF) 是Eclipse中用于构建可扩展、可定制的资源导航视图的API。它提供了基本的结构,如树状视图,以及处理模型、适配器、过滤器、排序等功能。开发者可以通过实现一系列接口和扩展点,...
在Eclipse RCP中,Common Navigator Framework (CNF) 是一个关键组件,它提供了一种灵活的方式来展示资源树结构,类似于Eclipse IDE中的“Package Explorer”或“Project Explorer”。"Eclipse RCP Common Navigator...
在IT行业中,CommonNavigator是一个非常重要的概念,尤其是在Android应用开发领域。它是一种设计模式,用于构建通用的导航视图,帮助开发者实现具有统一导航结构的应用界面。标题"CommonNavigator"和描述...
【使用CommonNavigator开发资源管理器】的文档主要介绍了如何利用Eclipse的Common Navigator Framework (CNF) 插件来创建自定义的资源管理器。Common Navigator Framework是Eclipse平台的一部分,它提供了一套完整的...
【Eclipse插件开发之Common Navigator View】是关于在Eclipse插件开发中创建和定制一个基于Common Navigator View(CNV)的视图的过程。Common Navigator View是一种通用的视图结构,通常用于显示项目的资源层次结构...
在本文档中,我们将深入探讨如何构建一个基于Eclipse平台的通用导航框架(Common Navigator Framework, CNF)查看器。这不仅适用于Eclipse平台的新手开发者,也适合希望深入了解CNF工作原理及其实现细节的高级用户。...
21. **专题六**:COMMON NAVIGATOR FRAMEWORK初探 - 对Eclipse通用导航框架的基本介绍。 通过本教程,开发者可以逐步掌握Eclipse RCP的各个关键概念和技术,从而能够开发出自己的富客户端应用程序。每个章节都包含...
《中国Eclipse社区开发资料整理》是一份针对Eclipse开发工具的重要资源集合,主要涵盖了如何构建通用导航框架(Common Navigator Framework)的详细教程。在Eclipse这个强大的集成开发环境中,Common Navigator ...
在Eclipse插件开发中,`CommonNavigator`框架是一个用于构建自定义资源管理器的关键组件。这个框架允许开发者创建和扩展资源视图,比如Eclipse的项目管理器。本篇文章将详细讲解如何利用`CommonNavigator`开发资源...
本篇文章将继续深入探讨如何构建一个通用导航框架(Common Navigator Framework,简称CNF)查看器,并着重介绍如何向该查看器添加内容扩展。通过本教程的学习,您将能够掌握在CNF查看器中展示特定文件类型数据的方法...
在前一篇文章中,我们探讨了如何为一个通用导航器(Common Navigator)实例配置弹出菜单。我们了解到,通用导航器可以通过 `org.eclipse.ui.navigator.viewer` 扩展点声明所有菜单插入点,并且可以指定是否应尊重对 ...
2. **通过`org.eclipse.ui.navigator.navigatorContent`作为动作提供者贡献操作**:有时客户需要更程序化的控制,具体包括哪些操作贡献到特定上下文下的某个菜单,以及根据当前选择配置了哪些可重定向操作。...
在本"Common Navigator demo"中,我们将深入探讨如何利用Eclipse RCP创建一个基于Common Navigator的简单应用,并了解如何扩展这一基础功能。 首先,Common Navigator是Eclipse RCP中用于显示项目、文件和其他资源...
1. 安装Windows功能:勾选上IIS可承载的WEB核心,Internet信息服务,.NET Framework 3.5,windows process AcTIvation Service选项。 2. 打开一个现有的WinCC工程。 3. 进行“web组态器”设置:定义一个标准Web站点...