A lerakatszolgáltató (RepositoryProvider) a központi osztály a lerakat megvalósításában. Ez az osztály felelős a lerakatkezelő projektjének beállításáért és az erőforrás-módosítás szükséges csatlakozópontjainak biztosításáért. A szolgáltatók a projekt állandó tulajdonságok segítségével kerülnek leképezésre a projektre. A szolgáltatók projektre leképezésének mechanizmusa nem központi a csapat API számára, de ezt az erőforrások UI-ban kiszűrésekor Önnek tudnia kell. A legtöbb rész esetén a csapat API segítségével kezeli a projekteket és társítja őket a szolgáltatóval.
A szolgáltató megvalósításához az org.eclipse.team.core.repository segítségével meg kell adnia egy lerakatot, és biztosítani kell egy RepositoryProvider elemből származtatott osztályt. A működés megmutatásához példaként a CVS ügyfelet használjuk.
Az org.eclipse.team.core.repository kiterjesztési pont megad egy lerakatdefiníciót. Az alábbiakban látható a CVS ügyfél leírónyelve.
<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>
Ez bejegyzi a csapatszolgáltatót a csapattámogatás-bedolgozóval és hozzárendel egy azonosítót, amelyet akkor kell használni, ha a szolgáltató egy projekthez van társítva. A lerakathoz megadott osztálynak ki kell terjesztenie a RepositoryProvidert.
A kiterjesztésben azonosított osztálynak a RepositoryProvider alosztályának kell lennie. Ennek elsődleges felelőssége a projekt konfigurálása a lerakattámogatáshoz és ezen konfiguráció megszüntetése, valamint a szükséges erőforrásmódosítási csatlakozópontok biztosítása. A CVS ügyfél jó példaként szolgál. Ennek lerakatszolgáltatója a CVSTeamProvider.
public class CVSTeamProvider extends RepositoryProvider {
...
A RepositoryProvider két absztrakt metódust ad meg, a configureProject és deconfigure metódust. Minden szolgáltatónak meg kell valósítani ezeket a metódusokat.
A projekt akkor kerül beállításra, amikor először társításra kerül egy adott lerakatszolgáltatóval. Ez jellemzően akkor történik, ha a felhasználó kiválaszt egy projektet, és a csapatvarázslók segítségével projekthez egy lerakatot társít. A művelet aktiválási módjától függetlenül ez a megfelelő időpont a projekttel kapcsolatos adatok feldolgozására és ideiglenes tárolására, amelyeket a lerakatfunkcióhoz biztosítani kell. (Tételezzük fel, hogy a projekt szolgáltatóra leképezése már megtörtént. Ezzel a konfigurációs varázslóban foglalkozunk.)
A CVS szolgáltató üzenetszórással elküldi azt a tényt, hogy a projekt beállításra kerül:
public void configureProject() throws CoreException {
CVSProviderPlugin.broadcastProjectConfigured(getProject());
}
Nem követjük a bedolgozó üzenetszórási mechanizmus megvalósítását. Elég annyi, hogy a részek, amelyeknek fel kell dolgozniuk vagy inicializálniuk kell a projektspecifikus adatokat, ezt ebben az időpontban megtehetik.
A projekt megszűntetésre kerül, ha a felhasználó a továbbiakban nem kívánja a csapatszolgáltatót a projektet társítani. A bedolgozó feladata a felhasználói tevékenység megvalósítása, amelynek hatására ez megtörténik (a projekt és csapatszolgáltató leképezésének megszüntetése is itt történik). A megszűntetés metódus a megfelelő időpont a projekttel kapcsolatos gyorsítótárak törlésére vagy a projekthivatkozások eltávolítására az UI-ban. A CVS szolgáltató kiüríti a nézetekben tárolt projekthez kapcsolódó gyorsítótárakat és üzenetszórással elküldi a tényt, hogy a projekt megszűnt.
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());
}
}
A csapat UI összeépítésének első lépése jellemzően a varázslóoldal megvalósítása, amelynek segítségével a felhasználók beállíthatnak egy projektet a bedolgozó csapattámogatásához. A csapatszolgáltató azonosítója itt adódik hozzá a projekt tulajdonságaihoz. Az org.eclipse.team.ui.configurationWizards kiterjesztési pont kiegészítésével Ön is részt vesz a projektkonfigurációban. Ez a varázsló akkor jelenik meg, amikor a felhasználó kiválasztja a Csapat->Projektmegosztás ... lehetőséget.
Ezt a CVS ügyfél megvalósítás kontextusában nézzük meg. Az alábbiakban található a konfigurációs varázsló CVS UI leírónyelve:
<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>
A bedolgozók általában biztosítanak egy osztályt, amely megvalósítja a kiterjesztést és egy egyedi azonosítót a kiterjesztések azonosításához. Ha több szolgáltató közül lehet választani, akkor a név és ikon megjelenik a projekt konfigurációs varázsló első oldalán.
Ha a felhasználó kiválasztott egy szolgáltatót, akkor a következő oldal megjeleníti a szolgáló-specifikus konfigurációs információkat. (Ha a szolgáltató az egyetlen telepített csapatszolgáltató-bedolgozó, akkor a varázsló közvetlenül a saját oldalra ugrik.) A varázslónak meg kell valósítani egy IConfigurationWizard, elemet, amely inicializálja a varázslót a megadott munkaterülethez és projekthez. A megvalósítás hátralevő része a varázsló kivitelétől függ. Össze kell gyűjteni a projekt csapattámogatáshoz társításához szükséges információkat.
Ha a varázsló befejezte a működését, akkor a RepositoryProvider.map(IProject, String) segítségével le kell képezni a csapatszolgáltatót a projektre. A leképezés kezeli a megfelelő projekt állandó tulajdonság és a projekt társítását.
A CVS ügyfél ezt a szolgáltató setSharing metódusában végzi el ezt, amely a varázsló befejezésekor kerül meghívásra:
public void setSharing(IProject project, FolderSyncInfo info, IProgressMonitor monitor) throws TeamException {
// Ellenőrizze, hogy a biztosított információk megfelelnek-e a projektnek
...
// Ellenőrizze, hogy a biztosított hely felügyelve van-e
...
// Regisztrálja a projektet a csapattal
RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
}
A RepositoryProvider statikus metódusai leegyszerűsítik az ügyfelek számára a projektek leképezését a szolgáltatókra és az adott projekthez társított szolgáltatók megkeresését.
Ha a termék hozzáad egy Lerakatbedolgozót egy képességhez, akkor ennek hozzá kell kötnie a képességet a lerakatazonosítóhoz. A RepositoryProvider képességként engedélyezéséhez az alábbi két lépést kell végrehajtani:
<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>
A Csapatbedolgozók két képességaktiválási pontot adnak meg. Az első a Csapat > Projektmegosztás... varázsló, amely lehetővé teszi a lerakatszolgáltatók szűrését a munkaterület-képességek engedélyezett/letiltott állapota alapján, a másik pedig a Csapat bedolgozó automatikus engedélyezési aktiváló.
A lerakatszolgáltatóhoz rendelt érdekes funkciók nagy része akkor történik, ha a felhasználó a szolgáltatóhoz beállított projektben lévő erőforrásokat használja. Annak érdekében, hogy tudjon a felhasználó által végzett erőforrás-módosításokról, a szolgáltató erőforrás-módosítási csatlakozópontokat valósíthat meg. Az erőforrások bedolgozó ezeket a csatlakozópontokat kiterjesztési pontokként biztosítja. Az IMoveDeleteHook, IFileModificationValidator és ResourceRuleFactory dokumentációja a csatlakozópontok megvalósításának részleteit írja le.
A csapatbedolgozó optimalizálja és egyszerűsíti a csatlakozópontok megfelelő erőforrásokkal társítását az általános csatlakozópontok erőforrások bedolgozóhoz bejegyzésével. Ezek az általános csatlakozópontok egyszerűen megkeresik a lerakatszolgáltatót egy adott erőforráshoz, és lekérik a csatlakozópontjait. Ennek meg van az az előnye, hogy csak egy szolgáltató-csatlakozópontot hív meg ahelyett, hogy minden szolgáltatómegvalósítás bejegyezne egy csatlakozópontot, amelynek először ellenőriznie kell, hogy az erőforrást a szolgáltató kezeli-e.
Ez azt jelenti, hogy a bedolgozó a RepositoryProvider metódusainak újradefiniálásával biztosítja a szükséges csatlakozópontokat. Ezen metódusok alapértelmezett megvalósítása nullát ad vissza jelezve, hogy nincs szükség csatlakozópontra (az erőforrásszabály-gyár kivételével, ahogy ez az alább le van írva):