Este ejemplo muestra cómo sustituir un constructor de subproyecto MVS con un constructor nuevo. El constructor nuevo puede utilizarse para cambiar la forma en que se construye un subproyecto cuando se solicita una acción de construcción.

Para sustituir el constructor de subproyectos predeterminado con un constructor diferente (definido por el usuario), pulse con el botón derecho sobre el subproyecto y seleccione la acción Acciones de ejemplo de API > Sustituir constructor predeterminado.
Esta acción hace que se actualice la información del archivo XML. El archivo no se actualizará inmediatamente, pero la información del constructor cambiará la próxima vez que se escriba el archivo. En este punto, el archivo tendrá un aspecto parecido al de la ilustración siguiente:

Si desea restaurar el constructor de subproyecto original (predeterminado), seleccione la acción Acciones de ejemplo de API > Restaurar constructores predeterminados.
Los constructores de subproyecto en Rational Developer for System z son parecidos en concepto a un constructor de proyecto incremental en Eclipse base. Proporcionan un medio de construir el contenido de un subproyecto, creando resultados de construcción nuevos y/o actualizados. Por ejemplo, todos los archivos fuente COBOL del subproyecto puede procesarlos un compilador COBOL y los archivos resultantes (objeto, listado, ejecutable, etc.) pueden añadirse al subproyecto.
Para definir un constructor de proyectos personalizado para un subproyecto remoto, debe crear una clase que implemente la interfaz ILogicalSubProjectBuilder. Así pues, la clase SampleBuilder contiene el código siguiente:
public class SampleBuilder implements ILogicalSubProjectBuilder {
......
}
La interfaz ILogicalSubProjectBuilder es relativamente simple. En SampleBuilder añada simplemente un campo privado subproject para la instancia de subproyecto. Este ejemplo emite una sentencia println que dice "Sample Builder called for subProject:" e incluye el nombre del subproyecto.
El código fuente completo se puede encontrar en SampleBuilder.java.
IBuildCommand[] buildCommands = subProject.getBuildSpec();
// buscar el constructor RDz "estándar" para subproyectos MVS en los
// mandatos de constructor existentes y si se encuentra, sustituir por
// el constructor de ejemplo
for (int i = 0; i < buildCommands.length; ++i) {
if (buildCommands[i].getBuilderName().equals(IProjectCoreConstants.ZOS_BUILDER_ID)) {
// copiar los mandatos que preceden al constructor RDz
IBuildCommand[] newCommands = new IBuildCommand[buildCommands.length];
if (i > 0) {
System.arraycopy(buildCommands, 0, newCommands, 0, i - 1);
}
// crear un mandato nuevo para el constructor de ejemplo
IBuildCommand buildCommand = getSubProject().newCommand();
buildCommand.setBuilderName("com.ibm.ftt.api.samples.samplebuilder");
// añadir el mandato nuevo
newCommands[i] = buildCommand;
// copiar el resto de los mandatos de construcción
if (i < buildCommands.length) {
System.arraycopy(
buildCommands,
i + 1,
newCommands,
i,
buildCommands.length - i - 1);
}
// almacenar el conjunto nuevo de mandatos de construcción
subProject.setBuildSpec(newCommands);
System.out.println("Sample builder replaces RDz builder");
break;
}
}
El código fuente completo se puede encontrar en AddSubProjectBuilderAction.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.addbuilder”>
<visibility>
<not>
<objectState
name=“projectBuilder”
value=“com.ibm.ftt.api.samples.samplebuilder”>
</objectState>
</not>
</visibility>
<action
label=“
class=“com.ibm.ftt.api.samples.builders.AddSubProjectBuilderAction”
menubarPath=“com.ibm.ftt.api.samples.PopupMenu/group1”
id=“com.ibm.ftt.api.samples.addbuilderaction”/>
</objectContribution>
IBuildCommand[] buildCommands = subProject.getBuildSpec();
// buscar el constructor de ejemplo en los mandatos de construcción
// existentes y si se encuentra, sustituir por el constructor RDz
// "estándar"
for (int i = 0; i < buildCommands.length; ++i) {
if (buildCommands[i].getBuilderName().equals("com.ibm.ftt.api.samples.samplebuilder")) {
// copiar los mandatos que preceden al constructor de ejemplo
IBuildCommand[] newCommands = new IBuildCommand[buildCommands.length];
if (i > 0) {
System.arraycopy(buildCommands, 0, newCommands, 0, i - 1);
}
// crear un mandato nuevo para el constructor RDz
IBuildCommand buildCommand = getSubProject().newCommand();
buildCommand.setBuilderName(IProjectCoreConstants.ZOS_BUILDER_ID);
// añadir el mandato nuevo
newCommands[i] = buildCommand;
// copiar el resto de los mandatos de construcción
if (i < buildCommands.length) {
System.arraycopy(
buildCommands,
i + 1,
newCommands,
i,
buildCommands.length - i - 1);
}
// almacenar el conjunto nuevo de mandatos de construcción
subProject.setBuildSpec(newCommands);
System.out.println("RDz builder replaces Sample builder");
break;
}
}
El código fuente completo se puede encontrar en RemoveSubProjectBuilderAction.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.removebuilder”>
<filter
value=“com.ibm.ftt.api.samples.samplebuilder”
name=“projectBuilder”/>
<action
label=“
class=“com.ibm.ftt.api.samples.builders.RemoveSubProjectBuilderAction”
menubarPath=“com.ibm.ftt.api.samples.PopupMenu/group1”
id=“com.ibm.ftt.api.samples.removebuilderaction”/>
</objectContribution>