Et visningsprogram for struktursammenslåing utfører en to- eller treveis sammenlikning av inndataene, viser resultatet i en hierarkisk oversikt og lar brukeren slå sammen de ulike inndataene. Slike visningsprogrammer brukes vanligvis for arbeidsområderessurser eller for medlemmer i en arkivfil.
Siden implementeringen av en rekke visningsprogrammer for struktursammenlikninger er trebasert, inneholder plugin-modulen for sammenlikning en generell trebasert StructureDiffViewer. Plugin-modulen sørger for en strukturoppretter som deler ett enkelt inndataobjekt inn i en hierarkisk struktur. StructureDiffViewer utfører sammenlikningen i strukturen som opprettes, og viser resultatet som et tre.
Angi en strukturoppretter for plugin-modulen ved hjelp av utvidelsen org.eclipse.compare.structureCreators. På samme måte som med innholdsvisningsprogrammer, kan du oppgi et sett med filtyper for en strukturoppretter eller oppgi en contentTypeBinding for å knytte en innholdstype til en bestemt strukturoppretter. Vi viser ikke kodetypen her siden den er svært lik kodetypen for innholdsvisningsprogrammer. JDT-plugin-modulen definerer flere bidrag til innhold for org.eclipse.compare.structureCreators.
Det er ikke alltid at en trebasert StructureDiffViewer er hensiktsmessig for plugin-modulen din. Via utvidelsespunktet org.eclipse.compare.structureMergeViewers kan du definere din egen implementering for et visningsprogram for struktursammenslåing. Du kan oppgi et slikt visningsprogram for filtyper eller bruke en contentTypeBinding til å knytte en innholdstype til et bestemt visningsprogram for struktursammenslåing. Du finner eksempler på org.eclipse.compare.structureMergeViewers-innhold, i JDT-plugin-modulen.
Plugin-modulen for søking inneholder flere funksjonsklasser som hjelper deg med å implementere et visningsprogram for søking.
Sammenlikneren utfører sammenlikninger av data i hierarkiske strukturer. Det kan ha to eller tre inndataelementer og utføre en to- eller tresidig sammenlikning.
Hvis inndataelementene i sammenlikningen implementerer grensesnittet IStructureComparator, behandler programmet inndataelementets underordnede elementer rekursivt. Bladelementer må implementere grensesnittet IStreamContentAccessor slik at sammenlikneren (differencer) kan sammenlikne innholdet i byte.
Det finnes flere gode eksempler på sammenliknere som er inkludert i plattformimplementeringen:
Standard er at sammenlikningsmotorer returnerer resultatet av sammenlikningen som et tre med DiffNode-objekter. DiffNode beskriver endringene mellom to eller tre inndataelementer. Resultatnodetypene kan endres ved å overstyre en enkelt metode i programmet.
Du kan vise et tre med DiffNode i DiffTreeViewer. DiffTreeViewer krever at de innerste nodene i treet implementerer grensesnittet IDiffContainer, og at løv implementerer grensesnittet IDiffElement.
Slik sammenlikner du data i hierarkiske strukturer og viser forskjellene mellom dem:
StructureDiffViewer er en spesialisert DiffTreeViewer som automatiserer de tre trinnene ovenfor. Her brukes ett enkelt inndataobjekt av typen ICompareInput og herfra hentes de to eller tre inndataelementene som skal sammenliknes. Det blir brukt en IStructureCreator til å trekke ut et tre som inneholder IStructureComparator- og IStreamContentAccessor-objekter. Trærne blir så sammenliknet ved hjelp av sammenlikningsmotoren, og resultatet vises i visningsprogrammet for treet.
ZipFileStructureCreator er en implementering av grensesnittet IStructureCreator og gjør innholdet i et zip-arkiv tilgjengelig som en hierarkisk struktur for IStructureComparator, som enkelt kan sammenliknes av sammenlikningsmotoren (Differencer). Det er et godt eksempel på hvordan ustrukturerte filer gjøres tilgjengelig for plugin-modulens funksjonalitet for hierarkisk sammenlikning.