Sisällön katseluohjelman toteutus

Vertailulisäosan avulla voit hyödyntää erikoistuneita katseluohjelmia muiden kuin rakenteisten elementtien sisällön erojen katselussa ja yhdistämisessä.

Yksinkertaiset sisällön katseluohjelmat

Sisällön katseluohjelmaa käytetään silloin, kun saatavilla on ainoastaan yksi syöte ja vertailua ei tarvita.  Tyypillinen esimerkki on toiminto "Palauta paikallisista historiatiedoista".Laajennuspisteen  org.eclipse.compare.contentViewers avulla voi määrittää erikoistuneen sisällön katseluohjelman, jossa ei vertailla syötteitä.

<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>

Lisäosan lisäämät erikoistuneet katseluohjelmat on määritetty katseluohjelma-elementissä. Sinun pitää määrittää katseluohjelman tunnus ja luokka, joka sen luo. Voit myös määrittää minkä tahansa tiedoston tunnisteen, johon sisällön katseluohjelmaa on tarkoitus käyttää.  

Voit myös käyttää contentTypeBinding-elementtiä liittämään sisältölajin sisällön katseluohjelmaan.

Sisällön yhdistämisen katseluohjelma

Sisällön yhdistämisen katseluohjelma suorittaa kahden- tai kolmenvälistä syötteiden vertailua ja esittää tulokset rinnakkain tai muulla sopivalla tavalla.  Katseluohjelman avulla käyttäjä voi yhdistellä syötteitä. Sisällön yhdistämisen katseluohjelmia käytetään yleensä tekstin tai kuvien yhteydessä.

Jos yhdistämisen vakiokatseluohjelmat eivät sovi lisäosasi toimintoihin, voit myös toteuttaa oman sisällön yhdistämisen katseluohjelman. Tällöin sisällön yhdistämisen katseluohjelman pitää olla rekisteröity käyttöjärjestelmään laajennuspisteen org.eclipse.compare.contentMergeViewers avulla.  Seuraavat merkinnät näyttävät, miten Java IDE -kehitysympäristössä määritetään Java-tiedostojen ja ominaisuustiedostojen erikoistuneet sisällön yhdistämisen katseluohjelmat:

<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>

Kuten sisällön katseluohjelmatkin, lisäosan lisäämät erikoistuneet yhdistämisen katseluohjelmat on määritetty katseluohjelma-elementissä. Sinun pitää määrittää katseluohjelman tunnus ja luokka, joka sen luo. Voit myös määrittää minkä tahansa tiedoston tunnisteen, johon sisällön katseluohjelmaa on tarkoitus käyttää.

Kuten katseluohjelmienkin kohdalla, voit käyttää contentTypeBinding-elementtiä yhdistämään sisältölajin yhdistämisen katseluohjelmaan. JDT-lisäosa sitoo sisällön yhdistämisen katseluohjelmat kahteen eri sisältölajiin: Java-lähdetiedostoihin ja Java-ominaisuustiedostoihin.

ContentMergeViewer on abstrakti vertailun ja yhdistämisen katseluohjelma, jossa on kaksi rinnakkaista sisältöaluetta ja yksi valinnainen sisältöalue yhteistä esijäsentä varten (kolmenväliseen vertailuun).  Koska toteutus vaatii tietynlaisen sisältölajin, aliluokan pitää käsitellä tämä sisältölaji.  

ImageMergeViewer-luokka, joka sijaitsee laajennuspisteessä org.eclipse.compare.internal kuvaa, kuinka kuville tarkoitettu yksinkertainen yhdistämisen katseluohjelma voidaan toteuttaa ContentMergeViewer-katseluohjelman avulla.  ContentMergeViewer käyttää malliaan sisällöntoimitustoiminnon avulla. Tämän toiminnon pitää toteuttaa rajapinta IMergeViewerContentProvider .

Tekstin yhdistäminen

Jos katseluohjelma käyttää tekstiä, voidaan käyttää ylimääräisiä luokkia, jotka vertailevat ja yhdistävät tekstisisältöä. 

TextMergeViewer on ContentMergeViewer-katseluohjelman konkreettinen aliluokka, jota käytetään tekstisisällön vertailuun ja yhdistämiseen. Tekstin yhdistämisen katseluohjelma käyttää RangeDifferencer-luokkaa kahden (tai kolmen) syötedokumentin tekstipohjaiseen, rivi riviltä tapahtuvan vertailun suorittamiseen.

Toisistaan eroavien tekstirivien kohdalla TextMergeViewer käyttää ITokenComparator-rajpintaa pisimpien samankaltaisten ja toisistaan eroavien sanakkeiden löytämiseksi. TextMergeViewer-luokan oletussanakevertailu käsittelee merkkejä, joita erottaa toisistaan tyhjä tila. Jos tarvitaan erilaista menettelyä (esimerkiksi käsitellään Java-sanakkeita Javan tunnistavassa yhdistämisen katseluohjelmassa), työasemille voidaan luoda omat sanakkeiden vertailutoimintonsa toteuttamalla ITokenComparator-rajapinta.

TextMergeViewer käsittelee kokonaisia dokumentteja ja niiden osa-alueita. Kun dokumenttia ei käsitellä kokonaisuutena, katseluohjelman syötteen pitää olla IDocumentRange IDocument-rajapinnan asemesta.

Alueiden erojen vertailutoiminto

RangeDifferencer-luokka etsii tekstisisällöstä pisimmät samankaltaiset ja toisistaan eroavat, verrattavissa olevat kokonaisuudet. Luokan toteutus perustuu lähteessä Miller ja Myers: A File Comparison Program, Software Practice and Experience, Vol. 15, Nov. 1985, esitettyyn algoritmiin.  Työaseman pitää tuottaa syöte erojen vertailutoiminnolle, joka toteuttaa rajapinnan IRangeComparator. IRangeComparator hajottaa syötetiedon kokonaisuuksien sarjaksi ja voi verrata kokonaisuuksia toisiinsa toisessa IRangeComparator-rajapinnassa.

Jos tarkoitus on esimerkiksi verrata kahta tekstidokumenttia ja löytää niistä pisimmät samankaltaisten ja toisistaan eroavien rivien sarjat, IRangeComparator -rajapinnan toteutuksen pitää hajottaa dokumentti riveihin ja pystyä testaamaan, milloin kaksi riviä ovat samankaltaiset. Kohdassa org.eclipse.compare.internal.DocLineComparator on esimerkki siitä, kuinka tämä tapahtuu.

Erojen vertailutoiminto palauttaa näiden sarjojen väliset erot RangeDifference-objektien taulukkona. Jokainen RangeDifference-objekti kuvaa eron lajin (ei muutosta, muutos, lisäys, poisto) ja verrattavien kokonaisuuksien vastaavia alueita kahdessa tai kolmessa syötteessä.