自定义Eclipse的搜索(org.eclipse.search.)

关于Eclipse提供了很完善的搜索功能:

上面的ICD Search为自定义。

下面通过代码实践,完成自定义搜索的实现,其实对于搜索,也是通过插入点的机制来实现的。原Eclipse中的搜索也是一个插件:

下载点我

1.加入插入点searchpage,即对应search对话框中的一个tab页。
<extension point="org.eclipse.search.searchPages"> 
    <page 
        id="cn.edu.nuaa.icdt.dialog.ICDSearchPage"
  label="ICD Search"
     icon="icons/icdt/nls_search_obj.gif"
     sizeHint="250,160"
     tabPosition="1"  //指定自定义搜索tab的位置
     extensions="*:1"
     showScopeSection="true"        
     canSearchEnclosingProjects="true"
     class=" cn.edu.nuaa.icdt.dialog.ICDSearchPage"> 
  </page> 
 </extension>

class ICDSearchPage extends org.eclipse.jface.dialogs. DialogPage  implements org.eclipse.search.ui. ISearchPage
在此类中有几个注意点
    1)在createControl中要利用 setControl(parent);使得getControl能够获得对象。
    2)performAction,是执行search查询指令。
    3)通过NewSearchUI.activateSearchResultView();激活结果view。
    4)通过NewSearchUI.runQueryInBackground(getSearchQuery());传入的query可以将本对话框中的一些属性信息传入。
2.由搜索tab传入的ISearchQuery,通过run方法即可以执行查询数据的操作。需要注意的是对于query,定义了一个ISearchResult,查询的数据都要装进这个ISearchResult。同时对于查询得到的数据必须封装成Match。
3.一旦传入的ISearchQuery的ISearchReult有动作,也就是查询到了数据,应该是要触发操作,更新数据域的。由于对于这个ISearchReult在配置中是有指定的。因为查询数据,是启用一个新的线程进行数据搜索的。
4.设计搜索结果页面
<extension 
     id="ICDSearchResultPage"
     point="org.eclipse.search.searchResultViewPages"> 
    <viewPage 
     id="cn.edu.nuaa.icdt.search.ICDSearchResultPage"
  searchResultClass="cn.edu.nuaa.icdt.search.ESearchResult"//指定result
     helpContextId="org.eclipse.search.file_search_result_page"
     class="cn.edu.nuaa.icdt.search.ICDSearchResultPage"> //指定结果显示页面
  </viewPage> 
 </extension> 

注意上面的类class ICDSearchResultPage extends  Page implements  ISearchResultPage
对于ISearchResultPage,通常不直接从此类继承,而是从AbstractTextSearchVewPage类继承。对于AbstractTextSearchVewPage来说,继承后有如下几个函数可能重写:
protected void configureTreeViewer(TreeViewer viewer) 配置我们风格的TreeViewer
protected void configureTableViewer(TableViewer viewer) 配置我们风格的TableViewer
protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate) 重载此方法, 实现自己的匹配项的定位.  

有一个重要的注意是,在接口的getControl方法返回的控件。查看源码。




注意:
    1由于对于query搜索是一条一条记录搜索出来的,则需要不停的触发更新input操作。(存在问题)
    2当然也可以在query时,不利用新的搜索线程,而只是一下子全部搜索出来,返回给界面展示。(易实现)


上面参考网站中设计,通过对比成品项目:
下载点我
后利用Abstract相关的类,重新设计相关操作,则避免了自定义相关监听器,或触发器。最终成功完成。

public class ICDTSearchContentProvider implements IStructuredContentProvider,
IFileSearchContentProvider 
public class ICDTSearchLabelProvider implements ITableLabelProvider
public class ESearchResult extends AbstractTextSearchResult
public class ICDSearchResultPage extends AbstractTextSearchViewPage

具体查看源代码注释:
对于addMatch之后触发操作,会通过result和结果页的视图(通过配置Plugin),查找到elementChange,最终找到contentProvider,从而更新tableView.

效果展示:



原创Eclipse插件: 高级搜索功能 - com.realzyc.search.jar Eclipse Plugin 插件 java 全局 搜索 + 特性: 相比与原有eclipse仅支持的在当前文档的搜索功能, 本插件支持了如下的搜索范围: - 当前文档 原有 查找/替换 已支持 - 当前选中 原有 查找/替换 已支持 - 所有打开的文档 原有 查找/替换 不支持 - 当前项目 原有 查找/替换 不支持 - 所有打开的项目 原有 查找/替换 不支持 - 整个工作空间 原有 查找/替换 不支持 仅以在“整个工作空间”搜索为例, 插件提供在整个工作空间(workspace)中的全部文档的搜索.即使项目在关闭状态, 也可以获得搜索结果. + 特性: 本搜索插件提供了“搜索全部”功能, 并将结果全部在列表中显示.用户可以全局通观搜索结果, 并任意的导航的希望的结果.(而不是像原有的功能一样逐一的导航到结果). + 其他: 插件还提供: 字体支持, 中英语言界面切换, 搜索摘要显示等特性. + 本发布包中含有的文件: com.realzyc.search_1.3.5.jar 插件最小执行文档, 不含源文件/javadoc com.realzyc.search.introduction.en.pdf 插件介绍文档, 英文 com.realzyc.search.introduction.cn.pdf 插件介绍文档, 中文 readme.txt 插件介绍摘要 + 声明: 本插件由RealZYC独立开发, 仅用于个人使用. 如果有爱好这方面插件的同志们, 请回复或发邮件联系, 也欢迎大家加入编程Q群(78728985)互相切磋 欢迎大家下载评论.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值