Loogisen mallin integroinnin tietovaraston ohjetiivistelmä

Tietovaraston toimittaja voi tukea loogisia malleja seuraavasti:

  1. Toimita asianmukaiset tietovarastotoiminnot elementeille, jotka mukautuvat ResourceMapping-luokkaan.
  2. Varmista, että resurssien vastaavuusmäärityksiin tehdyt toiminnot sisältävät kaikki asianmukaiset mallielementit ja resurssit, käyttämällä ISynchronizationScope-rajapintaa ja tukena ohjelmointirajapintaa.
  3. Salli mallien toimittajien osallistua näyttöpäätteettömään yhdistämiseen IMergeContext-rajapinnan ja tukevan ohjelmointirajapinnan avulla.
  4. Salli mallien toimittajien osallistua yhdistämisen esikatseluihin käyttämällä yhdistämiseen osallistuvissa malleissa teamContentProviders-kohdetta. Käytössä on myös ModelSynchronizeParticipant-luokka, jonka avulla voit hallita mallin sisällön, yhdistämisen kontekstin ja vertailukehyksen välistä suhdetta.
  5. Anna pääsy työtilan historiatiedostoihin IFileHistoryProvider-ohjelmointirajapinnan avulla.
  6. Anna pääsy etäkokoonpanoihin Eclipse-tiedostojärjestelmän ohjelmointirajapinnan avulla org.eclipse.core.filesystem-lisäosassa ja linkitä se työtilan projekteihin ProjectSetCapability-kohteen kautta.
  7. Tue loogisen mallin elementtien koristelua antamalla työtilan Subscriber-kohde käytettäväksi SynchronizationStateTester-ohjelmointirajapinnan kanssa.

Seuraavissa kohdissa kuvataan nämä seikat tarkemmin. Lisäosassa org.eclipse.team.examples.filesystem on esimerkki, joka havainnollistaa monia näistä seikoista. Voit kuitata projektin ulos CVS-tietovarastosta ja käyttää sitä viitteenä, kun luet tätä opetusohjelmaa. Vastuunrajoituslauseke: Esimerkkilisäosien lähdekoodi saattaa muuttua ajan myötä. Jos haluat saada tässä esimerkissä käytettyä koodia vastaavan version, voit kuitata projektin ulos käyttämällä version 3.2 tunnistetta (luultavasti R3_2) tai päivämäärän 28. kesäkuuta 2006 tunnistetta.

Toimintojen lisäys resurssien vastaavuusmäärityksiin

Resurssien vastaavuusmäärityksen perusohjelmointirajapinta

Resurssien vastaavuusmäärityksen ohjelmointirajapinta koostuu seuraavista luokista:

Kahdenlaiset lisäosat tarvitsevat tietoja resurssien vastaavuusmäärityksistä. Näitä ovat ne, jotka toimittavat mallin, joka koostuu työtilan resursseista tai on tehty pysyväksi niissä, ja ne, jotka kohdistavat resursseihin toimintoja. Edellinen tilanne kuvataan kohdassa mallin ohjetiivistelmä ja jälkimmäinen tilanne seuraavassa kohdassa.

Resurssien vastaavuusmääritykset ja objektinlisäykset

Lisäosien, jotka lisäävät laajennuksia mukautettaviin laajennuspisteisiin, on tehtävä kaksi muutosta, jotta ne tukevat uusia ResourceMapping-ohjelmointirajapintoja:

  1. Päivitä mitkä tahansa popupMenus-laajennuspisteen objectContributions-kohteista niiden plugin.xml-tiedostossa, jotta kohteeksi tulee ResourceMapping eikä IResource (niiden osalta, joihin tämä sopii).
  2. Päivitä niiden toiminnot toimimaan ResourceMapping-kohteessa eikä IResource-kohteessa ja noudata läpikäyntien syvyysrajoituksia.

Lisäosat, jotka lisäävät objektien lisäyksiä IResource-kohteeseen, voivat nyt lisätä ne ResourceMapping-kohteeseen, jos toimintoa voi käyttää useaan resurssiin. Seuraavassa on XML-katkelma, joka lisää valikkotoiminnon objekteihin, jotka mukautuvat resurssien vastaavuusmäärityksiin:

   <extension
       point="org.eclipse.ui.popupMenus">
     <objectContribution
            objectClass="org.eclipse.core.resources.mapping.ResourceMapping"
            adaptable="true"
            id="org.eclipse.team.ccvs.ui.ResourceMapperContributions">
