Tietovaraston toimittaja (RepositoryProvider) on tärkein tietovaraston toteutukseen liittyvä luokka. Luokka on vastuussa siitä, että projekti määritetään tietovaraston hallintaa varten ja että resurssien muuntoa varten on tarvittavat ripustimet. Toimittajat on määritetty vastaamaan projektia projektin pysyvien ominaisuuksien avulla.Toimittajien määritys vastaamaan projekteja ei ole keskeistä ryhmän ohjelmointirajapinnan kannalta, mutta siitä tulee olla selvillä, kun resursseja suodatetaan käyttöliittymässä. Suurimmaksi osaksi ryhmän ohjelmointirajapintaa käytetään projektien käsittelyyn ja projektien liittämiseen toimittajaan.
Toimittajan toteutusta varten on määritettävä tietovarasto luokan org.eclipse.team.core.repository avulla ja toimitettava luokasta RepositoryProvider johdettu luokka.Esimerkissä käytetään mallina CVS-työasemaa.
Laajennuspisteen org.eclipse.team.core.repository avulla lisätään tietovaraston määritys.Seuraavassa on CVS-työaseman merkintä.
<extension
point="org.eclipse.team.core.repository">
<repository
class="org.eclipse.team.internal.ccvs.core.CVSTeamProvider"
id="org.eclipse.team.cvs.core.cvsprovider">
</repository>
</extension>
Koodi rekisteröi ryhmän toimittajalle ryhmätuen lisäosan ja määrittää tunnuksen, jota tulee käyttää, kun toimittaja on määritetty liittyväksi projektiin.Tietovarastolle määritetyn class (luokka) -määritteen tulee laajentaa RepositoryProvider-luokkaa.
Laajennuksessa yksilöidyn luokan tulee olla RepositoryProvider-luokan aliluokka. Sen tärkeimpiä vastuualueita ovat projektin kokoonpanon määritys tietovarastotukea varten ja kokoonpanon uudelleenmääritys sekä tarvittavien resurssien muuntoripustinmetodien toimitus.CVS-työasema toimii hyvänä esimerkkinä.Sen tietovaraston toimittaja on CVSTeamProvider-luokka.
public class CVSTeamProvider extends RepositoryProvider {
...
RepositoryProvider-luokka määrittää kaksi abstraktia metodia: configureProject- ja deconfigure-metodin.Kaikkien toimittajien on toteutettava nämä metodit.
Projektin kokoonpano on määritetty, kun se ensimmäistä kertaa liitetään tiettyyn tietovaraston toimittajaan.Tämä tapahtuu yleensä, kun käyttäjä valitsee projektin ja liittää sen ohjattujen ryhmätoimintojen avulla tietovarastoon.Olipa toiminta liipaistu miten tahansa, tällöin tulee laskea tai viedä välimuistiin sellaiset projektiin liittyvät tiedot, jotka tulee toimittaa tietovaraston funktioon.(Oletetaan, että projekti on jo määritetty vastaamaan toimittajaa.Siitä huolehditaan ohjatussa kokoonpanon määritystoiminnossa.)
CVS-toimittaja vain välittää tiedon siitä, että projektin kokoonpano on määritetty:
public void configureProject() throws CoreException {
CVSProviderPlugin.broadcastProjectConfigured(getProject());
}
Lisäosan välitystekniikan toteutusta ei käsitellä tässä esimerkissä. Todettakoon vain, että sellaiset osapuolet, joiden on laskettava tai alustettava projektiin liittyviä tietoja, voivat tehdä sen tässä vaiheessa.
Projektin kokoonpano määritetään uudelleen, kun käyttäjä ei enää halua liittää ryhmän toimittajaa projektiin. Lisäosan tulee toteuttaa käyttäjän toiminto, joka saa tämän tapahtumaan (ja projektin sekä ryhmän toimittajan vastaavuuden poisto tapahtuu samalla). Metodin deconfigure yhteydessä voi poistaa projektiin liittyvät välimuistit tai poistaa käyttöliittymästä projektiin liittyvät viitteet. CVS-toimittaja tyhjentää projektiin liittyvät välimuistit, joita säilytetään sen näkymissä, ja välittää tiedon siitä, että projektin kokoonpano on määritetty uudelleen.
public void deconfigure() throws CoreException {
...
try {
EclipseSynchronizer.getInstance().flush(getProject(), true, true /*flush deep*/, null);
} catch(CVSException e) {
throw new CoreException(e.getStatus());
} finally {
CVSProviderPlugin.broadcastProjectDeconfigured(getProject());
}
}
Yleensä ryhmän käyttöliittymän koonti aloitetaan toteuttamalla ohjatun toiminnon sivu, jolla käyttäjät voivat määrittää projektiin lisäosan ryhmätuen.Tällöin ryhmän toimittajan tunnus lisätään projektin ominaisuuksiin.Projektin määritykseen osallistutaan toimittamalla kohteita laajennuspisteeseen org.eclipse.team.ui.configurationWizards.Ohjattu toiminto tulee näyttöön, kun käyttäjä valitsee Ryhmä -> Määritä projekti yhteiskäyttöön.
Tarkastellaan asiaa CVS-työaseman toteutuksen asiayhteydessä.Seuraavassa on CVS-käyttöliittymän merkintä ohjattua kokoonpanon määritystoimintoa varten:
<extension
point="org.eclipse.team.ui.configurationWizards">
<wizard
name="%SharingWizard.name"
icon="icons/full/wizards/newconnect_wiz.png"
class="org.eclipse.team.internal.ccvs.ui.wizards.SharingWizard"
id="org.eclipse.team.ccvs.ui.SharingWizard">
</wizard>
</extension>
Kuten tavallista, lisäosat toimittavat luokan (class), joka toteuttaa laajennuksen, sekä ainutkertaisen tunnuksen (id), jota käytetään laajennuksen tunnisteena. Nimi (name) ja kuvake (icon) näkyvät projektin ohjatun kokoonpanon määritystoiminnon ensimmäisellä sivulla, jos valittavissa on useita toimittajia.
Kun käyttäjä on valinnut toimittajan, seuraavalla sivulla näkyvät toimittajakohtaiset kokoonpanotiedot. (Jos toimittaja on ainoa asennettu ryhmän toimittaja -lisäosa, ohjattu toiminto siirtyy suoraan tälle sivulle.) Ohjatun toiminnon on toteutettava IConfigurationWizard-luokka, joka alustaa ohjatun toiminnon määritettyä työympäristöä ja projektia varten. Toteutuksen loppuosa määräytyy ohjatun toiminnon rakenteen perusteella. On kerättävä tiedot, joita tarvitaan projektin liittämiseksi ryhmätukeen.
Kun ohjattu toiminto on tehty, ryhmän toimittaja tulee määrittää vastaamaan projektia luokan RepositoryProvider.map(IProject, String) avulla. Vastaavuuden määritys käsittelee oikean projektin pysyvän ominaisuuden määrityksen projektille.
CVS-työasema tekee nämä työt toimittajan setSharing-metodissa, jota kutsutaan, kun ohjattu toiminto on valmis:
public void setSharing(IProject project, FolderSyncInfo info, IProgressMonitor monitor) throws TeamException {
// Varmistetaan, että annetut tiedot vastaavat projektin tietoja
...
// Varmistetaan, että annettu sijainti on hallinnassa
...
// Rekisteröidään projekti ryhmän kanssa
RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
}
RepositoryProvider-luokan staattisten metodien avulla työasemat voivat helposti määrittää projektien ja toimittajien välisiä vastaavuuksia sekä hakea tiettyyn projektiin liittyvät toimittajat.
Jos tuote lisää tietovarastolisäosan toimintoon, sen tulee sitoa toiminto tietovaraston tunnukseen. Seuraavassa on kuvattu vaiheet, joiden avulla RepositoryProvider-luokka voidaan ottaa käyttöön toimintona:
<activityPatternBinding
activityId="org.eclipse.team.cvs"
pattern="org\.eclipse\.team\.cvs\.core/.*cvsnature">
</activityPatternBinding>
<activityPatternBinding
activityId="org.eclipse.team.cvs"
pattern="org\.eclipse\.team\.cvs\.ui/.*">
</activityPatternBinding>
Ryhmälisäosat määrittävät kaksi toimintojen liipaisukohtaa. Ensimmäinen liipaisukohta on valikon vaihtoehdosta Ryhmä > Määritä projekti yhteiskäyttöön avautuva ohjattu toiminto, jonka avulla tietovarastojen toimittajia voi suodattaa sen mukaan, ovatko niiden työympäristötoiminnot käytössä vai pois käytöstä. Toinen liipaisukohta on ryhmälisäosan automaattisen käyttöönoton liipaisin.
Useimmat tietovaraston toimittajaan liittyvät kiinnostavat toiminnot tapahtuvat, kun käyttäjä käsittelee resursseja projektissa, joka on määritetty toimittajaa varten.Jotta toimittaja olisi selvillä käyttäjän resurssiin tekemistä muutoksista, toimittaja voi toteuttaa resurssimuunnosten ripustimia.Resurssilisäosa toimittaa ripustimet laajennuspisteinä.Laajennuspisteiden IMoveDeleteHook, IFileModificationValidator ja ResourceRuleFactory dokumentaatiossa kuvataan ripustinmetodien toteutus.
Ryhmälisäosa optimoi ja yksinkertaistaa ripustimen liitännän sopiviin resursseihin rekisteröimällä yleisiä ripustimia resurssilisäosassa.Nämä yleiset ripustimet tarkistavat, onko tietovaraston toimittajalla tiettyä resurssia, ja poimivat sen ripustimen.Tällöin tarvitsee kutsua vain yhtä toimittajan ripustinta sen sijaan, että kukin toimittajatoteutus rekisteröisi ripustimen, jonka on ensin tarkistettava, onko resurssi toimittajan hallinnassa.
Lisäosan kannalta voit toimittaa tarvittavat ripustimet korvaamalla luokan RepositoryProvider metodit.Metodien oletustoteutus palauttaa tyhjäarvon, eli ripustinta ei tarvita (lukuun ottamatta resurssisäännön factory-metodia, joka kuvataan edempänä):