Zaawansowane techniki porównywania

W tej sekcji zawarto dodatkowe informacje na temat zaawansowanego interfejsu API w module dodatkowym porównywania.

Pisanie operacji porównywania

Operacja porównywania musi zostać zaimplementowana jako podklasa klasy CompareEditorInput.  Klasa CompareEditorInput uruchamia operację porównywania (potencjalnie długotrwałą) pod kontrolą monitora postępu, tworzy interfejs użytkownika do eksplorowania wyników porównania, śledzi wyniki zmienionego stanu w przypadkach scalania i zapisuje wszystkie zmiany, które wystąpiły podczas scalania.

Klasa CompareUI definiuje punkt wejścia umożliwiający zainicjowanie konfigurowalnej operacji porównywania wybranych zasobów. Wynik porównywania zostanie otwarty w edytorze porównawczym umożliwiającym przeglądanie i edytowanie szczegółów w dynamicznie wybieranych przeglądarkach struktury i treści.

Klasa NavigationAction służy do przechodzenia (krokowo) do kolejnych różnic wykrytych przez klasę CompareEditorInput.

Klasa CompareConfiguration konfiguruje różne aspekty interfejsu użytkownika przeglądarek porównywania/scalania, takie jak tytułowe etykiety i obrazy czy możliwość edycji strony przeglądarki scalania. Ustawienia są przekazywane do klasy CompareEditorInput w trakcie jej tworzenia.

W trakcie implementowania operacji porównywania hierarchicznego, jako podklasy klasy CompareEditorInput, klienci muszą dostarczyć drzewo obiektów, w którym każdy węzeł implementuje interfejs IStructureComparator. Ten interfejs jest używany przez mechanizm różnicowania hierarchicznego (Differencer) do przechodzenia między elementami drzewa.
Ponadto każdy liść drzewa musi implementować interfejs IStreamContentAccessor, aby umożliwić mechanizmowi różnicującemu dostęp do treści jego strumienia.

Klasa BufferedContent udostępnia domyślną implementację interfejsów IStreamContentAccessor i IContentChangeNotifier. Jej podklasa ResourceNode dodaje implementacje interfejsów IStructureComparator i ITypedElement na podstawie zasobów obszaru roboczego platformy (interfejs IResource). Może ona zostać użyta bez modyfikacji jako dane wejściowe mechanizmu różnicującego.

Funkcja porównywania poza edytorami porównawczymi

Aby użyć funkcji porównywania poza standardowym edytorem porównawczym (na przykład w oknie dialogowym lub kreatorze) moduł dodatkowy porównywania udostępnia dodatkowe klasy pomocnicze.

Klasa CompareViewerPane jest gotową do użycia klasą zawierającą etykietę oraz lokalny pasek narzędzi przeglądarki porównawczej (lub dowolnej podklasy przeglądarki JFace). Jej abstrakcyjna podklasa CompareViewerSwitchingPane obsługuje dynamiczne przełączanie przeglądarek, co oznacza, że przeglądarka instalowana w panelu jest dynamicznie określana na podstawie obiektu wejściowego.

Klasa EditionSelectionDialog jest prostym oknem dialogowym wyboru, w którym dany element wejściowy można porównać z listą jego wariantów historycznych (wersji). To okno dialogowe jest używane do implementowania takich funkcji, jak Zastąp elementem z historii lokalnej w zasobach obszaru roboczego.

Ponadto można określić podsekcję elementu wejściowego (tzn. metodę w pliku źródłowym Java) przy użyciu ścieżki. W takim przypadku okno dialogowe porównuje tylko podsekcję (określoną przez ścieżkę) z odpowiednią podsekcją na liście wersji. Ta funkcja może być używana do implementowania opcji Zastąp elementem z lokalnej historii dla elementów Java.

Klasa EditionSelectionDialog wymaga, aby wersje implementowały interfejsy IStreamContentAccessor i IModificationDate. Klasa HistoryItem jest gotową do użycia klasą, która implementuje te interfejsy dla obiektów IFileState.