Natures du projet

Les natures du projet permettent à un plug-in de marquer un projet en tant que type spécifique de projet. Par exemple, les outils de développement Java (JDT) utilisent une "nature Java" pour ajouter un comportement spécifique à Java aux projets. Les natures de projets sont définies par des plug-ins et généralement ajoutées ou supprimées par projet lorsque l'utilisateur effectue une action déterminée par le plug-in.

Un projet peut posséder plusieurs natures. Toutefois, lorsque vous définissez la nature d'un projet, vous pouvez préciser des contraintes particulières :

Pour implémenter votre propre nature, vous devez définir une extension et fournir une classe qui implémente IProjectNature.

Définition d'une nature

Le point d'extension org.eclipse.core.resources.natures est utilisé pour ajouter une définition de nature de projet. Les marques ci-dessous ajoutent une nature au plug-in hypothétique com.example.natures.

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

La classe identifiée dans l'extension doit implémenter l'interface de la plateforme IProjectNature. Cette classe implémente un comportement spécifique du plug-in pour l'association d'informations spécifiques à la nature à un projet lorsque la nature est configurée.

   public class MyNature implements IProjectNature {

      private IProject project;

      public void configure() throws CoreException {
         // Ajoute des informations spécifique à la nature
         // pour le projet (par exemple, ajout d'un générateur
         // aux spécifications de construction d'un projet).
      }
      public void deconfigure() throws CoreException {
         // Supprime les informations spécifiques à la nature.
      }
      public IProject getProject() {
         return project;
      }
      public void setProject(IProject value) {
         project = value;
      }
   }

Les méthodes configure() et deconfigure() sont envoyées par la plateforme lorsque des natures sont ajoutées et supprimées d'un projet. Vous pouvez implémenter la méthode configure() pour ajouter un générateur à un projet comme expliqué à la section Générateurs.

Association de la nature à un projet

Il ne suffit pas de définir la nature pour l'associer à un projet. Vous devez assigner la nature à un projet en mettant à jour la description de ce dernier pour inclure votre nature. Ce cas se produit en général lorsqu'un utilisateur crée un projet à l'aide d'un assistant affectant la nature. Le fragment de code suivant illustre comment assigner une nouvelle nature à un projet donné.

   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) {
      // Un incident a eu lieu.
   }

Les natures ne sont pas assignées (et configurées) tant que vous n'avez pas défini la description du projet. Par ailleurs, l'identificateur utilisé pour la nature est le nom qualifié complet (ID du plug-in + ID de l'extension) de l'extension de la nature.

Si la nature a été définie avec des contraintes, l'API de l'espace de travail peut être utilisée pour valider la nouvelle nature. Par exemple, imaginez qu'une nature soit définie avec une condition :

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

La nouvelle nature n'est pas valide si la première n'existe pas pour le projet. Selon la conception de votre plug-in, vous pouvez vérifier si la nature de la condition requise a été installée ou bon l'ajouter vous-même. Dans tous les cas, vous pouvez vérifier la validité des combinaisons de natures de projet à l'aide de l'API de l'espace de travail.

   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);

      // vérifie le statut et décider ce qu'il faut faire
      if (status.getCode() == IStatus.OK) {
      	description.setNatureIds(newNatures);
      	project.setDescription(description, null);
      } else {
      	// lance une erreur utilisateur
	...
      }
   } catch (CoreException e) {
      // Un incident a eu lieu.
   }

Descripteurs de natures

Outre la manipulation de natures à l'aide de leur ID, vous pouvez obtenir le descripteur (IProjectNatureDescriptor) décrivant une nature, ses contraintes et son intitulé. Vous pouvez interroger une nature déterminée pour connaître son descripteur ou extraire des descripteurs de l'espace de travail. Le fragment de code suivant extrait le descripteur de pour une nature du projet :

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

Vous pouvez également obtenir un ensemble de descripteurs pour des natures installées :

      IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();

 

Copyright IBM Corporation and others 2000, 2003.