Tags:
create new tag
, view all tags

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

Topic revision: r1 - 2008-09-02 - MarcioRibeiro
 
This site is powered by the TWiki collaboration platformCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback

mersin escort bayan adana escort bayan izmit escort ankara escort bursa escort