Rational Developer for System z


Leçon 2 : développement du code pour la classe BrowseMemberAction

Cette leçon vous guide étape par étape pour développer le code nécessaire pour la classe BrowseMemberAction.

Pour développer le code pour la classe BrowseMemberAction :

  1. Ouvrez la classe BrowseMemberAction dans l'éditeur si elle ne l'est pas déjà. Dans l'Explorateur de package, développez com.ibm.carma.plugin.browse > src > browse, et cliquez deux fois sur la classe BrowseMemberAction.
  2. La première méthode que vous allez écrire est selectionChanged. Cette méthode est utilisée pour contrôler les éléments pour lesquels la commande Parcourir est activée. Dans l'exemple de code suivant, l'action de parcourir le membre est activée uniquement sur les membres CARMA et uniquement pour un membre à la fois. A cause de cela, des vérifications doivent être effectuées avant d'activer l'action de parcourir. Le pseudocode suivant le démontre :
    if (more than one item is selected)
       disable action;
    
    if (item selected is CARMA member)
       enable action
    else
       disable action
    Utilisez l'exemple de code suivant pour implémenter cette méthode :
    public void selectionChanged(IAction action, ISelection selection) {		
       Iterator i = ((IStructuredSelection) selection).iterator();
    
       // false supposé par défaut
       action.setEnabled(false);
    
       if( ((IStructuredSelection) selection).size() != 1){
          return;
       }
    		
       while (i.hasNext()) {
          Object next = i.next();
          if (next instanceof CARMAMember) { // l'élément est un membre
             //retient l'élément sélectionné car si l'action est exécutée, elle sait
             //contre quel élément l'action doit être exécutée
             this.itemSelected = (CARMAMember) next;
          } else {
             this.itemSelected = null;
             return;
          }
       }		
    
       // si le test est réussi, activer l'action
       action.setEnabled(true);
    }
  3. La seconde méthode que vous allez écrire est la méthode run. Cette méthode est appelée quand vous voulez appeler l'action BrowserMemberAction. Pour ouvrir le CARMAMember en mode de lecture seule, le plan de travail nécessite le téléchargement du contenu du fichier à partir du gestionnaire RAM dans le fichier IFile, un type de fichier d'Eclipse. Définissez les propriétés du fichier IFile sur lecture seule, puis ouvrez le fichier IFile. Le pseudocode suivant le démontre :
    Obtenir le CARMAMember que l'utilisateur veut parcourir;
    Créer un fichier IFile qui représente le CARMAMember;
    Télécharger le contenu du CARMAMember dans le fichier IFile;
    Définir les propriétés du fichier IFile sur lecture seule;
    Appeler Eclipse pour ouvrir le fichier IFile;
    Utilisez l'exemple de code suivant pour implémenter cette méthode :
    public void run(IAction action) {	
       //si itemSelected est nul alors l'action a été exécutée
       //sur quelque chose d'autre qu'un membre CARMA, ce qui ne devrait pas arriver
       if (this.itemSelected != null) {
          //Obtenir le nom du membre CARMA
          String memberName = itemSelected.getFileName();
    			
          //Créer un emplacement temporaire sur le poste de travail pour contenir le
          //cache local du fichier
          IWorkspace myWorkspace = ResourcesPlugin.getWorkspace();
          IWorkspaceRoot myRoot = myWorkspace.getRoot();
    			
          IProject myResource = myRoot.getProject("/BootCampTemp");
    			
          //Si le répertoire temporaire qui contient les fichiers temporaires
          //n'existe pas, le créer
          if( !myResource.exists() ){
             try{
                myResource.create(new NullProgressMonitor());
             } catch(Exception e){
                e.printStackTrace();
             }
          }
    			
          //Si l'emplacement temporaire qui est un projet n'est pas ouvert,
          //ouvrez-le
          if( !myResource.isOpen()){
             try{
                myResource.open(new NullProgressMonitor());
             } catch(Exception e){
                e.printStackTrace();
             }
          }
    			
          //Vérifier que l'espace temporaire est du bon type et existe
          if (myResource instanceof IContainer && myResource.exists()) {
             IContainer myContainer = (IContainer) myResource;
    	
          //Créer le fichier IFile dans l'emplacement temporaire 
          final IFile myFile = myContainer.getFile(new Path(memberName));
    				
          //Créer le travail qui obtiendra le contenu du fichier
          GetContentsJob myJob = new GetContentsJob("CRAJOB1", itemSelected);
    				
          //Exécuter le travail
          myJob.schedule();
    
          try{
             InputStream myStream = null;
             while( (myStream = myJob.getStream()) == null){				
             }
             
             //Copier le contenu dans le fichier IFile
             if(!myFile.exists())
                myFile.create(myStream, true, new NullProgressMonitor());
             } catch(Exception e){
                e.printStackTrace();
             }			
    				
             //Définir les attributs du fichier sur lecture seule et ouvrir le fichier
             Display display = Display.getDefault();
             display.syncExec(new Runnable() {
             public void run() {
                IWorkbenchPage page = 
                   PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                
                try {
                   ResourceAttributes myAttributes = myFile.getResourceAttributes();
                   if(myAttributes == null){
                      myAttributes = new ResourceAttributes();
                   }
                   //Définition des attributs sur lecture seule
                   myAttributes.setReadOnly(true);
                   try{
                      myFile.setResourceAttributes(myAttributes);
                   } catch(Exception e){
                      e.printStackTrace();
                   }
                   //Ouverture du fichier en mode parcourir
                   IDE.openEditor(page, myFile, true);
                } catch (PartInitException e) {
                   //TODO gère l'exception
                   System.out.println(e);
                }
             }
          });
          }
       }
    }
  4. Vérifiez que tous les packages dont la classe aura besoin sont importés. Ajoutez tous les packages répertoriés ci-dessous mais qui ne sont pas inclus dans les instructions d'importation :
    import java.io.InputStream;
    import java.util.Iterator;
    
    import org.eclipse.core.resources.IContainer;
    import org.eclipse.core.resources.IFile;
    import org.eclipse.core.resources.IProject;
    import org.eclipse.core.resources.IWorkspace;
    import org.eclipse.core.resources.IWorkspaceRoot;
    import org.eclipse.core.resources.ResourceAttributes;
    import org.eclipse.core.resources.ResourcesPlugin;
    import org.eclipse.core.runtime.NullProgressMonitor;
    import org.eclipse.core.runtime.Path;
    import org.eclipse.jface.action.IAction;
    import org.eclipse.jface.viewers.ISelection;
    import org.eclipse.jface.viewers.IStructuredSelection;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.ui.IViewActionDelegate;
    import org.eclipse.ui.IViewPart;
    import org.eclipse.ui.IWorkbenchPage;
    import org.eclipse.ui.PartInitException;
    import org.eclipse.ui.PlatformUI;
    import org.eclipse.ui.ide.IDE;
    
    import com.ibm.carma.model.CARMAMember;
    import com.ibm.carma.ui.job.GetContentsJob;
  5. Enregistrez la source et déboguez les éventuelles erreurs.

Conditions d'utilisation | Commentaires en retour



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