> 文档中心 > Common Navigator Framework 实践(四)文件过滤

Common Navigator Framework 实践(四)文件过滤


目标

一般情况下,以 . 开头的文件或文件夹我们视为隐藏文件,然而现在导航工具栏中并没有隐藏,本节将实现如何隐藏这类文件,并指出如何隐藏其他特定的文件或文件夹。现导航中的文件如下:
Common Navigator Framework 实践(四)文件过滤

分析

过滤文件,第一感觉需要在CNF 的ContentProvider 中过滤,使得,这种方法可行。但是 Eclipse 为CNF设计了一个资源过滤扩展点 org.eclipse.ui.navigator.navigatorContent/commonFilter,定义好的commonFilterviewerContentBinding 中引用即可。

实现

先看看Eclipse对以.开头的文件或文件夹配置的CommonFilter

            <commonFilter     id="org.eclipse.ui.navigator.resources.filters.startsWithDot"     name="%filters.startsWithDot.name"     description="%filters.startsWithDot.description"     activeByDefault="true"     >  <filterExpression>  <and>     <adapt type="org.eclipse.core.resources.IResource">     <test property="org.eclipse.core.resources.name" value=".*"/>     </adapt> </and>  </filterExpression>      </commonFilter>

filterExpression解释,在Eclipse 中,文件与文件夹都实现了IResource 接口,因此它们都满足type="org.eclipse.core.resources.IResource",test的意思是,使用这些资源的属性(property)name来匹配,只要是满足正则表达式.*的及命中被过滤。

类似的可以定义一个过滤.txt的过滤器,其test表达式value值设为*.txt即可。

因为项目依赖了Eclipse的这些过滤器实现,因此可以直接使用。下面将它绑定到扩展点org.eclipse.ui.navigator.viewer下的标签viewerContentBinding中,修改后viewerContentBinding代码如下:

<viewerContentBinding viewerId="com.xzbd.views.MainNavigator">  <includes><contentExtension pattern="com.xzbd.epx.MainNavigatorContent" /><contentExtension pattern="org.eclipse.ui.navigator.resources.filters.startsWithDot" /></includes></viewerContentBinding>

运行结果

Common Navigator Framework 实践(四)文件过滤
需要注意的是,这种过滤器,在导航栏视图菜单中是可见的,并且可以手动修改配置是否过滤。菜单如下:
在这里插入图片描述
目的是实现了,但是却发现CNF提供的框架了默认有这个过滤 菜单,如何业务需要这种过滤那么刚好,但若业务不想要这种自带的视图菜单,那当如何去掉这些菜单呢?或者如何在导航视图中自定义自己的菜单?

该问题暂时保留,待到 Common Navigator Framework 实践(五)菜单及工具条定制

总结

文章分析并实现了CNF自定义导航过滤器,并提出了这种实现可能与业务需求不同的风险。

系列文章

CNF系列汇总
Common Navigator Framework 实践(一)自定义导航
Common Navigator Framework 实践(二)菜单扩展
Common Navigator Framework 实践(三)文件拖拽控制
Common Navigator Framework 实践(四)文件过滤
Common Navigator Framework 实践(五)菜单及工具条定制

资料

  • Common Navigator Framwork 参考资料

项目地址

  • epx

PDF转换