Descrição: A área de trabalho suporta a percepção de naturezas do projeto (ou a abreviação "naturezas"). Uma natureza associa o comportamento do ciclo de vida a um projeto. As naturezas são instaladas por projeto com o método setDescription, definido em org.eclipes.core.resources.IProject. Elas são configuradas automaticamente quando um projeto é aberto e desconfiguradas quando um projeto é encerrado. Por exemplo, a natureza Java, quando incluída em um projeto, pode instalar um construtor Java e executar a configuração de outro projeto
O ponto de extensão das naturezas permite aos escritores registrar as suas implementações de natureza sob um nome simbólico que é então utilizado de dentro da área de trabalho para encontrar e configurar as naturezas. O nome simbólico é o id da extensão de natureza. Ao definir uma extensão de natureza, os usuários são encorajados a incluir um valor legível a seres humanos no atributo rth e "name", o qual identifica seus significados e potencialmente pode ser apresentado aos usuários.
As naturezas podem especificar restrições de relacionamentos com outras naturezas. A restrição "alguma natureza" especifica que pelo menos uma natureza pertencente a um conjunto específico pode existir em um projeto em um determinado momento. Isso reforça a exclusão mútua entre naturezas que não são compatíveis. A restrição "natureza requerida" especifica uma dependência em outra natureza. Quando uma natureza é incluída em um projeto, todas as naturezas requeridas também devem ser incluídas. Há garantias de que as naturezas requeridas nas naturezas configuradas e desconfiguradas dessa forma serão sempre configuradas antes delas e desconfiguradas depois delas. Por essa razão, as dependências cíclicas entre naturezas não são permitidas.
As naturezas não podem ser incluídas ou removidas de um projeto se essa alteração violar qualquer restrição atendida anteriormente. Se uma natureza for configurada em um projeto e, posteriormente, achar que suas restrições não são satisfatórias, essa natureza e todas as naturezas que as exigem serão marcadas como desativadas, mas permanecerão no projeto. Isso pode acontecer, por exemplo, quando uma natureza requerida está ausente na instalação. As naturezas ausentes na instalação e as naturezas envolvidas nos ciclos de dependência também são marcadas como desativadas.
As naturezas também podem especificar quais construtores de projetos incrementais, se houver algum, são configurados por elas. Com essa informação, a área de trabalho garantirá que os construtores serão executados apenas quando suas naturezas correspondentes estiverem presentes e ativadas no projeto que está sendo criado. Se uma natureza for removida de um projeto, mas o método de desconfiguração da natureza falhar ao remover seus construtores correspondentes, a área de trabalho removerá automaticamente esses construtores da especificação. Não é permitido que duas naturezas especifiquem o mesmo construtor de projeto incremental em suas marcações.
As naturezas também podem desaprovar a criação de recursos vinculados a projetos aos quais elas estão associadas. Definindo o atributo allowLinking
como "false", uma natureza pode declarar que os recursos vinculados não devem ser criados nunca. Esse recurso é novo no release 2.1.
Marcação da Configuração:
<!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 esta extensão foi definida em um plug-in com id "com.xyz.coolplugin", o nome completo destas naturezas seria "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" e "com.xyz.coolplugin.snowNature".
Informações de API: O valor do atributo class deve representar um implementador de org.eclipse.core.resources.IProjectNature. As definições de natureza podem ser examinadas utilizando a interface org.eclipse.core.resources.IProjectNatureDescriptor. Os objetos do descritor podem ser obtidos utilizando os métodos getNatureDescriptor(String) e getNatureDescriptors() em org.eclipse.core.resources.IWorkspace.
Implementação Fornecida: A plataforma por si só não tem naturezas pré-definidas. Instalações especiais do produto podem incluir naturezas, conforme pedido.
Copyright (c) 2003 IBM Corporation e outros.
Todos os direitos reservados.
Este programa e os materiais que o acompanham são disponibilizados sob os termos da Common Public License v1.0 que acompanha esta distribuição e estão disponíveis no endereço http://www.eclipse.org/legal/cpl-v10.html