Tartalommegjelenítő megvalósítása

Az összehasonlító bedolgozó segítségével speciális megjelenítőket biztosíthat a strukturálatlan elemek közötti tartalomkülönbségek megjelenítéséhez és összefésüléséhez.

Egyszerű tartalommegjelenítő

A tartalommegjelenítő olyan helyeken használhatók, ahol csak egy bemenet áll rendelkezésre, ezért nincs szükség összehasonlításra. Egy jellemző példa erre a "Visszaállítás helyi előzményből" funkció.  A org.eclipse.compare.contentViewers kiterjesztési pont segítségével megadhat egy speciális tartalommegjelenítőt, amely nem hasonlítja össze a bemeneteket.

<extension
	point="org.eclipse.compare.contentViewers">
	<viewer
		extensions="java,java2"
		class="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator"
		id="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator">
	</viewer>
	<contentTypeBinding
		contentTypeId="org.eclipse.jdt.core.javaSource"
		contentViewerId="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator">
	</contentTypeBinding>
   </extension>

A bedolgozó által közreadott speciális megjelenítő a megjelenítő elemben kerül megjelölésre. Meg kell adni a megjelenítő azonosítóját és az osztályt, amely létrehozza. Tetszőleges fájl kiterjesztéseket is megadhat, amelyekhez a tartalommegjelenítőt használni kell.  

A contentTypeBinding elemet is használhatja tartalomtípus tartalommegjelenítőhöz rendeléséhez.

Tartalomösszefésülés-megjelenítők

A tartalomösszefésülés-megjelenítő két- vagy három lépésben hasonlítja össze a bemeneteket, és megjeleníti az eredményt oldalról-oldalra vagy egyéb tetszőleges módon. A megjelenítő segítségével a felhasználó összefésülheti a bemeneteket. Az összefésülés-megjelenítők szöveg és képek esetén közösek.

Ha a szabványos összefésülés-megjelenítők nem működnek megfelelően a bedolgozó funkciójához, akkor saját tartalomösszefésülés-megjelenítő valósítható meg. A tartalomösszefésülés-megjelenítőt a org.eclipse.compare.contentMergeViewers kiterjesztési pont segítségével be kell jegyezni a platformhoz. Az alábbi leírónyelv megjeleníti a megadott tartalomösszefésülés-megjelenítő definícióját a Java fájlok és tulajdonságfájlok Java IDE-ben megjelenítéséhez:

<extension
	point="org.eclipse.compare.contentMergeViewers">
	<viewer
		extensions="java,java2"
		class="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator"
		id="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator">
	</viewer>
	<contentTypeBinding
		contentTypeId="org.eclipse.jdt.core.javaProperties"
		contentMergeViewerId="org.eclipse.compare.TextMergeViewerCreator">
	</contentTypeBinding>
	<contentTypeBinding
		contentTypeId="org.eclipse.jdt.core.javaSource"
		contentMergeViewerId="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator">
	</contentTypeBinding>
   </extension>

A tartalommegjelenítőkhöz hasonlóan a bedolgozó által közreadott speciális összefésülés-megjelenítők a megjelenítő elemben kerülnek kijelölésre. Meg kell adni a megjelenítő azonosítóját és az osztályt, amely létrehozza. Tetszőleges fájlkiterjesztéseket is megadhat, amelyekhez a tartalomösszefésülés-megjelenítőt használni kell.

A tartalommegjelenítőkhöz hasonlóan a contentTypeBinding segítségével hozzárendelhet egy tartalomtípust egy összefésülés-megjelenítőhöz. A JDT bedolgozó két különböző tartalomtípushoz köti a tartalomösszefésülés-megjelenítőt: a Java forráshoz és a Java tulajdonságfájlhoz.

A ContentMergeViewer egy absztrakt összehasonlítás- és összefésülés-megjelenítő két oldalankénti tartalomterülettel és egy esetleges tartalomterületet egy közös őshöz (háromlépéses összehasonlításhoz). Mivel a megvalósítás nem tesz feltevéseket a tartalomtípussal kapcsolatban, az alosztály felelős az adott tartalomtípus kezeléséért.  

Az org.eclipse.compare.internal elemben lévő ImageMergeViewer megjeleníti, hogy a ContentMergeViewer segítségével a képekhez hogyan valósítható meg egy egyszerű összefésülés-megjelenítő.  A ContentMergeViewer egy tartalomszolgáltató segítségével éri el a modellt, amelynek a IMergeViewerContentProvider felületet kell megvalósítania.

Szövegösszefésülés

Ha a megjelenítő szöveget használ, akkor további osztályok használhatók, amelyek  összehasonlítják és összefésülik a tartalmat.

A TextMergeViewer a ContentMergeViewer konkrét alosztálya, amely a szöveges tartalom összehasonlítására és összefésülésére használható. A szövegösszefésülés-megjelenítő a RangeDifferencer segítségével elvégzi a két (vagy három) bemeneti dokumentum szöveges, soronkénti összehasonlítását.

Különböző szövegsorok esetén a TextMergeViewer egy ITokenComparator segítségével keresi meg a leghosszabb egyező és különböző jelsorszekvenciát. A TextMergeViewer alapértelmezett jelsor-összehasonlítója a szóközszerű karakterekkel határolt karaktereken működik. Ha másik stratégiára van szükség (például jelsorok a Java futtatására képes összefésülés-megjelenítőben), akkor az ügyfelek a ITokenComparator felület megvalósításával saját jelsor-komparátorokat hozhatnak létre.

A TextMergeViewer a teljes dokumentumon és a dokumentumok részein működik. Részleges dokumentumok esetén a megjelenítő bemenetének IDocumentRange elemnek kell lennie IDocument helyett.

Tartományok közötti különbségek kimutatása

A RangeDifferencer megkeresi a leghosszabb egyező és különböző összehasonlítható entitásokat a szöveges kontextusban. Ennek megvalósítása az algoritmus objektumokkal megvalósított változatán alapul, melynek leírását az alábbi kiadvány tartalmazza: A File Comparison Program, by Webb Miller and Eugene W. Myers, Software Practice and Experience, Vol. 15, Nov. 1985.  Az ügyfeleknek egy bemenetet kell szolgáltatniuk a különbségkimutatóhoz, amely megvalósítja az IRangeComparator felületet. A IRangeComparator a bemeneti adatokat entitássorozatokra tördeli, és egy metódust biztosít egy entitás másik IRangeComparator elemben lévő entitással összehasonlításához.

Két szöveges dokumentum összehasonlításához, illetve a leghosszabb egyező és különböző sorok kikereséséhez például az IRangeComparator megvalósításnak a dokumentumokat sorokra kell tördelnie és egy metódust kell biztosítania a teszteléshez attól függően, hogy két sort egyezőnek ítél-e. Ennek végrehajtását az org.eclipse.compare.internal.DocLineComparator rész mutatja be.

A különbségkimutató a szekvenciák közötti különbséggel tér vissza a RangeDifference objektumok tömbjeként. Minden RangeDifference leírja a különbség típusát (nincs módosítás, módosítás, hozzáadás, törlés) és az alapul szolgáló összehasonlítható entitások megfelelő tartományát a két vagy három bemenetben.