Extension Points
A noção de
Extension Points sumariamente caracteriza-se pela implementação de interfaces. A diferença é que a definição das interfaces estão localizadas em
plugins do Eclipse e cada implementação da referida interface também consiste em um
plugin do Eclipse.
Implementação de Variações usando Extension Points
Para maiores detalhes acerca da criação de
extension points, consulte este
artigo e veja este
vídeo.
Vamos considerar o exemplo a seguir de extension point. No final desta página há uma explicação de como executar tal exemplo. A interface IValidator possui o método validate, assim sendo, cada extensão deve implementar tal método.
public interface IValidator {
boolean validate();
}
A classe a seguir mostra como carregar os as extensões (
plugins) do
extension point IValidator. Desta maneira, quando o Eclipse é executado, podemos chamar o método initValidators. Tal método força o Eclipse a procurar por todos os
plugins que implementam o
extension point da interface IValidator (neste caso, "com.qualityeclipse.favorites.validatorSet"). Ao encontrar um
plugin que implementa tal
extension point, objetos de classes que implementam a interface IValidator são guardados na lista validators.
public class Validators {
private List<IValidator> validators = new ArrayList<IValidator>();
public void initValidators() {
IExtensionPoint validatorsExtensionPoints = Platform
.getExtensionRegistry().getExtensionPoint(
"com.qualityeclipse.favorites.validatorSet");
IExtension[] extensions = validatorsExtensionPoints.getExtensions();
for (IExtension extension : extensions) {
IConfigurationElement[] configs = extension.getConfigurationElements();
for (IConfigurationElement element : configs) {
IValidator validator = null;
try {
validator = (IValidator) element.
createExecutableExtension("class");
validators.add(validator);
} catch (CoreException e) {
e.printStackTrace();
}
}
}
}
public void printValidators() {
for (IValidator validator : validators) {
System.out.println(validator.validate());
}
}
}
O código a seguir é uma implementação trivial de um possível IValidator. Note que, por ser uma extensão de um
extension point, esta classe está em um plugin específico. Desta maneira, se o
plugin for removido do Eclipse, ele não será carregado pelo Eclipse na classe acima. Entretanto, é importante salientar que o sistema continua funcionando corretamente, mas, obviamente, sem o IValidator em questão.
public class ValidatorTrue implements IValidator {
public boolean validate() {
System.out.println("Validator - True");
return true;
}
}
O exemplo detalhado acima está disponível como um projeto do eclipse
aqui e foi feito utilizando-se o Eclipse Europa 3.3. Para rodar o exemplo, abra-o no Eclipse, clique com o botão direito em cima do projeto "com.qualityeclipse.favorites", "Run as"..., "Eclipse Application". Após o clique, um outro Eclipse será aberto. Este novo Eclipse contém o
plugin e suas extensões que foram programados (implementados) no Eclipse original. Para ver o
plugin, clique em "Window", "Show View", "Other". Depois, procure por "Quality Eclipse" e abra a view "Favorites View". Ao abrí-la, vá para o Eclipse original e verifique o
console. Observe que as mensagens
Validator - True
true
Validator - False
false
vão aparecer, provando que o
plugin que estende o
extension point de IValidator (com.qualityeclipse.favorites.validators) foi executado corretamente.
--
MarcioRibeiro - 02 Sep 2008