Nature di progetto

org.eclipse.core.resources.natures

Lo spazio di lavoro supporta la nozione di un natura del progetto (abbreviato come "natura"). La natura associa a un progetto un comportamento del ciclo di vita. Le nature vengono installate in base al progetto mediante il metodo setDescription definito in org.eclipes.core.resources.IProject. Sono configurate automaticamente quando viene aperto un progetto e deconfigurate quando il progetto viene chiuso. Ad esempio, la natura potrebbe installare un generatore Java ed eseguire altre configurazioni di progetto quando viene aggiunta allo stesso.

Il punto di estensione delle nature permette a chi scrive una natura di registrarne l'implementazione con un nome simbolico da utilizzare dall'interno dello spazio di lavoro per trovare e configurare una natura. Il nome simbolico rappresenta l'id dell'estensione della natura. Durante la definizione dell'estensione di una natura, si consiglia all'utente di includere un valore significativo per l'attributo "name", che identifica la natura.

Le nature possono specificare vincoli di relazione con altre nature. Il vincolo "one-of-nature" specifica che su un progetto può essere presente al massimo una natura relativa ad un determinato insieme in qualsiasi momento. Il vincolo rafforza l'esclusione reciproca tra nature che non sono compatibili. Il vincolo "requires-nature" specifica la dipendenza di una natura da un'altra. Quando una natura viene aggiunta a un progetto, devono essere aggiunte tutte le altre nature necessarie. Le nature vengono configurate e deconfigurate in modo che le relative nature necessarie siano sempre configurate prima e deconfigurate dopo la natura aggiunta. Per tale motivo, non sono consentite dipendenze cicliche tra le nature.

Le nature possono essere aggiunte o rimosse da un progetto nel caso in cui una modifica dovesse violare un vincolo precedentemente soddisfatto. Se i vincoli di una natura configurata su un progetto non sono più soddisfatti, quella natura e tutte le altre per cui è necessaria vengono contrassegnate come disabilitate, anche se rimangono nel progetto. L'eventualità si verifica, ad esempio,quando una natura necessaria non è presente nell'installazione. Le nature che mancano nell'installazione e quelle coinvolte in cicli di dipendenza sono contrassegnate come disabilitate.

Le nature possono inoltre specificare i generatori di progetti incrementali eventualmente configurati. L'informazione consente allo spazio di lavoro di garantire che i generatori saranno eseguiti soltanto quando la natura corrispondente è presente ed abilitata sul progetto da generare. Quando una natura viene rimossa da un progetto senza che il metodo di deconfigurazione della natura riesca a rimuovere i suoi generatori, lo spazio di lavoro elimina automaticamente quei generatori dalla specifica di generazione. Due nature non possono specificare lo stesso generatore di progetto incrementale nella propria configurazione.

Le nature hanno anche la capacità di controllare la possibilità di creazione di risorse collegate in progetti ai quali sono associate. Impostando l'attributo allowLinking a "false", una natura può dichiarare che non devono essere mai create risorse collegate. Questa è una funzione nuova nella versione 2.1.

A partire dal release 3.1, le nature possono dichiarare affinità con tipi di contenuto arbitrari, con effetti sulle modalità di determinazione del tipo di contenuto per i file dello spazio di lavoro. In caso di conflitti (due o più tipi di contenuto considerati entrambi adatti per un file fornito), verrà scelto il tipo di contenuto che presenta affinità con una delle nature configurate per il relativo progetto.

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


Di seguito è riportato un esempio di tre configurazioni di natura. waterNature e fireNature appartengono allo stesso gruppo di esclusione e non possono essere presenti contemporaneamente in un progetto. snowNature richiede waterNature, quandi snowNature sarà disabilitata se nel progetto non è presente waterNature. Come conseguenza logica, snowNature non può essere abilitata in un progetto con fireNature. fireNature inoltre non consente la creazione di risorse collegate.

 
   

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

Se queste estensioni sono state definite in un plugin con identificativo "com.xyz.coolplugin", il nome completo di queste nature sarà "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" e "com.xyz.coolplugin.snowNature".

Il valore dell'attributo class deve rappresentare un implementatore di org.eclipse.core.resources.IProjectNature. Le definizioni delle nature possono essere esaminate mediante l'interfaccia org.eclipse.core.resources.IProjectNatureDescriptor. È possibile ottenere oggetti descrittore utilizzando i metodi getNatureDescriptor(String) e getNatureDescriptors() per org.eclipse.core.resources.IWorkspace.

La piattaforma non è dotata di alcuna natura predefinita. Installazioni particolari del prodotto potrebbero comprendere delle nature, in base alle esigenze.