Cet exemple montre comment remplacer le générateur par défaut d'un sous-projet MVS par un nouveau générateur. Le nouveau générateur peut servir à modifier la façon dont est généré le sous-projet lors de la requête d'une action de génération.

Pour remplacer le générateur du sous-projet par défaut par un autre générateur (défini par l'utilisateur), cliquez avec le bouton droit de la souris sur le sous-projet et sélectionnez l'action Actions de l'échantillon d'API > Remplacer le générateur par défaut.

Cette action entraîne la mise à niveau des informations du fichier XML. Il est possible que le fichier ne soit pas immédiatement mis à jour, mais les informations du générateur changeront lors de la prochaine intervention sur le fichier. A ce stade, le fichier doit ressembler à ce qui suit :

Si vous souhaitez restaurer le générateur de sous-projet (par défaut) d'origine, sélectionnez l'action Actions de l'échantillon d'API > Restaurer le générateur par défaut.
Les générateurs de sous-projet dans Rational Developer for System z sont semblables, au niveau conceptuel, à un compilateur de projet incrémentiel dans le produit Eclipse de base. Ils permettent de créer le contenu d'un sous-projet, en générant des résultats de compilation (nouveaux et/ou mis à jour)). Par exemple, il est possible que tous les fichiers source COBOL d'un sous-projet soient traités par un compilateur COBOL, et que les fichiers résultants (objet, listing, exécutable, etc.) soient ajoutés au sous-projet.
Pour définir un générateur de projet personnalisé pour un sous-projet distant, vous devez créer une classe qui implémente l'interface ILogicalSubProjectBuilder. La classe SampleBuilder contient alors le code suivant :
public class SampleBuilder implements ILogicalSubProjectBuilder {
......
}
L'interface ILogicalSubProjectBuilder est relativement simple. Dans SampleBuilder, ajoutez simplement une zone privée subproject pour l'instance de sous-projet. Dans cet exemple, l'instruction println indiquant "Sample Builder called for subProject:" (Exemple de générateur appelé pour le sous-projet))) est émise et le nom du sous-projet est inclus.
Vous pouvez trouver le code source complet dans SampleBuilder.java.
IBuildCommand[] buildCommands = subProject.getBuildSpec();
// look through the existing build commands for the "standard"
// RDz builder for MVS subprojects, and if found substitute the
// sample builder in its place
for (int i = 0; i < buildCommands.length; ++i) {
if (buildCommands[i].getBuilderName().equals(IProjectCoreConstants.ZOS_BUILDER_ID)) {
// copy the commands preceding the RDz builder
IBuildCommand[] newCommands = new IBuildCommand[buildCommands.length];
if (i > 0) {
System.arraycopy(buildCommands, 0, newCommands, 0, i - 1);
}
// create a new command for the sample builder
IBuildCommand buildCommand = getSubProject().newCommand();
buildCommand.setBuilderName("com.ibm.ftt.api.samples.samplebuilder");
// add the new command
newCommands[i] = buildCommand;
// copy the rest of the build commands
if (i < buildCommands.length) {
System.arraycopy(
buildCommands,
i + 1,
newCommands,
i,
buildCommands.length - i - 1);
}
// store the new set of build commands
subProject.setBuildSpec(newCommands);
System.out.println("Sample builder replaces RDz builder");
break;
}
}
Vous pouvez trouver le code source complet dans AddSubProjectBuilderAction.java.
L'action est ajoutée via les mécanismes d'ajout standard d'Eclipse.
<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();
// look through the existing build commands for the sample
// builder, and if found substitute the "standard" RDz builder
// in its place
for (int i = 0; i < buildCommands.length; ++i) {
if (buildCommands[i].getBuilderName().equals("com.ibm.ftt.api.samples.samplebuilder")) {
// copy the commands preceding the sample builder
IBuildCommand[] newCommands = new IBuildCommand[buildCommands.length];
if (i > 0) {
System.arraycopy(buildCommands, 0, newCommands, 0, i - 1);
}
// create a new command for the RDz builder
IBuildCommand buildCommand = getSubProject().newCommand();
buildCommand.setBuilderName(IProjectCoreConstants.ZOS_BUILDER_ID);
// add the new command
newCommands[i] = buildCommand;
// copy the rest of the build commands
if (i < buildCommands.length) {
System.arraycopy(
buildCommands,
i + 1,
newCommands,
i,
buildCommands.length - i - 1);
}
// store the new set of build commands
subProject.setBuildSpec(newCommands);
System.out.println("RDz builder replaces Sample builder");
break;
}
}
Vous pouvez trouver le code source complet dans RemoveSubProjectBuilderAction.java.
L'action est ajoutée via les mécanismes d'ajout standard d'Eclipse.
<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>