Projektin luonteet

org.eclipse.core.resources.natures

Työtila tukee projektien luonteita. Luonteiden avulla projekteihin voidaan liittää elinkaaritapahtumia. Luonteet asennetaan projektikohtaisesti org.eclipse.core.resources.IProject-laajennuspisteeseen määritetyn setDescription-metodin avulla. Niiden kokoonpano määritetään, kun ne lisätään projektiin, ja niiden määritys poistetaan, kun ne poistetaan projektista. Esimerkiksi projektiin lisättävä Java-luonne voi asentaa Java-koontiohjelman ja tehdä muita projektimäärityksiä.

Luonteiden laajennuspisteen avulla luonteiden kirjoittajat voivat rekisteröidä luonteidensa toteutuksille symbolisia nimiä, joita voidaan käyttää työtilassa luonteiden hakuun ja määritykseen. Symbolinen nimi on luonnelaajennuksen tunnus. Luonnelaajennusten name-määritteelle kannattaa antaa arvo, sillä se kuvaa luonteen tarkoitusta ja se saatetaan näyttää käyttäjille.

Luonteissa voi olla muita luonteita koskevia suhderajoituksia. One-of-nature-rajoite määrittää, että projektissa voi olla käytössä samanaikaisesti vain yksi tiettyyn joukkoon kuuluva luonne. Tällä rajoitteella voidaan varmistaa, ettei projektissa käytetä luonteita, jotka eivät ole yhteensopivia keskenään. Requires-nature-rajoite määrittää, että luonne edellyttää jonkin toisen luonteen käyttöä. Jos tällainen luonne lisätään projektiin, myös kaikki kyseisen luonteen edellyttämät luonteet on lisättävä projektiin. Luonteet määritetään ja niiden määrityksen poistetaan niin, että edellytetyt luonteet määritetään ennen varsinaisia luonteita ja edellytettyjen luonteiden määritykset poistetaan varsinaisten luonteiden määritysten poiston jälkeen. Tämän takia luonteiden välille ei saa määrittää kehäviittauksia.

Luonteita ei voi lisätä projektiin tai poistaa siitä, jos tällainen toimi rikkoisi edellä kuvattuja rajoitteita. Jos havaitaan, että jonkin projektiin määritetyn luonteen rajoitteiden mukaiset vaatimukset eivät täyty, kyseinen luonne ja siitä riippuvaiset luonteet merkitään käytöstä poistetuiksi, mutta niitä ei poisteta projektista. Näin voi käydä esimerkiksi silloin, kun asennuksesta puuttuu jokin edellytetty luonne. Myös asennuksesta puuttuvat luonteet ja kehäviittauksissa osalliset luonteet merkitään käytöstä poistetuiksi.

Luonteet voivat lisäksi määrittää, mitä täydentäviä projektin koontitoimintoja luonteisiin on määritetty. Kun nämä tiedot välitetään työtilaan, työtila voi varmistaa, että koontitoimintoja ajetaan vain, jos niihin yhdistetty luonne on käytössä koottavassa projektissa. Jos luonne poistetaan projektista mutta luonteen määritysten poistometodi ei onnistu poistamaan vastaavia koontitoimintoja, työtila poistaa kyseiset koontitoiminnot määrityksistä automaattisesti. Luonteiden määrityksissä ei saa olla samoja täydentäviä projektin koontitoimintoja.

Luonteet voivat myös estää linkitettyjen projektien luonnin projekteihin, joihin luonteet on yhdistetty. Jos allowLinking-määritteen arvo on "false", linkitettyjä resursseja ei luoda koskaan luonteen mukaan. Tämä uusi ominaisuus lisättiin versioon 2.1.

Versiosta 3.1 alkaen luonteisiin voidaan määrittää sellaisia liitoksia pakollisiin sisältölajeihin, jotka määrittävät, miten tiedostojen sisältölaji selvitetään työtilassa. Ristiriitatilanteissa (jollekin tiedostolle on määritetty useita samanarvoisia sisältölajeja) käytetään sitä sisältölajia, joka on liitetty tiedostoa vastaavaan projektiin kuuluvaan luonteeseen.

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


Seuraavassa on esimerkit kolmen luonteen määrityksestä. WaterNature- ja fireNature-luonteet kuuluvat samaan luokkaan, joten ne eivät voi olla samassa projektissa. SnowNature-luonne edellyttää, että waterNature-luonne on käytössä, joten snowNature-luonne poistetaan käytöstä projekteissa, joissa ei ole waterNature-luonnetta. Näistä riippuvuuksista ja rajoitteista seuraa, että snowNature-luonne ei voi olla samassa projektissa kuin fireNature-luonne. Lisäksi fireNature-luonne ei salli linkitettyjen resurssien luontia.

 
   

<extension id=

"fireNature"

name=

"Tuliluonne"

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=

"Vesiluonne"

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=

"Lumiluonne"

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>

Jos nämä luonnelaajennukset lisättäisiin om.xyz.coolplugin-lisäosaan, näiden luonteiden tarkat nimet olisivat com.xyz.coolplugin.fireNature, com.xyz.coolplugin.waterNature ja com.xyz.coolplugin.snowNature.

Class-määritteen arvon on vastattava luokkaa, joka toteuttaa org.eclipse.core.resources.IProjectNature-liittymän. Luonnemärityksiä voi tutkia org.eclipse.core.resources.IProjectNatureDescriptor-liittymän avulla. Kuvausobjektit voi selvittää getNatureDescriptor(String)- ja getNatureDescriptors()-metodien avulla org.eclipse.core.resources.IWorkspace-liittymässä.

Varsinaiseen käyttöympäristöön ei ole määritetty valmiita luonteita. Tiettyihin tuoteasennuksiin voi sisältyä luonteita.