Structuurviewers implementeren

Met een structuursamenvoegingsviewer kunt u twee of drie invoerstromen met elkaar vergelijken, de resultaten weergeven in een hiėrarchische structuur en kiezen hoe de verschillende invoerstromen moeten worden samengevoegd.  Structuursamenvoegingsviewers worden vaak gebruikt voor resources in een werkgebied of de leden van een archiefbestand.

Boomstructuurviewers

Omdat de implementatie van veel structuurvergelijkingsviewers is gebaseerd op een soort boomstructuur, is de vergelijkingsplugin voorzien van een algemene viewer voor (boom)structuurverschillen: StructureDiffViewer. Uw plugin dient een structuurmaker (structure creator) te bevatten die een invoerobject omzet in een hiėrarchische structuur. Met de StructureDiffViewer kunt u een vergelijkingsbewerking op de structuur uitvoeren en de resultaten weergeven in een boomstructuur.

U wijst een structuurmaker voor uw plugin aan met de extensie org.eclipse.compare.structureCreators. Net als bij contentviewers kunt u de structuurmaker koppelen aan een verzameling bestandsextensies (extensions) of het element contentTypeBinding gebruiken om de structuurmaker te koppelen aan een bepaald contenttype. De markup wordt hier verder niet beschreven, omdat deze vrijwel gelijk is aan die van contentviewers. De JDT-plugin definieert verschillende aanleveringen voor org.eclipse.compare.structureCreators.

Overige hiėrarchische-structuurviewers

Het kan zijn dat u voor uw plugin behoefte heeft aan een andere (boom)structuurviewer dan StructureDiffViewer. Met het extensiepunt org.eclipse.compare.structureMergeViewers kunt u uw eigen implementatie voor een structuursamenvoegingsviewer definiėren. U kunt een structuursamenvoegingsviewer koppelen aan bestandsextensies (extensions) of het element contentTypeBinding gebruiken om de viewer te koppelen aan een bepaald contenttype. Zie de JDT-plugin voor voorbeelden van org.eclipse.compare.structureMergeViewers-aanleveringen.

De zoekplugin biedt verschillende utility-klassen om u te helpen bij het implementeren van een zoekviewer.

Differencer 

Differencer is een vergelijkingsengine voor hiėrarchisch gestructureerde gegevens. Hiermee kunnen twee of drie invoerstromen met elkaar worden vergeleken.

Als de invoerelementen voor de vergelijkingsengine de interface IStructureComparator implementeren, wordt de engine recursief toegepast op de onderliggende elementen van elk invoerelement. Eindpuntelementen moeten de interface IStreamContentAccessor implementeren zodat de vergelijkingsengine de inhoud bytesgewijs kan vergelijken.

In de platformimplementatie zijn verschillende voorbeelden van vergelijkingsengines opgenomen:

Standaard wordt het resultaat van de vergelijkingsbewerking door de engine geretourneerd als een boomstructuur met DiffNode-objecten .Een DiffNode-object bevat een beschrijving van de verschillen tussen twee of drie invoerelementen. Het soort resultaatknooppunten kan worden gewijzigd door een enkelvoudige methode van de engine te vervangen.

Verschillenviewers

Een boomstructuur van DiffNode-objecten kan worden weergegeven in een DiffTreeViewer. Voor de DiffTreeViewer moeten binnenknooppunten van de boomstructuur de interface IDiffContainer implementeren en moeten eindpunten de interface IDiffElement implementeren.

De standaardprocedure om hiėrarchisch gestructureerde gegevens te vergelijken en de verschillen weer te geven luidt als volgt:

  1. Definieer de invoergegevens in een structuur van objecten met implementaties van de interfaces IStructureComparator en IStreamContentAccessor.
  2. Voer de vergelijkingsbewerking uit met behulp van de Differencer.
  3. Laad de resultaten van de vergelijking in de DiffTreeViewer.

De StructureDiffViewer is een speciale DiffTreeViewer waarmee de voorgaande drie stappen automatisch worden uitgevoerd. Hierbij worden uit één invoerobject van het type ICompareInput de twee of drie invoerelementen opgehaald die met elkaar moeten worden vergeleken. Vervolgens wordt een structuurmaker (IStructureCreator) gebruikt om hieruit een structuur met IStructureComparator- en IStreamContentAccessor-objecten te extraheren. Vervolgens worden deze structuren met elkaar vergeleken door de vergelijkingsengine en worden de resultaten weergegeven in de structuurviewer.

De ZipFileStructureCreator is een implementatie van de IStructureCreator-interface waarmee de inhoud van een ZIP-archief beschikbaar wordt gemaakt als een hiėrarchische structuur van IStructureComparator-objecten die eenvoudig met elkaar kunnen worden vergeleken met behulp van de vergelijkingsengine (Differencer). Dit is een goed voorbeeld van hoe u gestructureerde bestanden beschikbaar kunt maken voor de hiėrarchische-vergelijkingsfunctionaliteit van de vergelijkingsplugin.