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>
<!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>
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".<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>
Copyright (c) 2002, 2005 IBM Corporation e altri.
Tutti i diritti riservati. Questo programma e il materiale di accompagnamento sono disponibili secondo i termini della Eclipse Public
License v1.0 che sono distribuiti con il prodotto, e disponibili all'indirizzo
http://www.eclipse.org/legal/epl-v10.html