<enablement>
<adapt type="org.eclipse.core.resources.mapping.ResourceMapping">
<test
property="org.eclipse.core.resources.projectPersistentProperty"
args="org.eclipse.team.core.repository,org.eclipse.team.cvs.core.cvsnature" />
</adapt>
</enablement>
<action
label="%UpdateAction.label"
definitionId="org.eclipse.team.cvs.ui.update"
class="org.eclipse.team.internal.ccvs.ui.actions.UpdateAction"
tooltip="%UpdateAction.tooltip"
menubarPath="team.main/group2"
id="org.eclipse.team.cvs.ui.update">
</action>
...
</objectContribution>
</extension>

ResourceMapping-kohteeseen tehdyt lisäykset koskevat automaattisesti objekteja, jotka mukautuvat IResource-kohteeseen. Työympäristö käsittelee tämän väliaikaisen liitynnän. Resurssien vastaavuusmääritysten lisäysten suodatuksen voi toteuttaa käyttöönottolausekkeiden avulla. Ohjelmaan on lisätty lauseke, jonka avulla voi suodattaa projektin pysyvien ominaisuuksien mukaan, jotta tietovarastojen toimittajat saavat valikot näkyviin projekteissa, joille on määritetty vastaavuus niiden tietovarastoihin.

ResourceMapping-luokkaan lisätyille toiminnoille annetaan valinta, joka sisältää ainakin yhden ResourceMappings-kohteen. Toiminnon tehtävä on kääntää resurssien vastaavuusmääritys resurssijoukoksi, johon toiminto kohdistetaan. Tämän voi tehdä kutsumalla getTraversals-kohdetta, joka noutaa vastaavuusmääritysten läpikäynnit. Läpikäyntien avulla läpikäynnin työasemat voivat optimoida toimintonsa läpikäytyjen resurssien syvyyden mukaan. Työasema voi läpikäydä resurssin manuaalisesti tai käyttää resurssia ja syvyyttä syötteenä toimintoon, jolle työ delegoidaan. Jos käyttäjä esimerkiksi toteuttaa CVS-päivityksen Java-paketissa ja Java-paketin resurssien vastaavuusmääritys määrittää vastaavuuden kansioon, jonka syvyys on yksi, CVS antaa sopivan komennon ("cvs update -l"), joka toteuttaa pinnallisen päivityksen paketin edustamassa kansiossa.

Vaikka on mahdollista hankkia joukko läpikäyntejä suoraan valituista resurssien vastaavuusmäärityksistä, jotkin mallien suhteet (tai tietovarastojen suhteet) voivat edellyttää lisäresurssien tai -mallielementtien sisällyttämistä toimintoon. Seuraavassa kohdassa kuvataan, kuinka voit varmistaa, että kaikki tarvittavat resurssit sisällytetään toimintoon.

Toiminnon alue

Työryhmätoiminnoissa valitut vastaavuusmääritykset on käännettävä vastaavuusmääritysjoukoksi, johon toiminto kohdistuu. Tämä tarkoittaa, että kaikilta mallien toimittajilta varmistetaan, että ne sisällytetään niiden käyttösääntöjen vastaavien resurssien toimintoihin. Termi, jolla kuvataan toiminnon kohteena olevaa täydellistä resurssien vastaavuusmääritysjoukkoa, on alue. Tätä varten on käytettävissä seuraava ohjelmointirajapinta:

SynchronizationScopeManager-luokan initialize(IProgressMonitor)-metodi käsittelee koko prosessin, jossa muunnetaan resurssien vastaavuusmääritysten syötejoukko täydelliseksi vastaavuusmääritysjoukoksi, johon toiminto kohdistuu, sekä täydellisen läpikäyntien joukon, joka kattaa nämä vastaavuusmääritykset. Tietovaraston toimittaja voi mukauttaa tätä prosessia seuraavasti:

  1. toimittamalla RemoteResourceMappingContext-kohteen käytettäväksi hankittaessa resurssien läpikäyntejä resurssien vastaavuusmäärityksistä
  2. ohittamalla SynchronizationScopeManager-kohteen ja muokkaamalla alueen hallintaprosessia tarpeen mukaan.

Seuraavissa kahdessa kohdassa kuvataan nämä seikat tarkemmin.

Etäresurssin vastaavuusmäärityksen konteksti

