A classe identificada na extensão deve ser uma classe filha de RepositoryProvider. Suas principais responsabilidades são configurar e desconfigurar um projeto para suporte ao repositório e fornecer os ganchos de modificação de recursos necessários. O cliente CVS serve como um bom exemplo. Seu provedor de repositório é CVSTeamProvider.
public class CVSTeamProvider extends RepositoryProvider { ...
RepositoryProvider define dois métodos abstratos, configureProject e deconfigure. Todos os provedores devem implementar esses métodos.
Um projeto é configurado no momento da sua associação a um provedor de repositório específico. Isso normalmente acontece quando o usuário seleciona um projeto e utiliza os assistentes de equipe para associar um projeto a seu repositório. Independentemente de como a operação é acionada, esse é o momento apropriado para calcular ou armazenar em cache quaisquer dados sobre o projeto que serão necessários para fornecer sua função de repositório. (Assuma que o mapeamento do projeto para seu provedor já tenha acontecido. Você tratará disso no seu assistente de configuração.)
O provedor do CVS simplesmente divulga o fato de um projeto ter sido configurado:
public void configureProject() throws CoreException { CVSProviderPlugin.broadcastProjectConfigured(getProject()); }
Não seguimos a implementação do mecanismo de difusão do plug-in. Basta dizer que as partes que precisam calcular ou inicializar dados específicos do projeto podem fazer isso agora.
Um projeto é desconfigurado quando o usuário não deseja mais associar um provedor de equipe a um projeto. Cabe ao plug-in implementar a ação do usuário que faz com que isso aconteça (e a retirada do mapeamento do projeto a partir do provedor de equipe acontecerá aí). O método deconfigure é a hora apropriada para excluir os caches relacionados ao projeto ou remover as referências ao projeto na UI. O provedor do CVS esvazia os caches relacionados ao projeto mantidos em suas exibições e faz a difusão do fato de que o projeto foi desconfigurado.
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()); } }