Struktúramegjelenítő megvalósítása

A struktúraösszefésülés-megjelenítő két vagy három lépésben összehasonlítja a bemeneteket, az eredményt hierarchikus nézetben jeleníti meg, és lehetővé teszi, hogy a felhasználó összefésüléseket végezzen a bemenetek között.   A struktúraösszefésülés-megjelenítők közösek a munkaterület-erőforrásokhoz és az archív fájl tagjai számára.

Faszerű struktúra

Mivel számos struktúraösszehasonlítás-megjelenítő megvalósítása fára épül, az összehasonlítás-bedolgozó egy általános fa alapú StructureDiffViewer elemet biztosít. A bedolgozó a struktúralétrehozó biztosításáért felelős, amely a bemeneti objektumot hierarchikus struktúrára bontja. A StructureDiffViewer végrehajtja az összehasonlítást az eredményül kapott struktúrán és az eredményt faként jelenítik meg.

A org.eclipse.compare.structureCreators kiterjesztés segítségével kijelölhet egy sruktúralétrehozót a bedolgozóhoz. A tartalom-megjelenítőkhöz hasonlóan megadható egy struktúralétrehozó a fájlkiterjesztés-halmazhoz, vagy a contentTypeBinding segítségével a tartalomtípus hozzárendelhető egy adott struktúralétrehozóhoz. Itt nem tekintjük át a leírónyelvet, mert nagyon hasonló a tartalom-megjelenítőkhöz. A JDT bedolgozó számos hozzájárulást ad meg az org.eclipse.compare.structureCreators elemhez.

Egyéb hierarchikus struktúra-megjelenítők

Néhány esetben a fa alapú StructureDiffViewer nem felel meg a bedolgozónak.  A org.eclipse.compare.structureMergeViewers kiterjesztési pont segítségével saját megvalósítást adhat meg egy struktúraösszefésülés-megjelenítőhöz. A fájlkiterjesztésekhez megadható egy struktúraösszefésülés-megjelenítő, vagy a contentTypeBinding segítségével tartalomtípus rendelhető egy adott struktúraösszefésülés-megjelenítőhöz. Az org.eclipse.compare.structureMergeViewers közreadások példáit a JDT bedolgozó tartalmazza.

A keresés bedolgozó számos segédprogram-osztályt biztosít a keresésmegjelenítő megvalósításához.

Különbségkimutató 

Különbségkimutató egy különbségkimutató alrendszer a hierarchikusan strukturált adatokhoz. Két vagy három bemenetet vesz, és két vagy három lépéses összehasonlítást hajt végre rajtuk.

Ha a különbségkimutató alrendszer bemeneti elemei megvalósítják az IStructureComparator felületet, akkor az alrendszer rekurzív módon alkalmazza magát a bemeneti elemek leszármazottaira. A levélelemeknek meg kell valósítaniuk az IStreamContentAccessor felületet, így a különbségkimutató egy byteszintű összehasonlítást hajthat végre a tartalmon.

A platformmegvalósítás számos jó különbségkimutató-példát tartalmaz:

Alapértelmezés szerint a különbségkimutató alrendszer az összehasonlítás művelet eredményét DiffNode objektumok fájaként adja vissza.  A DiffNode leírja a két vagy három bemenet változásait.  Az eredményül kapott csomópontok típusa az alrendszer metódusának felülírásával módosítható.

Különbségmegjelenítők

A DiffNode csomópontok fája megjeleníthető a DiffTreeViewer elemben. A DiffTreeViewer megköveteli, hogy a fa belső csomópontjai megvalósítsák az IDiffContainer felületet, a levelek pedig az IDiffElement felületet.

Jellemző lépések a hierarchikusan strukturált adatok összehasonlításához és a különbségek megjelenítéséhez:

  1. Képezze le a bemeneti adatokat az IStructureComparator és IStreamContentAccessor felületeket megvalósító objektumfára
  2. Hajtsa végre az összehasonlítás műveletet a Differencer segítségével
  3. Helyezze a különbségkimutatási eredményeket a DiffTreeViewer elembe.

A StructureDiffViewer egy speciális DiffTreeViewer, amely automatizálja a fenti lépéseket. Vesz egy ICompareInput típusú bemeneti objektumot, amelyből lekéri a két vagy három összehasonlítandó bemeneti elemet.  Egy IStructureCreator elemet használ a IStructureComparator és IStreamContentAccessor objektumokat tartalmazó fa kibontásához. Ezek a fák ezután összehasonlításra kerülnek a különbségkimutató alrendszerrel és az eredmény megjelenik a famegjelenítőben.

A ZipFileStructureCreator a IStructureCreator felület megvalósítása, és elérhetővé teszi a zip archív fájl tartalmát a IStructureComparator hierarchikus struktúrájaként, amely a különbségkimutató alrendszer segítségével (Differencer) egyszerűen összehasonlítható. Jó példa arra, hogy a strukturált fájlok hogyan tehetők elérhetővé az összehasonlítás bedolgozó hierarchikus összehasonlítás funkciójához.