Varmistaakseen, että kaikki tarvittavat resurssit sisällytetään työryhmätoimintoon, mallin toimittaja voi tarvita mahdollisuuden tarkistaa tietovaraston resurssien tila. Joissakin malleissa tämä ei ehkä ole tarpeen. Esimerkiksi Java-paketti on säilö, jonka läpikäynnin syvyys on yksi huolimatta mallin etätilasta. Näin ollen tietovaraston toimittaja voi helposti selvittää, että lähtevät poistot on sisällytettävä muutosten vahvistuksessa tai että saapuvat lisäykset on sisällytettävä päivitysten yhteydessä. Jotkin loogiset mallit muodostavat resurssit voivat kuitenkin muuttua ajan myötä. Esimerkiksi mallielementin muodostavat resurssit voivat olla alisteisia manifest-tiedoston sisällölle (tai vastaavalle mekanismille). Jotta resurssien vastaavuusmääritys palauttaa oikean läpikäynnin, sillä on oltava pääsy manifest-tiedoston etäsisältöön (jos se eroaa paikallisesta sisällöstä), jotta nähdään, onko muitakin resursseja sisällytettävä. Näitä lisäresursseja ei välttämättä ole työtilassa, mutta tietovaraston toimittaja voi varmistaa, että ne ovat, kun valittu toiminto toteutetaan.

Näiden monimutkaisempien mallien tuki edellyttää, että RemoteResourceMappingContext-kohde voidaan välittää ResourceMapping#getTraversals-metodille. Kun konteksti annetaan, vastaavuusmääritys voi sen avulla varmistaa, että kaikki tarvittavat resurssit on sisällytetty läpikäyntiin. Jos kontekstia ei anneta, vastaavuusmääritys voi olettaa, että vain paikallinen tila on tärkeä.

Etäresurssien vastaavuusmäärityksen konteksti antaa käyttöön seuraavat kolme peruskyselyä:

Vastaus ensimmäiseen kysymykseen määräytyy toteutettavan toiminnon lajin mukaan. Yleensä päivitykset ja yhdistämiset ovat kolmesuuntaisia, kun taas vertailut ja korvaustoiminnot (ainakin CVS-järjestelmässä) ovat kaksisuuntaisia.

Eclipsen työryhmäohjelmointirajapinta sisältää Subscriber-luokan, joka määrittää ohjelmointirajapinnan, joka ilmoittaa paikallisen työtilan ja etäpalvelimen välisen synkronoinnin tilan. Käytettävissä on SubscriberResourceMappingContext-kohde, joka käyttää edellytettyä etätilaa Subscriber-luokan avulla. Työasemien, joilla on Subscriber-luokka, ei tarvitse tehdä ylimääräistä työtä noutaakseen resurssin vastaavuusmäärityksen kontekstin.

Aliluokan luonti SynchronizationScopeManager-luokalle

SynchronizationScopeManager-luokalle voi luoda aliluokan, jonka avulla voi mukauttaa alueen luontia ja hallintaa. Alueen hallintaohjelman aliluokan luonnin kaksi tärkeintä syytä ovat seuraavat:

  1. Tietovaraston toimittajan on sisällytettävä lisäresursseja jonkin tietovarastotason suhteen (esimerkiksi muutosjoukon) takia. Tämän voi toteuttaa ohittamalla adjustInputTraversals(ResourceTraversal[])-metodin.
  2. Synkronoinnilla on pidempi elinkaari (esimerkiksi synkronointinäkymä verrattuna valintaikkunaan), ja sen on voitava reagoida alueen muutoksiin. ISynchronizationScopeParticipant-rajapinta määrittää ohjelmointirajapinnan, jonka avulla mallien toimittajat voivat osallistua alueen hallintaprosessiin. SubscriberScopeManager-luokka on Subscriber-perustainen SynchronizationScopeManager-kohteen aliluokka, joka ottaa osanottajat mukaan alueen hallintaprosessiin. Esimerkki tällaisen prosessin tarpeesta ovat työaineistot. Jos alueen resurssien vastaavuusmäärityksiin kuuluu työaineisto, alueen kattama läpikäyntien joukko suurenisi, jos resursseja lisättäisiin työaineistoon.

Malliin perustuva yhdistäminen

Pääasiallinen mallin osallistumista edellyttävä tietovaraston toimintolaji on yhdistäminen. Monessa tapauksessa mallien tarvitsee osallistua vain tiedostotasolla. Tätä varten on IStorageMerger-ohjelmointirajapinta, jotta mallien toimittajat voivat toteuttaa yhdistämisiä, joissa yhdistetään tiedostoja, joilla on tietty tunniste tai sisältölaji. Joissakin tapauksissa mallit voivat kuitenkin tarvita lisäkontekstin osallistuakseen yhdistämiseen kunnolla. Siksi käytettävissä ovat IResourceMappingMerger- ja IMergeContext-ohjelmointirajapinnat.

