Resourcewijzigingsingangen

Tot nu toe hebben we aangenomen dat de resource-API wordt gebruikt om resources te wijzigen die zich in het bestandssysteem van de gebruiker bevinden.  Dit is inderdaad de fundamentele structuur van het werkgebied, maar het is ook mogelijk dat een plugin voorzieningen toevoegt voor het bewerken van resources die ergens anders worden beheerd.  De platformplugins met teamondersteuning voegen bijvoorbeeld de mogelijkheid toe om te werken met resources die onder beheer van een versierepository staan.

De resource-API biedt ook voorzieningen die specifiek zijn toegevoegd om teamondersteuningsplugins in te schakelen en plugins die repositoryproviders kunnen implementeren dankzij de teamondersteuning.  De volgende bespreking gaat over het generieke mechanisme voor het registreren van resource-ingangen.  Zie Een repositoryprovider implementeren voor een bespreking van de manier waarop een team met deze ingangen werkt.   

Ingangen voor het verplaatsen/wissen van resources

Dankzij deze ingang kunnen de teamplugin en de providers bepalen hoe het verplaatsen en wissen van resources wordt geïmplementeerd.  De ingang biedt ook de mogelijkheid om deze bewerkingen te voorkomen.Implementors kunnen andere implementaties bieden voor het verplaatsen of wissen van mappen, bestanden en projecten.  

De teamplugin gebruikt het extensiepunt org.eclipse.core.resources.moveDeleteHook om de ingang te registreren:

<extension point="org.eclipse.core.resources.moveDeleteHook" id="MoveDeleteHook">
	<moveDeleteHook class="org.eclipse.team.internal.core.MoveDeleteManager"/>
    </extension>

De aangeleverde klasse moet IMoveDeleteHook implementeren, die door het platform wordt aangeroepen als een resource wordt verplaatst of gewist.  De teamplugin installeert een ingangsmanager voor verplaatsen en wissen die kan vaststellen welke teamprovider een resource beheert en de specifieke ingang kan aanroepen.

Validatie voor bestandswijziging

Het is ook mogelijk dat teamrepositoryproviders moeten ingrijpen in het bewerken of opslaan van een bestand.  De teamplugin doet dit door met het extensiepunt org.eclipse.core.resources.fileModificationValidator een validatieproces te registreren. Deze wordt aangeroepen als een resource gewijzigd moet worden.

<extension point="org.eclipse.core.resources.fileModificationValidator" id="FileValidator">
	<fileModificationValidator class="org.eclipse.team.internal.core.FileModificationValidatorManager"/>
    </extension>

De aangeleverde klasse moet IFileModificationValidator implementeren, die door het platform wordt aangeroepen als een resource wordt geopend of opgeslagen.   De teamplugin installeert een bestandswijzigingsmanager die kan vaststellen welke teamprovider een resource beheert en de specifieke validatie kan aanroepen.

Algemene teamingang

Repositoryproviders hebben soms een ingang naar aanvullende werkgebiedbewerkingen nodig om extra beperkingen op te leggen of het gedrag van het werkgebied aan te passen. Het extensiepunt org.eclipse.core.resources.teamHook biedt een aantal andere speciale functies voor teamproviders. Deze ingang biedt met name de mogelijkheid voor een teamprovider om te bepalen of gekoppelde mappen en bestanden in een bestaand project moeten worden toegestaan. Sommige repositorysystemen hebben strenge regels over de fysieke opbouw van projecten op schijf en kunnen geen resources afhandelen die zijn gekoppeld aan willekeurige andere locaties.

Met de teamingang kan een repositoryprovider ook een planningsregelfactory leveren die wordt gebruikt door alle werkgebiedbewerkingen. Telkens als een API-methode wordt aangeroepen die het werkgebied op een of andere manier wijzigt, haalt het werkgebied een planningsregel op. Deze planningsregel voorkomt dat andere threads resources wijzigen tijdens het aanroepen van de API-methode. Als een repositoryprovider aanvullend werk doet in een bestandswijzigingsvalidatie of verplaats/wisingang, moet de provider het werkgebied ook duidelijk maken welke aanvullende planningsregels nodig zijn. Zie de sectie over batchverwerking van resources voor meer informatie over het werken met planningsregels voor het werkgebied.

De aangeleverde klasse voor de teamingang moet TeamHook implementeren. De teamplugin installeert een enkele teamingang die kan vaststellen welke teamprovider een resource beheert en de specifieke ingang kan aanroepen.

Opmerking:  Alle drie de teamingangen zijn specifiek ontworpen voor gebruik door de teamcoreplugin.  Ze zijn niet bedoeld voor algemeen gebruik. Teamproviders mogen geen ingangen met deze extensiepunten installeren, maar moeten ingangen implementeren in hun repositoryproviderklasse.   Zie Resourcewijzigingsingangen voor teams voor meer informatie over het gebruik van deze ingangen.