Tietovaraston toimittaja voi tukea loogisia malleja seuraavasti:
ResourceMapping
-luokkaan.ISynchronizationScope
-rajapintaa ja tukena ohjelmointirajapintaa.IMergeContext
-rajapinnan ja
tukevan ohjelmointirajapinnan avulla.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.IFileHistoryProvider
-ohjelmointirajapinnan avulla. ProjectSetCapability
-kohteen kautta.
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.
Resurssien vastaavuusmäärityksen ohjelmointirajapinta koostuu seuraavista luokista:
Object getModelObject()
: Malliobjekti, josta vastaavuusmääritys on johdettu (tai mukautettu).ResourceTraversal[]
getTraversals(ResourceMappingContext, IProgressMonitor)
: Resurssien läpikäynti, joka kattaa malliobjektin muodostavat objektit.ResourceTraversal
-kohde sisältää joukon resursseja ja syvyysmääritteen, joka osoittaa, mihin syvyyteen saakka läpikäynnin kohteena olevat resurssit liittyvät alkuperäiseen malliobjektiin. Resurssien vastaavuusmääritys mahdollistaa työasemalle resurssien läpikäynnin, jotta mallin sisältö voidaan kuvata sellaisella tavalla, että työasema (esimerkiksi tietovaraston toimittaja) voi toteuttaa toimintonsa mahdollisimman tehokkaasti. Kiinnostavat metodit ovat seuraavat:
getResources()
getDepth()
ResourceMappingContext
ja RemoteResourceMappingContext
käyttö on hieman monimutkaisempaa ja kuvataan kohdassa Resurssien vastaavuusmäärityksen konteksti.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.
Lisäosien, jotka lisäävät laajennuksia mukautettaviin laajennuspisteisiin, on tehtävä kaksi muutosta, jotta ne tukevat uusia ResourceMapping
-ohjelmointirajapintoja:
ResourceMapping
eikä IResource
(niiden osalta, joihin tämä sopii).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.
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:
ISynchronizationScope
:
Rajapinta, joka määrittää toiminnon alueen käytön ohjelmointirajapinnan. Sen avulla voi käyttää kaikkia toiminnon kohteena olevia resurssien vastaavuusmäärityksiä ja niiden läpikäyntejä, kuten ne on laskettu alueen koontiprosessin aikana.ISynchronizationScopeManager
:
Rajapinta, joka määrittää alueen luonnin ja hallinnan ohjelmointirajapinnan.SynchronizationScopeManager
:
Laajennettava luokka, joka toimittaa ISynchronizationScopeManager
-ohjelmointirajapinnan oletustoteutuksen.ModelOperation
:
Laajennettava toimintoluokka, joka luo alueen käyttämällä alueen hallintaohjelmaa ja tiedustelee, onko toimintoon sisällytetty lisäresursseja tai -vastaavuusmäärityksiä mallin toimittajan suhteiden takia.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:
RemoteResourceMappingContext
-kohteen käytettäväksi hankittaessa resurssien
läpikäyntejä resurssien vastaavuusmäärityksistäSynchronizationScopeManager
-kohteen ja muokkaamalla alueen hallintaprosessia
tarpeen mukaan.Seuraavissa kahdessa kohdassa kuvataan nämä seikat tarkemmin.
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.
SynchronizationScopeManager
-luokalle voi luoda aliluokan, jonka avulla voi mukauttaa alueen luontia ja hallintaa. Alueen hallintaohjelman aliluokan luonnin kaksi tärkeintä syytä ovat seuraavat:
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.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.
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.
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.
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:
ModelOperation
-luokka antaa rekisteröidyn työryhmän sisällöntoimittajien avulla käyttäjälle tiedon alueen laajennuksesta.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:
ModelSynchronizeParticipant
-aliluokan. ISynchronizePageConfiguration.P_VIEWER_ID
.MergeActionGroup
mukautettu aliluokka, jotta voit mukauttaa yhdistämiseen liittyvien toimintojen ulkoasua.ModelParticipantMergeOperation
aliluokka, jonka avulla käsitellään siirtymää malliin perustuvasta yhdistämisestä esikatseluun valintaikkunassa tai synkronointinäkymässä.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>
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:
RepositoryProvider
-kohde IHistoryPageSource-rajapintaan.
IHistoryPageSource
-rajapintaan.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.
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.