A classe identificada na extensão deve ser uma subclasse 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 quando é primeiramente associado a um determinado provedor de repositório. Isso normalmente acontece quando o usuário seleciona um projeto e utiliza os assistentes de equipe para associar um projeto ao repositório. Independente de como a operação é disparada, esta é a hora apropriada de calcular ou armazenar em cache os dados sobre o projeto ao qual será necessário fornecer a função de repositório. (Suponha que o mapeamento do projeto para o provedor já tenha acontecido. Isso estará sendo tratado no 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 divulgação do plug-in. O suficiente para 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 o não mapeamento do projeto a partir do provedor de equipe acontecerá aí). O método deconfigure é a hora apropriada para excluir as caches relacionadas ao projeto ou remover as referências ao projeto na UI. O provedor do CVS esvazia as caches relacionadas ao projeto mantidas em suas exibições e divulga o 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()); } }