Naturezas do Projeto

As naturezas do projeto permitem que um plug-in marque um projeto como um tipo específico de projeto. Por exemplo, o JDT (Ferramentas de Desenvolvimento Java) utiliza uma "Natureza Java" para incluir comportamento Java específico nos projetos.  As naturezas dos projetos são definidas por plug-ins e são normalmente incluídas ou removidas de acordo com o projeto quando o usuário executa alguma ação definida pelo plug-in.

Um projeto pode ter mais de uma natureza.  Entretanto, quando você define uma natureza de projeto, é possível definir limitações especiais para ela:

Para implementar uma natureza própria, você precisa definir uma extensão e fornecer uma classe que implemente IProjectNature.

Definindo uma natureza

O ponto de extensão org.eclipse.core.resources.natures é utilizado para incluir uma definição de natureza do projeto. A marcação a seguir inclui uma natureza para o plug-in hipotético com.example.natures.

   <extension
      point="org.eclipse.core.resources.natures"
      id="myNature"
      name="Minha Natureza">
      <runtime>
         <run class="com.example.natures.MyNature">
         </run>
      </runtime>
   </extension>

A classe identificada na extensão deve implementar IProjectNature da interface da plataforma. Essa classe implementa o comportamento específico do plug-in para associação de informações específicas da natureza com um projeto, quando a natureza está configurada.

   public class MyNature implements IProjectNature {

      private IProject project;

      public void configure() throws CoreException {
         // Incluir informações específicas da natureza
         // do projeto, como a inclusão de um construtor
         // na especificação de construção de um projeto.
      }
      public void deconfigure() throws CoreException {
         // Remover as informações específicas da natureza aqui.
      }
      public IProject getProject() {
         return project;
      }
      public void setProject(IProject value) {
         project = value;
      }
   }

Os métodos configure() e deconfigure() são enviados pela plataforma quando são incluídas e removidas naturezas de um projeto.  Você pode implementar o método configure() para incluir um construtor a um projeto, conforme discutido em Construtores.

Associando a natureza a um projeto

Definir a natureza não é o suficiente para associá-la a um projeto.  Você deve atribuir uma natureza a um projeto atualizando a descrição do projeto para incluir sua natureza.  Isso geralmente acontece quando o usuário cria um novo projeto com um assistente especializado para novo projeto que atribui a natureza.  O trecho a seguir mostra como atribuir nossa nova natureza a um determinado projeto.

   try {
      IProjectDescription description = project.getDescription();
      String[] natures = description.getNatureIds();
      String[] newNatures = new String[natures.length + 1];
      System.arraycopy(natures, 0, newNatures, 0, natures.length);
      newNatures[natures.length] = "com.example.natures.myNature";
      description.setNatureIds(newNatures);
      project.setDescription(description, null);
   } catch (CoreException e) {
      // Algo deu errado
   }

As naturezas não são realmente atribuídas (e configuradas) ao projeto até que você defina a descrição do projeto no projeto.  Observe também que o identificador utilizado para a natureza é o nome completo (id do plug-in + id da extensão) da extensão da natureza.

Se a natureza tiver sido definida com limitações, a API da área de trabalho poderá ser utilizada para validar a nova natureza.  Por exemplo, suponha que uma natureza seja definida com um pré-requisito:

   <extension
      point="org.eclipse.core.resources.natures"
      id="myOtherNature"
      name="Minha Outra Natureza">
      <runtime>
         <run class="com.example.natures.MyOtherNature">
         </run>
      </runtime>
   <requires-nature id="com.example.natures.myNature"/>
   </extension>

A nova natureza não será válida a não ser que exista a primeira natureza do projeto.  Dependendo do design do plug-in, você pode verificar se a natureza de pré-requisito foi instalada ou pode incluí-la você mesmo.  De qualquer maneira, é possível verificar a validade das combinações de naturezas de projeto sugeridas utilizando a API da área de trabalho.

   try {
      IProjectDescription description = project.getDescription();
      String[] natures = description.getNatureIds();
      String[] newNatures = new String[natures.length + 1];
      System.arraycopy(natures, 0, newNatures, 0, natures.length);
      newNatures[natures.length] = "com.example.natures.myOtherNature";
      IStatus status = workspace.validateNatureSet(natures);

      // verificar o status e decidir o que fazer
      if (status.getCode() == IStatus.OK) {
      	description.setNatureIds(newNatures);
      	project.setDescription(description, null);
      } else {
      	// surgiu um erro do usuário
	...
      }
   } catch (CoreException e) {
      // Algo deu errado
   }

Descritores da Natureza

Além de trabalhar com naturezas pelo id, é possível obter o descritor (IProjectNatureDescriptor) que descreve uma natureza, suas limitações e seu rótulo.  Você pode consultar em uma determinada natureza o seu descritor ou obter descritores da área de trabalho.  O trecho a seguir obtém o descritor de natureza do projeto da nossa nova natureza:

      IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");

Também é possível obter uma matriz de descritores para todas as naturezas instaladas:

      IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();

 

Copyright IBM Corp. e outros 2000,2002.