Prosjektnaturer

Med prosjektnaturer kan plugin-moduler merke et prosjekt som en bestemt type prosjekt. For eksempel bruker JDT (Java Development Tools) en "Java-natur" når det skal legges til Java-spesifikk funksjonalitet i prosjektene. Prosjektnaturer defineres av plugin-moduler. De legges vanligvis til eller fjernes for ett og ett prosjekt, når brukeren utfører handlinger som er definert av plugin-modulen.

Et prosjekt kan ha mer enn en natur. Når du definerer en prosjektnatur, kan du imidlertid definere bestemte begrensninger for naturen:

Hvis du vil implementere din egen natur, må du definere en utvidelse og oppgi en klasse som implementerer IProjectNature.

Definere en natur

Utvidelsespunktet org.eclipse.core.resources.natures brukes for å legge til en prosjektnaturdefinisjon. Følgende kodetype legger til en natur for den hypotetiske plugin-modulen 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>

Klassen som er angitt i utvidelsen, må implementere plattformgrensesnittet IProjectNature. Denne klassen implementerer plugin-spesifikk funksjonalitet for tilknytning av naturspesifikk informasjon med et prosjekt, når naturen konfigureres.

   public class MyNature implements IProjectNature {

      private IProject project;

      public void configure() throws CoreException {
         // Add nature-specific information
         // for the project, such as adding a builder
         // to a project's build spec.
      }
      public void deconfigure() throws CoreException {
         // Remove the nature-specific information here.
      }
      public IProject getProject() {
         return project;
      }
      public void setProject(IProject value) {
         project = value;
      }
   }

Plattformen bruker metodene configure() og deconfigure() når naturene legges til og fjernes fra et prosjekt. Du kan implementere metoden configure() slik at det legges til en bygger i et prosjekt. Se beskrivelsen i emnet om byggere.

Knytte en natur til et prosjekt

Det er ikke nok å definere en natur når du skal knytte den til et prosjekt. Du må tildele en natur til et prosjekt ved å oppdatere prosjektbeskrivelsen slik at den inkluderer naturen. Dette skjer vanligvis når brukeren oppretter et nytt prosjekt med en spesialisert ny prosjektveiviser som tildeler naturen. Følgende snutt viser hvordan du tildeler den nye naturen til et gitt prosjekt.

  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) {
      // Something went wrong
   }

MERK: Natur-IDen er en fullt kvalifisert ID for naturutvidelsen. Den fullt kvalifiserte IDen for en utvidelse opprettes ved å kombinere plugin-modulens ID med den enkle utvidelse-IDen i filen plugin.xml. For eksempel får en natur med den enkle utvidelse-IDen "mynature" i plugin-modulen "com.example.natures", navnet "com.example.natures.mynature".

I praksis tildeles ikke naturene til (eller konfigureres for) prosjektet før du definerer prosjektbeskrivelsen i prosjektet. Merk også at IDen som brukes for naturen, er det fullt kvalifiserte navnet (plugin-ID + utvidelse-ID) på naturutvidelsen.

Hvis det er definert begrensninger for naturen, kan programmeringsgrensesnittet for arbeidsområdet brukes til å validere den nye naturen. Det kan for eksempel tenkes at naturen er definert med en forutsetning:

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

Den nye naturen er ikke gyldig med mindre den første naturen finnes for prosjektet.  Avhengig av utformingen av plugin-modulen, kan du kontrollere om det er installert en forutsetningsnatur eller du kan legge til en slik natur selv. Du kan uansett kontrollere om de foreslåtte kombinasjonene av prosjektnaturene er gyldige, ved hjelp av programmeringsgrensesnittet for arbeidsområdet.

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

      // check the status and decide what to do
      if (status.getCode() == IStatus.OK) {
      	description.setNatureIds(newNatures);
      	project.setDescription(description, null);
        } else {
      	// raise a user error
	...
      }
  } catch (CoreException e) {
      // Something went wrong
   }

Naturdeskriptorer

I tillegg til å arbeide med naturer ved hjelp av IDer, kan du hente deskriptoren (IProjectNatureDescriptor), som beskriver en natur og naturens begrensninger og etikett. Du kan utføre en spørring etter en deskriptor for en bestemt natur eller hente deskriptorer fra arbeidsområdet. Følgende snutt henter prosjektnaturdeskriptoren for den nye naturen:

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

Du kan også hente en matrise over deskriptorer for alle installerte naturer:

      IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();