Common Navigator Framework 实践(四)文件过滤
目标
一般情况下,以 .
开头的文件或文件夹我们视为隐藏文件,然而现在导航工具栏中并没有隐藏,本节将实现如何隐藏这类文件,并指出如何隐藏其他特定的文件或文件夹。现导航中的文件如下:
分析
过滤文件,第一感觉需要在CNF 的ContentProvider 中过滤,使得,这种方法可行。但是 Eclipse 为CNF设计了一个资源过滤扩展点 org.eclipse.ui.navigator.navigatorContent/commonFilter
,定义好的commonFilter
在viewerContentBinding
中引用即可。
实现
先看看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>
运行结果
需要注意的是,这种过滤器,在导航栏视图菜单中是可见的,并且可以手动修改配置是否过滤。菜单如下:
目的是实现了,但是却发现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