Tietovaraston toimittajaan liittyvät toiminnot liipaisevat yhä yhdistämiset. Kun käyttäjä pyytää yhdistämistoimintoa, tietovaraston toimittajan on otettava mallien toimittajat mukaan yhdistämisprosessiin varmistaakseen, ettei yhdistäminen vioita mallia jollakin tapaa.

Malliin perustuvaan yhdistämistukeen liittyy kaksi pääasiallista tietovaraston toimittajan ohjelmointirajapinnan osaa.

  1. Ohjelmointirajapinta, jonka avulla kuvataan yhdistämiseen liittyvien resurssien synkronointitilaa.
  2. Ohjelmointirajapinta, jonka avulla mallien toimittajat voivat yhdistää mallielementtejä.
Seuraavissa kohdissa kuvataan nämä osat.

Synkronointitilan kuvauksen ohjelmointirajapinta

Tärkeä osa malliin perustuvaa yhdistämistä on ohjelmointirajapinta, jonka avulla ilmoitetaan asiaan liittyvien resurssien synkronointitila mallin toimittajalle. Synkronointitila kuvataan seuraavien rajapintojen avulla:

Kaikilla rajapinnoilla on abstraktit luokat, joiden nimeämiskäytäntöön kuuluu, että luokan nimi vastaa rajapinnan nimeä, mutta sen alusta poistetaan I-kirjain. Ainoa luokka, joka tietovaraston toimittajien on ohitettava, on ResourceDiff-luokka, jotta tarvittavat etu- ja jälkikäteiset tiedostojen muutosversiot voidaan toimittaa.

Mallin yhdistämisen ohjelmointirajapinta

IMergeContext-rajapinta laajentaa synkronoinnin kontekstia lisämetodeilla, jotka tukevat yhdistämistä. Vastakutsumetodeja on käytettävissä seuraaviin tarkoituksiin:

Käytettävissä on abstrakti MergeContext-luokka, joka sisältää oletustoteutuksia suurelle osalle yhdistämistoiminnasta ja käyttää myös IStorageMerger-rajapintaa kolmesuuntaisissa yhdistämisissä. Käytettävissä on myös SubscriberMergeContext-luokka, joka käsittelee yhdistymisen kontekstiin liittyvän synkronointitilan kuvauksen täytön ja ylläpidon.

Käytettävissä on toimintoluokka ModelMergeOperation, joka IResourceMappingMerger-ohjelmointirajapinnan avulla toteuttaa malliin perustuvan yhdistämistoiminnon. Yhdistämiskontekstin palautus edellyttää, että aliluokat ohittavat initializeContext(IProgressMonitor)-metodin. Tämän kontekstin avulla toiminto yrittää näyttöpäätteetöntä malliin perustuvaa yhdistämistä. Jos ristiriitoja ilmenee, yhdistämisen esikatselu jää aliluokan tehtäväksi. Kuten seuraavassa kohdassa nähdään, käytettävissä on ModelParticipantMergeOperation-luokka, joka tuo käyttöön esikatselumahdollisuuden ModelSynchronizeParticipant-luokan avulla.

Mallin sisältö työryhmän katseluohjelmassa

Tuki loogisten mallien näytölle työryhmissä on käytettävissä yhteisen navigaattorin kehyksen avulla, joka on käytössä Eclipse-versiosta 3.2 alkaen. Loogiset mallit voivat liittää sisällön laajennuksen mallin toimittajaan org.eclipse.team.ui.teamContentProvider-laajennuspisteen avulla. Työryhmän toimittajat käyttävät näitä sisällön toimittajia ITeamContentProviderManager-rajapinnan avulla.

On useita tilanteita, joissa työryhmän toimittaja voi haluta näyttää loogisia malleja:

ModelSynchronizeParticipant mahdollistaa integroinnin synkronointinäkymässä tai missä tahansa säilössä, joka voi näyttää iSynchronizePages-kohteen. Osanottaja hyödyntää sekä aiemmin luodun synkronoinnin osanottajan ominaisuuksia että yleisen navigaattorin ominaisuuksia ja mahdollistaa siten, että työryhmän toimittajat ja mallit voivat mukauttaa työkaluriviä, pikavalikkoa ja muita esikatselunäkymän ominaisuuksia. ModelSynchronizeParticipant tuo käyttöön seuraavat:

