Projektnaturer

org.eclipse.core.resources.natures

Arbejdsområdet understøtter idéen om projektnaturer (også kaldet "naturer"). En natur tilknytter livscyklusfunktionsmåder til et projekt. Naturer installeres på projektbasis vha. den setDescription-metode, der defineres på org.eclipse.core.resources.IProject. De konfigureres, når de føjes til et projekt, og dekonfigureres, når de fjernes fra projektet. Java-naturen kan f.eks. installere et Java-byggeprogram og foretage anden projektkonfiguration, hvis den tilføjes til et projekt.

Naturens udvidelsespunkt gør det muligt for naturers skrivefunktioner at registrere deres naturimplementering under et symbolsk navn, som så bruges inde fra arbejdsområdet til at finde og konfigurere naturer. Det symbolske navn er id'en for naturudvidelsen. Når brugerne definerer en naturudvidelse, opfordres brugerne til at inkludere en værdi, der kan læses af mennesker, for den "name"-attribut, der identificerer meningen, og som brugerne eventuelt får vist.

Naturer kan angive relationsbetingelser i forhold til andre naturer. Betingelsen "one-of-nature" angiver, at højst én natur, der tilhører et bestemt sæt, kan eksistere på et projekt på et givent tidspunkt. Det gennemtvinger en gensidig udelukkelse af naturer, som ikke er kompatible med hinanden. Betingelsen "requires-nature" angiver en afhængighed af en anden natur. Når en natur tilføjes til et projekt, skal alle påkrævede naturer også tilføjes. Det garanteres, at naturerne bliver konfigureret og afkonfigureret på en sådan måde, at de påkrævede naturer altid konfigureres før dem og afkonfigureres efter dem. Det er grunden til, at cykliske afhængigheder mellem naturer ikke er tilladt.

Naturer kan ikke tilføjes til eller fjernes fra et projekt, hvis ændringen ville medføre overtrædelse af betingelser, som tidligere er blevet overholdt. Hvis en natur konfigureres på et projekt, men senere opdager, at dens betingelser ikke overholdes, markeres den natur og alle naturer, som kræver den, som deaktiveret, men de forbliver på projektet. Det kan f.eks. være tilfældet, hvis en påkrævet natur pludselig mangler i installationen. Naturer, der mangler i installationen, og naturer, som er involveret i afhængighedscykler, markeres også som deaktiveret.

Naturer kan også angive, hvilke eventuelle trinvise projektbyggeprogrammer de har konfigureret. Med disse oplysninger sikrer arbejdsområdet, at byggeprogrammer kun udføres, når den tilsvarende natur er til stede og aktiveret på det projekt, der bliver bygget. Hvis en natur fjernes fra et projekt, men det ikke lykkes for naturens afkonfigurationsmetode at fjerne de tilhørende byggeprogrammer, fjerner arbejdsområdet automatisk disse byggeprogrammer fra specifikationen. To naturer må ikke angive det samme trinvise projektbyggeprogram i koden.

Naturer har også mulighed for ikke at tillade oprettelse af sammenkædede ressourcer på projekter, de er tilknyttet. Ved at angive allowLinking-attributten til "false" kan en natur erklære, at sammenkædede ressourcer aldrig skal oprettes. Denne funktion er ny i version 2.1.

Fra version 3.1 kan naturer erklære et tilhørsforhold til vilkårlige indholdstyper, hvilket påvirker den måde, indholdstyper fastlægges på i forbindelse med filer i arbejdsområdet. I tilfælde af konflikt (to eller flere indholdstyper er lige velegnede for en given fil), vælges den indholdstype, der har et tilhørsforhold til en af de naturer, der er konfigureret for det tilsvarende projekt.

<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>

<!ATTLIST-udvidelse

point CDATA #REQUIRED

id    CDATA #REQUIRED

navn  CDATA #IMPLIED>


<!ELEMENT runtime (run)>



<!ELEMENT run (parameter*)>

<!ATTLIST run

class CDATA #REQUIRED>


<!ELEMENT parameter EMPTY>

<!ATTLIST parameter

name  CDATA #REQUIRED

value CDATA #REQUIRED>


<!ELEMENT one-of-nature EMPTY>

<!ATTLIST one-of-nature

id CDATA #REQUIRED>


<!ELEMENT requires-nature EMPTY>

<!ATTLIST requires-nature

id CDATA #REQUIRED>


<!ELEMENT builder EMPTY>

<!ATTLIST builder

id CDATA #REQUIRED>


<!ELEMENT options EMPTY>

<!ATTLIST options

allowLinking (true | false) >


<!ELEMENT content-type EMPTY>

<!ATTLIST content-type

id CDATA #REQUIRED>


Følgende er et eksempel på tre naturkonfigurationer. waterNature og fireNature tilhører samme gensidigt udelukkende sæt, så de kan ikke eksistere side om side på samme projekt. snowNature kræver waterNature, så snowNature deaktiveres på et projekt, som mangler waterNature. Der følger heraf, at snowNature ikke kan aktiveres på et projekt med fireNature. fireNature tillader heller ikke, at der oprettes linkede ressourcer.

 
   

<extension id=

"fireNature"

name=

"Fire Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Fire"

/>

</runtime>

<one-of-nature id=

"com.xyz.stateSet"

/>

<options allowLinking=

"false"

/>

</extension>

<extension id=

"waterNature"

name=

"Water Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Water"

/>

</runtime>

<one-of-nature id=

"com.xyz.stateSet"

/>

</extension>

<extension id=

"snowNature"

name=

"Snow Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Snow"

>

<parameter name=

"installBuilder"

value=

"true"

/>

</run>

</runtime>

<requires-nature id=

"com.xyz.coolplugin.waterNature"

/>

<builder id=

"com.xyz.snowMaker"

/>

</extension>

Hvis disse udvidelser blev defineret i en plugin med id'en "com.xyz.coolplugin", ville disse naturers fuldstændige navn være "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" og "com.xyz.coolplugin.snowNature".

Klasseattributtens værdi skal repræsentere en implementering af org.eclipse.core.resources.IProjectNature. Naturdefinitioner kan undersøges vha. grænsefladen org.eclipse.core.resources.IProjectNatureDescriptor. Deskriptorobjekter kan hentes vha. metoderne getNatureDescriptor(String) og getNatureDescriptors()org.eclipse.core.resources.IWorkspace.

Platformen selv har ingen foruddefinerede naturer. Visse produktinstallationer kan inkludere naturer efter behov.