Charakter projektu

org.eclipse.core.resources.natures

Pracovní prostor podporuje užitečný nástroj - charakter projektu (neboli "charakter pro zkrácení"). Charakter přidružuje chování životního cyklu k projektu. Charaktery jsou instalovány pro jednotlivé projekty pomocí metody setDescription definované v org.eclipes.core.resources.IProject. Jsou konfigurovány automaticky při spuštění projektu a dekonfigurovány při ukončení projektu. Charakter Java může například instalovat tvůrce Java a provádět další konfiguraci projektu při přidání do projektu.

Bod rozšíření charakterů umožňuje zapisovačům registrovat svou implementaci charakteru pod symbolickým názvem, který je poté použit v rámci pracovního prostoru k vyhledání a konfiguraci charakterů. Symbolický název je ID rozšíření charakteru. Při definování rozšíření charakteru se doporučuje zadat jako atribut "name" hodnotu, která je pro člověka čitelná. Tato hodnota určuje význam a potenciálně může být prezentována uživatelům.

Charaktery mohou určovat omezení vztahu s ostatními charaktery. Omezení typu "one-of-nature" určuje, že současně může v projektu existovat maximálně jeden charakter patřící do dané sady. Toto nastavení vynutí vzájemné vyloučení mezi charaktery, které nejsou navzájem kompatibilní. Omezení typu "requires-nature" určuje závislost na jiném charakteru. Pokud je do projektu přidán charakter, musí být rovněž přidány všechny povinné charaktery. Charaktery zaručují, že budou konfigurovány a dekonfigurovány takovým způsobem, kdy konfigurace a dekonfigurace jejich povinných charakterů bude provedena před a po charakterech. Z tohoto důvodu nejsou povoleny cyklické závislosti mezi charaktery.

Charaktery nelze přidat do projektu nebo je z něj odebrat, pokud by taková změna narušila některé omezení, které bylo dříve splněno. Pokud je v projektu nakonfigurován charakter, ale později je zjištěno, že jeho omezení nejsou splněna, je tento charakter a všechny jeho povinné charaktery označeny jako disabled (znepřístupněné), ale zůstanou v projektu zachovány. K této situaci například dochází, když při instalaci chybí povinný charakter. Charaktery, které v instalaci chybí, a charaktery obsažené v cyklech závislosti jsou také označeny jako zablokované.

Charaktery mohou také určovat přírůstkové tvůrce projektů (existují-li), kteří jimi budou nakonfigurovány. Díky těmto informacím pracovní prostor zajišťuje, že tvůrci budou spouštěni pouze, když existuje jejich odpovídající charakter, a budou zpřístupněny při sestavení projektu. Jestliže je charakter z projektu odebrán, ale metodě odstranění z konfigurace charakteru se nezdaří odebrání příslušných tvůrců, odebere pracovní prostor tyto tvůrce ze specifikace automaticky. Dva charaktery nemohou ve své značce určovat stejného přírůstkového tvůrce projektu.

Charaktery také umožňují nepovolit vytvoření propojených prostředků v projektu, k nimž jsou přiřazeny. Nastavením atributu allowLinking na hodnotu "false" může charakter deklarovat, že propojené prostředky nebudou nikdy vytvářeny. Tato funkce je ve verzi 2.1 nová.

Počínaje verzí 3.1, charaktery mohou deklarovat spřízněnost s libovolným typem obsahu. To má vliv na způsob určování typu obsahu pro soubory v pracovním prostoru. V případě konfliktu (dva či více typů je považováno za stejně vhodné pro daný soubor) se vybere typ obsahu se spřízněností k některému z charakterů nakonfigurovanému pro odpovídající projekt.

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


Zde je uveden příklad tří konfigurací charakteru. waterNature a fireNature patří do stejné výlučné sady, takže nemohou existovat současně v jednom projektu. snowNature vyžaduje waterNature, takže snowNature bude zablokován v projektu, ve kterém chybí waterNature. Z toho přirozeně vyplývá, že snowNature nelze v projektu s fireNature zablokovat. fireNature také neumožňuje vytvoření propojených prostředků.

 
   

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

Jestliže byla tato rozšíření definována v modulu plug-in s ID com.xyz.coolplugin, jsou úplné názvy těchto funkcí com.xyz.coolplugin.fireNature, com.xyz.coolplugin.waterNature a com.xyz.coolplugin.snowNature.

Hodnota atributu třídy musí představovat nástroj pro implementaci rozhraní org.eclipse.core.resources.IProjectNature. Definice charakteru musí být prozkoumány pomocí rozhraní org.eclipse.core.resources.IProjectNatureDescriptor. Objekty deskriptoru je možné získat pomocí metod getNatureDescriptor(String) a getNatureDescriptors() v org.eclipse.core.resources.IWorkspace.

Platforma samotná neobsahuje žádné předdefinované charaktery. Instalace konkrétních produktů mohou podle potřeby obsahovat charaktery.