Geavanceerde vergelijkingsmethoden

In deze sectie vindt u aanvullende informatie over geavanceerde API's in de plugin voor het maken van vergelijkingen.

Vergelijkingsbewerkingen schrijven

Een vergelijkingsbewerking moet worden geïmplementeerd als een subklasse van CompareEditorInput.  Met CompareEditorInput wordt een (mogelijk tijdrovende) vergelijkingsbewerking uitgevoerd, die wordt beheerd door een voortgangsmonitor. Hierbij wordt een gebruikersinterface gemaakt waarmee op de vergelijkingsresultaten kan worden ingezoomd, de gewijzigde status van het resultaat wordt bijgehouden in geval van een samenvoeging, en eventuele tijdens de samenvoeging aangebrachte wijzigingen opgeslagen.

CompareUI definieert het ingangspunt om een configureerbare vergelijkingsbewerking te initiëren voor willekeurige resources. Het resultaat van de vergelijking wordt weergegeven in een vergelijkingseditor. De detailgegevens kunnen worden bekeken en bewerkt in dynamisch geselecteerde structuur- en contentviewers.

NavigationAction wordt gebruikt om (stapsgewijs) te navigeren door alle verschillen die zijn gevonden met CompareEditorInput.

Met CompareConfiguration configureert u verschillende gebruikersinterface-aspecten van vergelijkings-/samenvoegingsviewers, zoals labels en afbeeldingen van titels, en of een zijde van een samenvoegingsviewer bewerkbaar is. Deze gegevens worden bij aanmaak doorgegeven aan CompareEditorInput.

Wanneer een hiërarchische vergelijkingsbewerking wordt geïmplementeerd als subklasse van CompareEditorInput, moeten clients een structuur van objecten aanleveren waarbij op elk knooppunt de interface IStructureComparator is geïmplementeerd. Deze interface wordt gebruikt door de hiërarchische vergelijkingsengine (Differencer) om de structuur te doorlopen.
Daarnaast moet op elk eindpunt van de structuur de interface IStreamContentAccessor worden geïmplementeerd om de vergelijkingsengine toegang te geven tot de bijbehorende stroomcontent.

BufferedContent levert een standaardimplementatie aan voor de interfaces IStreamContentAccessor en IContentChangeNotifier. De bijbehorende subklasse ResourceNode voegt een implementatie toe voor de interfaces IStructureComparator en ITypedElement op basis van platformworkbenchresources (IResource). Deze kan zonder wijzigingen worden gebruikt als invoer voor de vergelijkingsengine.

Vergelijkingsfunctionaliteit buiten vergelijkingseditors

De vergelijkingsplugin biedt aanvullende hulpprogrammaklassen (helper) voor het geval u vergelijkingsfunctionaliteit wilt gebruiken buiten de standaardvergelijkingseditor om (bijvoorbeeld in een dialoogvenster of wizard).

CompareViewerPane is een handige klasse met een label en lokale werkbalk voor een vergelijkingsviewer (of een andere subklasse van een JFace-viewer). De abstracte subklasse hiervan, CompareViewerSwitchingPane, biedt ondersteuning voor dynamische overschakeling tussen viewers. Dat houdt in dat de viewer die in het deelvenster wordt geïnstalleerd, dynamisch wordt bepaald op basis van het vensterinvoerobject.

EditionSelectionDialog is een eenvoudig selectiedialoogvenster waarin een invoerelement kan worden vergeleken met historische varianten (edities) van het desbetreffende invoerelement. Dit dialoogvenster wordt gebruikt om functies als Vervangen door gt; Lokale historie te implementeren voor workbenchresources.

Daarnaast kunt u een subsectie van het invoerelement (bijvoorbeeld een methode in een Java-bronbestand) opgeven met behulp van een pad. In dat geval wordt door het dialoogvenster alleen de (middels het pad opgegeven) subsectie vergeleken met de corresponderende subsectie van het element in de lijst met edities. Deze functionaliteit wordt gebruikt om de functie Vervangen door gt; Element uit lokale historie te implementeren voor Java-elementen.

Voor het editie-selectiedialoogvenster (EditionSelectionDialog) moeten de edities een implementatie bevatten van de interfaces IStreamContentAccessor en IModificationDate. HistoryItem is een handige klasse die deze interfaces implementeert voor IFileState-objecten.