Przeglądarka scalania struktury wykonuje podwójne lub potrójne porównanie obiektów wejściowych, prezentuje wyniki w widoku hierarchicznym i pozwala użytkownikowi wykonywać scalenia między danymi wejściowymi. Przeglądarki scalania struktury są często używane w przypadku zasobów obszaru roboczego oraz elementów pliku archiwum.
Ponieważ implementacja wielu przeglądarek porównywania struktur opiera się na modelu drzewa, moduł dodatkowy porównywania oferuje ogólną klasę StructureDiffViewer opartą na strukturze drzewa. Moduł dodatkowy jest odpowiedzialny za dostarczenie kreatora struktury, który podzieli jeden obiekt wejściowy na strukturę hierarchiczną. Klasa StructureDiffViewer wykonuje porównania na wynikowej strukturze i wyświetla wyniki w postaci drzewa.
Kreator struktury dla modułu dodatkowego powinien zostać wyznaczony za pomocą punktu rozszerzenia org.eclipse.compare.structureCreators. Podobnie jak w przypadku przeglądarek treści, do kreatora struktur może zostać przypisany zestaw rozszerzeń nazw plików (extensions). Można także użyć elementu contentTypeBinding do przypisania typu treści do konkretnego kreatora struktury. Nie zostanie tu przedstawiony przykład kodu, gdyż byłby bardzo podobny do przedstawionego w przypadku przeglądarek treści. Moduł dodatkowy JDT definiuje wiele elementów za pomocą punktu rozszerzeń org.eclipse.compare.structureCreators.
W niektórych przypadkach klasa StructureDiffViewer oparta na strukturze drzewa może nie być odpowiednia dla danego modułu dodatkowego. Punkt rozszerzenia org.eclipse.compare.structureMergeViewers umożliwia definiowanie własnych implementacji przeglądarki scalania struktury. Do przeglądarki scalania struktury można przypisać rozszerzenia nazw plików (extensions). Można także użyć elementu contentTypeBinding do przypisania typu treści do konkretnej przeglądarki scalania struktury. W sekcji dotyczącej modułu dodatkowego JDT można zobaczyć przykłady elementów udostępnionych za pomocą punktu rozszerzenia org.eclipse.compare.structureMergeViewers.
Moduł dodatkowy wyszukiwania oferuje wiele klas narzędziowych pomocnych przy implementowaniu przeglądarki wyszukiwania.
Klasa Differencer jest mechanizmem różnicującym dla danych zorganizowanych hierarchicznie. Wykonuje on podwójne lub potrójne porównanie dwóch lub trzech obiektów wejściowych.
Jeśli elementy wejściowe mechanizmu różnicującego implementują interfejs IStructureComparator, mechanizm różnicujący zostanie rekurencyjnie zastosowany w ramach elementów potomnych. Elementy liści muszą implementować interfejs IStreamContentAccessor, aby mechanizm różnicujący mógł wykonać bajtowe porównanie ich treści.
W implementacji platformy ujętych zostało kilka dobrych przykładów mechanizmów różnicujących:
Domyślnie mechanizm różnicujący zwraca wyniki operacji porównania w postaci drzewa obiektów klasy DiffNode. Klasa DiffNode opisuje zmiany między dwoma lub trzema elementami wejściowymi. Typy węzłów wynikowych mogą zostać zmienione przez przesłonięcie pojedynczej metody mechanizmu.
Drzewo obiektów klasy DiffNode można wyświetlić w klasie DiffTreeViewer. Klasa DiffTreeViewer wymaga, aby wewnętrzne węzły drzewa implementowały interfejs IDiffContainer, a liście implementowały interfejs IDiffElement.
Aby porównać dane w strukturze hierarchicznej i wyświetlić różnice, należy wykonać następujące czynności:
Klasa StructureDiffViewer jest specjalną wersją klasy DiffTreeViewer, która automatyzuje trzy powyższe czynności. Z pojedynczego obiektu wejściowego typu ICompareInput uzyskuje dwa lub trzy elementy wejściowe do porównania. Używa interfejsu IStructureCreator do uzyskania z nich drzewa zawierającego obiekty implementujące interfejsy IStructureComparator i IStreamContentAccessor. Te trzy drzewa są porównywane przy użyciu mechanizmu różnicującego, a wynik jest wyświetlany w przeglądarce drzew.
Klasa ZipFileStructureCreator jest implementacją interfejsu IStructureCreator, która udostępnia treść archiwów zip jako strukturę hierarchiczną obiektów implementujących interfejs IStructureComparator, które mogą być łatwo porównywane przy użyciu mechanizmu różnicującego (Differencer). Jest to dobry przykład udostępnienia plików strukturalnych dla funkcji porównywania hierarchicznego modułu dodatkowego porównywania.