高级比较技巧

本节提供关于比较插件中的高级 API 的附加信息。

编写比较操作

比较操作必须作为 CompareEditorInput 的子类实现。CompareEditorInput 在进度监视器控制之下运行比较操作(可能非常冗长)、创建用于向下浏览至比较结果的用户界面、跟踪结果的脏状态(对于合并)并保存合并期间所发生的任何更改。

CompareUI 定义用来对任意资源启动可配置比较操作的入口点。比较结果在比较编辑器中打开,在该编辑器中,可使用动态选择的结构和内容查看器来浏览和编辑详细信息。

NavigationAction 用来浏览(步进)CompareEditorInput 的各个差别。

CompareConfiguration 配置比较/合并查看器的各种用户界面方面,如标题标签和图像,或者合并查看器的某一方是否可编辑。在创建时,将把它传送至 CompareEditorInput

在将分层比较操作作为 CompareEditorInput 的子类实现时,客户机必须提供对象树,其中每个节点实现接口 IStructureComparator。此接口由分层区分引擎 (Differencer)用来浏览树。
此外,树的每一叶必须实现 IStreamContentAccessor 接口才能给予区分引擎对其流内容的访问权。

BufferedContent 提供 IStreamContentAccessorIContentChangeNotifier 接口的缺省实现。它的子类 ResourceNode 根据平台工作台资源(IResource)添加 IStructureComparatorITypedElement 接口的实现。可以将其不加修改地用作区分引擎的输入。

比较编辑器外部的比较功能

如果想要在标准比较编辑器外部(例如,在对话框或向导中)使用比较功能,比较插件提供了附加 helper 类。

CompareViewerPane 是一个很有用的类,它为比较查看器(或 JFace 查看器的任何其它子类)提供标签和本地工具栏。它的抽象子类 CompareViewerSwitchingPane 支持动态查看器切换,即安装在窗格内的查看器由窗格的输入对象动态确定。

EditionSelectionDialog 是一个简单的选择对话框,可在其中将一个输入元素与同一输入元素的历史变体(版本)的列表进行比较。该对话框用来对工作台资源实现功能(如替换为本地历史”)。

另外,有可能通过路径来指定输入元素的子节(例如,Java 源文件中的方法)。在此情况下,对话框只将该子节(由路径指定)与版本列表中的对应子节作比较。此功能可用来为 Java 元素实现替换为本地历史中的元素”

EditionSelectionDialog 要求版本实现 IStreamContentAccessorIModificationDate 接口。 HistoryItem 是一个很有用的类,它为 IFileState 对象实现这些接口。