В этом разделе приведена дополнительная информация о расширенном API, входящем в состав модуля сравнения.
Операция сравнения должна быть реализована в качестве производного класса CompareEditorInput. Класс CompareEditorInput выполняет операцию сравнения (потенциально достаточно длительную) под управлением монитора состояния, создает пользовательский интерфейс для обработки результатов сравнения, отслеживает измененное состояние результата в случае объединения, а также сохраняет изменения, внесенные в процессе объединения.
Класс CompareUI определяет точку входа, применяемую для инициации настраиваемой операции сравнения произвольных ресурсов. Результаты сравнения отображаются в редакторе сравнения, позволяющем просмотреть подробности, а также внести в них изменения с помощью программ просмотра структуры или содержимого, которые выбираются динамически.
Класс NavigationAction применяется для последовательного просмотра отдельных различий CompareEditorInput.
Класс CompareConfiguration позволяет настроить различные параметры пользовательского интерфейса программ просмотра сравнения/объединения. Например, свойства меток заголовков и изображений, а также доступна ли программа просмотра объединения для изменения. При создании он передается в CompareEditorInput.
При реализации операции сравнения иерархической структуры в качестве производного класса
CompareEditorInput
клиенты должны предоставить дерево объектов, каждый из узлов которого реализует
интерфейс IStructureComparator.
Этот интерфейс применяется службой поиска различий в иерархической структуре
(Differencer) для обработки отдельных узлов дерева.
Кроме того, каждый концевой узел дерева должен реализовывать интерфейс
IStreamContentAccessor,
предоставляющий службе поиска различий доступ к содержимому его потока.
Класс BufferedContent обеспечивает реализацию интерфейсов IStreamContentAccessor и IContentChangeNotifier по умолчанию. Его производный класс ResourceNode добавляет реализацию интерфейсов IStructureComparator и ITypedElement в соответствии с ресурсами рабочей среды платформы (IResource). Его можно указать в качестве ввода службы поиска различий без дополнительных изменений.
Если функции сравнения требуется применить вне стандартного редактора сравнения (например, в окне диалога или мастере), воспользуйтесь дополнительными вспомогательными классами, предусмотренными в модуле сравнения.
CompareViewerPane - это стандартный класс, предоставляющий метку и локальную панель инструментов для программы просмотра сравнения (либо одного из производных классов программы просмотра JFace). Его абстрактный производный класс CompareViewerSwitchingPane поддерживает динамический выбор программы просмотра, т.е. программа просмотра, установленная на панели, динамически определяется в соответствии с входным объектом панели.
EditionSelectionDialog - это простое окно диалога выбора, позволяющее сравнить один входной элемент со списком вариантов этого элемента (изданий) из хронологии. Оно применяется для реализации таких функций работы с ресурсами рабочей среды, как "Заменить локальной хронологией".
Кроме того, с помощью пути можно указать подраздел входного элемента (например, отдельный метод из файла исходного текста Java). В этом случае окно диалога сравнивает только подраздел, заданный с помощью пути, с соответствующими подразделами изданий. Такой подход позволяет реализовать для элементов Java функцию "Заменить элементом из локальной хронологии".
Класс EditionSelectionDialog требует, чтобы в изданиях были реализованы интерфейсы IStreamContentAccessor и IModificationDate. Для объектов IFileState эти интерфейсы реализованы с помощью стандартного класса HistoryItem.