Prosjektnaturer

org.eclipse.core.resources.natures

Arbeidsområdet støtter begrepet prosjektnaturer (eller kortformen "naturer"). En natur knytter livssyklusvirkemåte til et prosjekt. Naturer installeres på prosjektbasis ved hjelp av setDescription-metoden som er definert for org.eclipse.core.resources.IProject. De konfigureres når de legges til et prosjekt, og dekonfigureres når de fjernes fra prosjektet. Java-naturen kan for eksempel installere en Java-bygger, og utføre en annen prosjektkonfigurasjon når den legges til i et prosjekt.

Med naturutvidelsespunktet kan naturforfattere registrere naturimplementeringen under et symbolsk navn som så brukes fra innsiden av arbeidsområdet til å finne og kjøre naturer. Det symbolske navnet er IDen for naturutvidelsen. Ved definering av en naturutvidelse, blir brukerne oppfordret til å inkludere en lesbar verdi for attributtet "name" som identifiserer betydningen, og som kan presenteres for brukerne.

Naturer kan oppgi relasjonsbegrensninger i forhold til andre naturer. Begrensningen "one-of-nature" oppgir at det maksimalt kan finnes en natur som tilhører et gitt sett i et prosjekt på et hvilket som helst tidspunkt. Dette fremtvinger gjensidig utelukking mellom naturer som ikke er kompatible med hverandre. Begrensningen "requires-nature" oppgir en avhengighet med en annen natur. Når en natur blir lagt til et i prosjekt, må alle nødvendige naturer også legges til. Naturene blir garantert konfigurert og dekonfigurert slik at de nødvendige naturene alltid blir konfigurert før dem og dekonfigurert etter dem. Av denne grunnen er det ikke tillatt med sykliske avhengigheter mellom naturer.

Naturer kan ikke legges til i eller fjernes fra et prosjekt hvis denne endringen ville bryte eventuelle begrensninger som tidligere ble oppfylt. Hvis det er konfigurert en natur for et prosjekt, men det senere blir oppdaget at begrensningene ikke er oppfylt, vil denne naturen og alle naturer som krever den, bli merket som deaktivert, men de forblir i prosjektet. Dette kan for eksempel skje når en nødvendig natur mangler i en installasjon. Naturer som mangler i installasjonen, og naturer som er involvert i avhengighetssykluser, merkes også som deaktivert.

Naturer kan også oppgi hvilke trinnvise prosjektbyggere som eventuelt er konfigurert av dem. Med denne informasjonen vil arbeidsområdet sikre at byggere bare vil kjøre når den tilsvarende naturen finnes og er aktivert for prosjektet som blir bygd. Hvis en natur fjernes fra et prosjekt, men naturens dekonfigureringsmetode ikke fjerner de tilsvarende byggerne, fjerner arbeidsområdet disse byggerne automatisk fra spesifikasjonen. Det er ikke tillatt for to naturer å oppgi samme trinnvise prosjektbygger i kodingen.

Naturer kan også forby opprettingen av linkede ressurser i prosjekter de er knyttet til. Ved å definere attributtet allowLinking til "false", kan en natur deklarere at det aldri skal opprettes linkede ressurser. Denne funksjonen er ny i utgave 2.1.

Fra og med utgave 3.1 kan naturer deklarere affinitet med tilfeldige innholdstyper, noe som påvirker hvordan innholdstyper blir fastsatt for filer i arbeidsområdet. I tilfeller med konflikter (to eller flere innholdstyper som synes like passende for en gitt fil), velges den innholdstypen som har affinitet med en hvilken som helst av naturene som er konfigurert for det tilsvarende prosjektet.

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

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #REQUIRED

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


Nedenfor finner du et eksempel på tre naturkonfigurasjoner. waterNature og fireNature tilhører det samme eksklusive settet, så de kan ikke finnes sammen i samme prosjekt. snowNature krever waterNature, så snowNature blir deaktivert i et prosjekt som mangler waterNature. Det følger naturlig at snowNature ikke kan aktiveres i et prosjekt med fireNature. fireNature tillater ikke oppretting av linkede ressurser.

 
   

<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 utvidelsene er definert i en plugin-modul med IDen "com.xyz.coolplugin", vil det fullt kvalifiserte navnet på disse naturene være "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" og "com.xyz.coolplugin.snowNature".

Verdien av class-attributtet må representere en implementerer av org.eclipse.core.resources.IProjectNature. Naturdefinisjoner kan undersøkes med grensesnittet org.eclipse.core.resources.IProjectNatureDescriptor. Det er mulig å innhente deskriptorobjekter ved å bruke metodene getNatureDescriptor(String) og getNatureDescriptors() i org.eclipse.core.resources.IWorkspace.

Selve plattformen har ikke noen forhåndsdefinerte naturer. Installasjoner av deltakerprodukter kan omfatte naturer etter behov.