Descrizione: lo spazio di lavoro supporta la nozione di 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.
Tag di configurazione:
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA
#IMPLIED
name CDATA
#IMPLIED
>
<!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)
>
<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 plug-in 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".
Informazioni API: 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.
Implementazione fornita: la piattaforma non è dotata di alcuna natura predefinita. Installazioni particolari del prodotto potrebbero comprendere delle nature, in base alle esigenze.
Copyright (c) 2003 IBM Corporation e altri.
Tutti i diritti riservati. Questo programma e il materiale di accompagnamento
sono disponibili secondo i termini della Common Public License v1.0 che sono
distribuiti con il prodotto, e disponibili all'indirizzo
http://www.eclipse.org/legal/cpl-v10.html