Este ejemplo muestra cómo añadir una naturaleza de proyecto personalizada a un subproyecto. La presencia o ausencia de la naturaleza del proyecto puede utilizarse para controlar la visibilidad de los elementos de menú.
Para añadir la naturaleza del proyecto al subproyecto, pulse con el botón derecho del ratón sobre el subproyecto y seleccione la acción Acciones de ejemplo de API > Añadir naturaleza de proyecto.

Las naturalezas de subproyecto en Rational Developer for System z son parecidas en concepto a IProjectNature en Eclipse base. Proporcionan un medio para distinguir entre subproyectos remotos basados en la funcionalidad que debe habilitarse para cada subproyecto.
Para definir una naturaleza de proyecto personalizada para un subproyecto remoto, debe crear una clase que implementa la interfaz ILogicalSubProjectNature. Así pues, la clase SampleNature contiene lo siguiente:
public class SampleNature implements ILogicalSubProjectNature {
......
}
La interfaz ILogicalSubProjectNature es relativamente simple. En SampleNature, simplemente añade un campo privado project para la propiedad del proyecto.
El código fuente completo se puede encontrar en SampleNature.java.
Para completar la definición de la naturaleza del proyecto, declare la clase SampleNature en el manifiesto de plug-in de la forma siguiente:
<extension
id=“samplenature”
name=“
point=“com.ibm.ftt.projects.core.natures”>
<nature class=“com.ibm.ftt.api.samples.natures.SampleNature”/>
</extension>
Este fragmento de código define una naturaleza de proyecto con el ID com.ibm.ftt.api.samples.samplenature, que se obtiene añadiendo el ID de ampliación samplenature al ID del plug-in de definición com.ibm.ftt.api.samples.
El elemento de menú Añadir naturaleza de proyecto lo implementa la clase AddSubProjectNatureAction. El método run(IAction) añade SampleNature pasando el ID de la naturaleza al método addNatureId(String) de ILogicalSubProject.
try {
getSubProject().addNatureId("com.ibm.ftt.api.samples.samplenature");
} catch (CoreException e) {
// POR HACER: en producción, la excepción de código debería tratarse en serio
e.printStackTrace();
}
El código fuente completo se puede encontrar en AddSubProjectNatureAction.java.
La acción se aporta mediante mecanismos de aportación de Eclipse estándar.
<objectContribution
adaptable=“false”
objectClass=“com.ibm.ftt.projects.core.logical.ILogicalSubProject”
id=“com.ibm.ftt.api.samples.addnature”>
<action
label=“
class=“com.ibm.ftt.api.samples.natures.AddSubProjectNatureAction”
id=“com.ibm.ftt.api.samples.addnatureaction”/>
</objectContribution>
El elemento de menú Eliminar naturaleza de proyecto lo implementa la clase RemoveSubProjectNatureAction. El método run(IAction) elimina SampleNature pasando el ID de la naturaleza al método removeNatureId(String) de ILogicalSubProject.
try {
getSubProject().removeNatureId(“com.ibm.ftt.api.samples.samplenature”);
} catch (CoreException e) {
// POR HACER: en producción, la excepción de código debería tratarse en serio
e.printStackTrace();
}
El código fuente completo puede encontrarse en RemoveSubProjectAction.java.
La acción se aporte mediante mecanismos de aportación Eclipse estándar, parecidos al elemento de menú Añadir naturaleza de proyecto, con la utilización adicional de filtros de acción. Esto hace que la acción Eliminar naturaleza de proyecto aparezca sólo si SampleNature se ha añadido al proyecto en cuestión.
<objectContribution
adaptable=“false”
objectClass=“com.ibm.ftt.projects.core.logical.ILogicalSubProject”
id=“com.ibm.ftt.api.samples.removenature”>
<filter
value=“com.ibm.ftt.api.samples.samplenature”
name=“projectNature”/>
<action
label=“
class=“com.ibm.ftt.api.samples.natures.RemoveSubProjectNatureAction”
id=“com.ibm.ftt.api.samples.removenatureaction”/>
</objectContribution>