Projectsoorten

Met projectsoorten kan een plugin aangeven dat een project tot een bepaald type projecten behoort. De JDT gebruikt bijvoorbeeld een "Java nature" om Java-specifiek gedrag aan projecten toe te voegen.  Projecsoorten worden door plugins gedefinieerd en worden meestal per project toegevoegd of verwijderd als de gebruiker een actie uitvoert die in de plugin is gedefinieerd.

Een project kan meer dan één soort hebben. Als u een projectsoort definieert, kunt u echter speciale voorwaarden voor de soort definiëren:

Om uw eigen soort te implementeren, moet u een extensie definiëren en een klasse aanleveren die IProjectNature implementeert.

Een soort definiëren

Het extensiepunt org.eclipse.core.resources.natures wordt gebruikt voor het toevoegen van een projectsoortdefinitie. In de volgende markup wordt een soort toegevoegd voor de hypothetische plugin com.example.natures plug-in.

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

De klasse die in de extensie wordt geïdentificeerd, moet de platforminterface IProjectNature implementeren. Deze klasse implementeert pluginspecifiek gedrag voor het koppelen van soortspecifieke informatie aan een project als de soort is geconfigureerd.

   public class MyNature implements IProjectNature {

      private IProject project;

      public void configure() throws CoreException {
         // soortspecifieke informatie toevoegen
         // voor het project, bijvoorbeeld een builder toevoegen
         // aan de bouwspecificaties van het project.
      }
      public void deconfigure() throws CoreException {
         // soortspecifieke informatie hier verwijderen.
      }
      public IProject getProject() {
         return project;
      }
      public void setProject(IProject value) {
         project = value;
      }
   }

De methoden configure() en deconfigure() worden door het platform verzonden als soorten worden toegevoegd of verwijderd uit een project. U kunt de methode configure() implementeren om een builder aan een project toe te voegen, zoals besproken is in het onderwerp Builders.

Een soort aan een project koppelen

Het definiëren van de soort is niet voldoende om deze aan een project te koppelen. U moet een soort toewijzen aan een project door de beschrijving van het project zo bij te werken dat deze de soort bevat. Dit gebeurt meestal als de gebruiker een nieuw project maakt met een speciale wizard die de soort toewijst. In het volgende codefragment ziet u hoe u een nieuwe soort toewijst aan een bepaald project.

  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) {
      // er is iets fout gegaan
   }

Opmerking: Het ID van de soort is het volledig gekwalificeerde ID van de soortextensie. Het volledig gekwalificeerde ID van een extensie wordt gemaakt door het plugin-ID te combineren met het enkelvoudige extensie-ID in het bestand plugin.xml. Een soort met het eenvoudige extensie-ID "mynature" in de plugin "com.example.natures" krijgt de naam "com.example.natures.mynature"

De soorten worden pas aan het project toegewezen (en ervoor geconfigureerd) als u de projectbeschrijving in het project instelt. Let er ook op dat het ID van de soort de volledig gekwalificeerde naam (plugin-ID + extensie-ID) van de soortextensie is.

Als de soort is gedefinieerd met voorwaarden, kan de werkgebied-API worden gebruikt om de nieuwe soort te valideren. Stel bijvoorbeeld dat een soort is gedefinieerd met een vereiste:

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

De nieuwe soort is alleen geldig als de eerste soort voor het project bestaat. Afhankelijk van het ontwerp van de plugin kunt u controleren of de vereiste soort is geïnstalleerd of u kunt de vereiste soort zelf installeren. In beide gevallen kunt u met de werkgebied-API de geldigheid controleren van voorgestelde combinaties van projectsoorten.

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

      // versie controleren en besluit nemen
      if (status.getCode() == IStatus.OK) {
      	description.setNatureIds(newNatures);
      	project.setDescription(description, null);
        } else {
      	// gebruikersfout genereren
	...
      }
  } catch (CoreException e) {
      // er is iets fout gegaan
   }

Soortdescriptors

Naast het werken met soorten per ID kun u de descriptor IProjectNatureDescriptor gebruiken. Deze beschrijft een soort, de voorwaarden en beperkingen en het label. U kunt in een soort een query naar een bepaalde descriptor uitvoeren of descriptors ophalen uit het werkgebied. In het volgende fragment wordt een projectsoortdescriptor voor een nieuwe soort opgehaald:

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

U kunt ook een array descriptors voor alle geïnstalleerde soorten ophalen:

      IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();