Rational Developer for System z, version 7.6

Spécification d'un générateur différent pour un sous-projet MVS

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.

Exemple de scénario

Créez un nouveau projet z/OS avec un sous-projet MVS en suivant les instructions des rubriques suivantes : Le processus de création d'un nouveau sous-projet entraîne la création d'un fichier XML dans lequel sont conservées diverses caractéristiques et propriétés du sous-projet. Voici une partie de ce fichier XML, après création du sous-projet :

graphique DefaultBuilderXML

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.

graphique ReplaceBuilderAction

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 :

graphique SampleBuilderXML

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.

Exemple de structure de code

Définition d'un générateur de sous-projet

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.

Remplacement du générateur de sous-projet par défaut

L'élément de menu Remplacer le générateur par défaut est implémenté par la classe AddSubProjectBuilderAction. Sa méthode run(IAction) change le buildSpec du sous-projet pour remplacer le nom de la classe du générateur par défaut par celui de la classe de l'exemple de générateur SampleBuilder, via la méthode getBuildSpec() du sous-projet, en trouvant l'ancien générateur dans la liste des commandes IBuildCommand, puis en mettant à jour le BuildSpec via la méthode setBuildSpec(com.ibm.ftt.projects.core.logical.IBuildCommand newCommands) du sous-projet.
		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>

Restauration du générateur de sous-projet par défaut

L'élément de menu Restaurer le générateur par défaut est implémenté par la classe RemoveSubProjectBuilderAction. Sa méthode run(IAction) change le buildSpec du sous-projet pour remplacer le nom de la classe de l'exemple de générateur SampleBuilder par celui de la classe du générateur par défaut, via la méthode getBuildSpec() du sous-projet, en trouvant l'ancien générateur dans la liste des commandes IBuildCommand, puis en mettant à jour le BuildSpec via la méthode setBuildSpec(com.ibm.ftt.projects.core.logical.IBuildCommand newCommands) du sous-projet.
      
		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>

Conditions d'utilisation | Commentaires

Ce centre de documentation utilise la technologie Eclipse. (http://www.eclipse.org)