Seuraavassa on tarkistusluettelo mallin synkroinnin osanottajan mukautuksen vaiheista tietyssä työryhmän toimittajassa:

Seuraavat XML-katkelmat osoittavat, kuinka CVS-osanottajaluokka rekisteröidään ja kuinka sen katseluohjelma määritetään.

   <extension point="org.eclipse.team.ui.synchronizeParticipants">
	<participant
            name="CVS"
            icon="$nl$/icons/full/eview16/cvs_persp.gif"
            class="org.eclipse.team.internal.ccvs.ui.mappings.WorkspaceModelParticipant"
            id="org.eclipse.team.cvs.ui.workspace-participant">
      </participant>
</extension>
   
   <extension point="org.eclipse.ui.navigator.viewer">
       <viewer viewerId="org.eclipse.team.cvs.ui.workspaceSynchronization">
<popupMenu
                allowsPlatformContributions="false"
                id="org.eclipse.team.cvs.ui.workspaceSynchronizationMenu"> 
             <insertionPoint name="file"/>
             <insertionPoint name="edit" separator="true"/>       
             <insertionPoint name="synchronize"/>
             <insertionPoint name="navigate" separator="true"/>
             <insertionPoint name="update" separator="true"/>
             <insertionPoint name="commit" separator="false"/>
             <insertionPoint name="overrideActions" separator="true"/>
             <insertionPoint name="otherActions1" separator="true"/>
             <insertionPoint name="otherActions2" separator="true"/>
             <insertionPoint name="sort" separator="true"/>
             <insertionPoint name="additions" separator="true"/>             
             <insertionPoint name="properties" separator="true"/>
          </popupMenu>
       </viewer>
</extension>

Tiedostohistoria

Saatavilla on lisätty tiedostohistorian ohjelmointirajapinta, jotta mallit voivat käyttää tiedostojen historiatietoja. Tiedostohistorian ohjelmointirajapinta koostuu seuraavista rajapinnoista:

Tämän ohjelmointirajapinnan ohella on lisätty yleinen tiedostojen historianäkymä. Sen ansiosta työryhmien toimittajat voivat näyttää tiedostojen ja resurssien historiatiedot yhteisessä näkymässä ja mahdollistaa mallien näyttävän sellaistenkin mallielementtien historiatiedot, joilla ei ole suoraa vastaavuusmääritystä resursseihin. Historianäkymä on sivunäkymä, joka hankkii valitulle elementille sivun seuraavasti:

Projektiaineiston toiminto

ProjectSetCapability-kohteeseen on lisätty metodeja, jotka tukevat käännöstä projektin ja etäsisällön välisen vastaavuusmäärityksen tunnistamiseen käytetyn merkkijonoviitteen ja org.eclipse.core.filesystem.filesystems-laajennuspisteen avulla rekisteröidyn tiedostojärjestelmän skeeman tunnistamiseen käytettyjen URI-osoitteiden välillä. Työryhmien toimittajat voivat valinnaisesti antaa tälle tuen, jos haluavat sallia loogisten mallien etäselauksen ja projektien latauksen.

Mallielementtien koristelu

Työryhmän toimittajat voivat koristella mallielementit muuntamalla niiden kevyet koristeet toimimaan resurssien vastaavuusmäärityksissä samalla tapaa kuin objektilisäykset muunnetaan toimimaan resurssien vastaavuusmäärityksissä. Loogisten mallien elementtien koristelussa on kuitenkin eräs ongelma. Jos mallielementillä ei ole yksi-yhteen-vastaavuutta resurssiin, mallielementin nimiötä ei ehkä päivitetä, kun perustana olevat resurssit muuttuvat.

Ongelman ratkaisemiseksi on otettu käyttöön ITeamStateProvider-kohde, jonka avulla mallien toimittajat voivat käyttää työryhmäkoristeluihin ehkä vaikuttavia tilan muutoksia. Lisäksi mallinäkymät voivat selvittää SynchronizationStateTester-kohteen avulla, milloin loogisen mallin elementtien nimiöt on päivitettävä. Tämä ohjelmointirajapinta selvittää ITeamStateProvider-liittymän avulla, milloin resurssin työryhmätila on muuttunut ja voidaan välittää työryhmän koristelutoiminnolle osana IDecorationContext-kohdetta.