Implementér strukturfremvisning

En fremviser til sammenflettede strukturer udfører en tovejs- eller trevejssammenligning af sit input, præsenterer resultatet i en hierarkisk oversigt og lader brugeren sammenflette disse input.   Fremvisere til sammenflettede strukturer er fælles for arbejdområderessourcer og medlemmer af en arkivfil.

Fremvisere til trælignende strukturer

Da implementeringen af mange fremvisere til sammenligning af strukturer er baseret på en træstruktur, indeholder plugin-sammenligningsfunktionen en generisk træbaseret StructureDiffViewer. Din plugin er ansvarlig for at levere en strukturopretter, der opdeler et enkelt inputobjekt i en hierarkisk struktur. StructureDiffViewer udfører sammenligningen af den endelige struktur og viser resultatet i en træstruktur.

Du definerer en strukturopretter til din plugin vha. udvidelsenorg.eclipse.compare.structureCreators. Meget i lighed med indholdsfremvisere kan der angives en strukturopretter for et sæt filtyper, eller også kan der bruges en a contentTypeBinding til at knytte en indholdstype sammen med en bestemt strukturopretter. Vi ser ikke på kodningen her, da den minder så meget om indholdsfremvisernes kodning. En JDT-plugin definerer forskellige bidrag til org.eclipse.compare.structureCreators.

Andre hierarkiske strukturfremvisere

I nogle tilfælde kan den træstrukturbaseredeStructureDiffViewer være irrelevant for din plugin.  Udvidelsespunktetorg.eclipse.compare.structureMergeViewers gør det muligt for dig at definere din egen implementering af en fremviser til sammenflettede strukturer. Der kan angives en fremviser til sammenflettede strukturer for filtyper, eller også kan der bruges en contentTypeBinding til at knytte en indholdstype sammen med en fremviser til sammenflettede strukturer. JDT-plugin-funktionen indeholder eksempler på org.eclipse.compare.structureMergeViewers-bidrag.

Plugin-søgefunktionen stiller forskellige funktionsklasser til rådighed, som kan hjælpe dig med at implementere en fremviser til søgninger.

Differentieringsfunktion 

En differentieringsfunktion bruges til hierarkisk strukturerede data. Funktionen tager to eller tre input og udfører en tovejs- eller trevejssammenligning af dem.

Hvis inputelementerne til differentieringsfunktionen implementerer grænsefladen IStructureComparator, anvender funktionen sig selv rekursivt på de underordnede elementer til inputelementet. Bladelementer skal implementere grænsefladen IStreamContentAccessor, så differentieringsfunktionen kan udføre en byte-baseret sammenligning af deres indhold.

Der findes forskellige gode eksempler på differentieringsfunktioner, som er inkluderet i platformsimplementeringen:

Som standard returnerer differentieringsfunktionen resultatet af sammenligningsfunktionen som en træstruktur i DiffNode-objekter.  DiffNode beskriver ændringerne mellem to eller tre input.  Resultatnoders type kan ændres, ved at du tilsidesætter en enkelt metode i funktionen.

Fremvisere til forskelle

En træstruktur af DiffNode-forekomster kan vises i en DiffTreeViewer. DiffTreeViewer kræver, at interne noder i træstrukturen implementerer grænsefladenIDiffContainer, og at bladene implementerer grænsefladen IDiffElement.

Følgende fremgangsmåde bruges typisk til sammenligning af hierarkisk strukturerede data og fremvisning af forskellene:

  1. Tilknyt inputdata vha. mapping til en træstruktur af objekter, som implementerer grænsefladerne IStructureComparator og IStreamContentAccessor.
  2. Udfør sammenligningsfunktionen ved hjælp af Differentieringsfunktionen
  3. Send resultatet med forskellene til DiffTreeViewer

StructureDiffViewer er en specialiseret DiffTreeViewer, som automatiserer de ovenfor nævnte trin. Funktionen tager et enkelt inputobjekt af typen ICompareInput og henter de to eller tre inputelementer, som skal sammenlignes, fra objektet.  Funktionen bruger IStructureCreator til at udtrække en træstruktur, som indeholder objekterne IStructureComparator og IStreamContentAccessor. Disse træstrukturer sammenlignes herefter med differentieringsfunktionen, og resultatet vises i træstrukturfremviseren.

ZipFileStructureCreator er en implementering af grænseflade IStructureCreator og stiller indholdet af et ZIP-arkiv til rådighed som en hierarkisk struktur af IStructureComparator-forekomster, som nemt kan sammenlignes af Differentieringsfunktionen). Det er et godt eksempel på, hvordan du kan gøre strukturerede filer tilgængelige for den hierarkiske sammenligningsfunktionalitet i plugin-sammenligningsfunktionen.