Rational Developer for System z


Lección 2: Desarrollar código para la clase BrowseMemberAction

Esta lección le guiará en los pasos para desarrollar el código necesario para la clase BrowseMemberAction.

Para desarrollar el código para la clase BrowseMemberAction:

  1. Abra la clase BrowseMemberAction en el editor, si aún no lo está. En el Explorador de paquetes, expanda com.ibm.carma.plugin.browse > src > browse y efectúe una doble pulsación sobre la clase BrowseMemberAction.
  2. El primer método que escribirá es selectionChanged. Este método se utiliza para controlar los elementos para los que se habilitará la acción de examinar. En el código de ejemplo que sigue, la acción de examinar miembro sólo se habilita en miembros de CARMA y sólo de uno en uno. Debido a ello, deben realizarse comprobaciones antes de habilitar la acción de examinar. A continuación figura un pseudocódigo que lo muestra:
    si (se selecciona más de un elemento)
       inhabilitar acción;
    
    si (el elemento seleccionado es un miembro CARMA)
       habilitar acción
    else
       inhabilitar acción
    Utilice el siguiente código de muestra para implementar este método:
    public void selectionChanged(IAction action, ISelection selection) {		
       Iterator i = ((IStructuredSelection) selection).iterator();
    
          // por omisión, presuponer false
       action.setEnabled(false);
    
          if( ((IStructuredSelection) selection).size() != 1){
          return;
       }
    		
       while (i.hasNext()) {
          Object next = i.next();
          if (next instanceof CARMAMember) { // el elemento es un miembro
             //recordar el elemento seleccionado para que, si se ejecuta la acción, sepa
             //en qué elemento debe ejecutarse la acción
             this.itemSelected = (CARMAMember) next;
          } else {
             this.itemSelected = null;
             return;
          }
       }		
    
       // si se pasa la prueba... habilitar la acción
       action.setEnabled(true);
    }
  3. El segundo método que escribirá es el método run. Llamará a este método cuando desee invocar BrowserMemberAction. Para abrir el miembro CARMA en modalidad de sólo lectura, el entorno de trabajo necesita descargar el contenido del archivo del RAM en el IFile, un tipo de archivo de Eclipse, establecer las propiedades de IFile como de sólo lectura y luego abrir el IFile. A continuación figura un pseudocódigo que lo muestra:
    Obtener el miembro CARMA que el usuario desea examinar;
    Crear un IFile que represente el miembro CARMA;
    Descargar el contenido del miembro CARMA en el IFile;
    Establecer las propiedades del IFile como de sólo lectura;
    Llamar a Eclipse para que abra el IFile;
    Utilice el siguiente código de muestra para implementar este método:
    public void run(IAction action) {	
       //si itemSelected es nulo, la acción de examinar se ha ejecutado
       //en algún elemento que no es un miembro CARMA; esto nunca debe ocurrir
       if (this.itemSelected != null) {
          //Obtener el nombre del miembro CARMA
          String memberName = itemSelected.getFileName();
    			
          			
          //Crear una ubicación temporal en la estación de trabajo para contener
          //la memoria caché local del archivo
          IWorkspace myWorkspace = ResourcesPlugin.getWorkspace();
          IWorkspaceRoot myRoot = myWorkspace.getRoot();
    			
          			
          IProject myResource = myRoot.getProject("/BootCampTemp");
    			
          			
          //Si el directorio temporal que contiene los archivos temporales
          //no existe, crearlo
          if( !myResource.exists() ){
             try{
                myResource.create(new NullProgressMonitor());
             } catch(Exception e){
                e.printStackTrace();
             }
          }
    			
          //Si la ubicación temporal que es un proyecto no está abierta,
          //abrirla
          if( !myResource.isOpen()){
             try{
                myResource.open(new NullProgressMonitor());
             } catch(Exception e){
                e.printStackTrace();
             }
          }
    			
          //Comprobar que el espacio temporal es del tipo correcto y existe
          if (myResource instanceof IContainer && myResource.exists()) {
             IContainer myContainer = (IContainer) myResource;
    	
          	
          //Crear el IFile en la ubicación temporal 
          final IFile myFile = myContainer.getFile(new Path(memberName));
    				
          				
          //Crear el trabajo que obtendrá el contenido del archivo
          GetContentsJob myJob = new GetContentsJob("CRAJOB1", itemSelected);
    				
          				
          //Ejecutar el trabajo
          myJob.schedule();
    
                try{
             InputStream myStream = null;
             while( (myStream = myJob.getStream()) == null){				
             }
             
             //Copiar el contenido en el IFile
             if(!myFile.exists())
                myFile.create(myStream, true, new NullProgressMonitor());
             } catch(Exception e){
                e.printStackTrace();
             }			
    				
             //Establecer los atributos del archivo como de sólo lectura y abrir el archivo
             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();
                   }
                   //establecer los atributos en sólo lectura
                   myAttributes.setReadOnly(true);
                   try{
                      myFile.setResourceAttributes(myAttributes);
                   } catch(Exception e){
                      e.printStackTrace();
                   }
                   //abrir el archivo en modalidad de examen
                   IDE.openEditor(page, myFile, true);
                } catch (PartInitException e) {
                   //Excepción de descriptor de contexto TODO
                   System.out.println(e);
                }
             }
          });
          }
       }
    }
  4. Compruebe que se han importado todos los paquetes que la clase necesitará. Añada cualquiera de los que figuran a continuación y que no se haya incluido en las sentencias de importación:
    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. Guarde el código fuente y depure los errores.

Términos de uso | Comentarios



Este Information Center está basado en tecnología Eclipse. (http://www.eclipse.org)