Rational Developer for System z


Lección 4: Desarrollar el código de la clase Java™ Decorator

En esta lección desarrollará código para la clase Decorator que maneja la decoración de los recursos CARMA en la vista Repositorios de CARMA.

Para añadir esta función a la clase Decorator:

  1. Entre la declaración de clase y el método decorate, añada dos variables estáticas ImageDescriptor que contengan los nombres de vía de acceso ImageDescriptor para el decorador en forma de candado y el decorador en forma de signo de interrogación. Por ejemplo:
    private static ImageDescriptor lock; 	 	
    private static ImageDescriptor question; 	 	
    static 
    { 		
       lock = Activator.getImageDescriptor("icons/lock.jpg"); 		
       question = Activator.getImageDescriptor("icons/question_mark.jpg");
    }
    Consejo: Los nombres de archivo que especifique deben corresponder a los nombres de los iconos que ha importado en la carpeta icons.
  2. Añada al cuerpo del método decorate() el código que añadirá un sufijo locked a los miembros y contenedores de CARMA cuando estén bloqueados o los decorará con signos de interrogación si no se ha establecido MemberInfoMap. A continuación figura un pseudocódigo que lo muestra:
    si( el recurso es Contenedor CARMA o Miembro CARMA){
      si( se ha establecido Member Info Map){ 		
        if( Member Info Map establecida contiene la clave “locked”){ 
    		  if( el valor de la clave “locked” no es una serie vacía){ 				
            decorar miembro/contenedor CARMA con decorador de bloqueo
            Añadir sufijo “locked” al miembro/contenedor CARMA  } 
          } de lo contrario { 	
            decorar miembro/contenedor CARMA con decorador de signo de interrogación
        }
     	}
    }
    Utilice el siguiente código de muestra para implementar esta funcionalidad.
    public void decorate(Object resource, IDecoration decoration) 
    {
       if(resource instanceof CARMAContainer || resource instanceof CARMAMember)
       {
          CARMAResource myResource = (CARMAResource) resource;
          if(myResource.isSetMemberInfoMap())
          {
             try
             {
                EMap myMap = myResource.getMemberInfoMap();
                if(myMap.containsKey("locked"))
                {
                   String value = myMap.get("locked").toString();
                   if( !value.equals(""))
                   {
                      decoration.addOverlay(lock);
                      if(myResource instanceof CARMAMember)
                         decoration.addSuffix(" - (Miembro bloqueado)");
                      else
                         decoration.addSuffix(" - (Contenedor bloqueado)");
                   }
                }  	
             }
             catch(NotSynchronizedException e)
             {
                //Excepción de descriptor de contexto TODO
             }
          } 
          else 
          {
             decoration.addOverlay(question);
             decoration.addSuffix(" - (Sin sincronizar)");
          }
       }
    }
  3. Importe automáticamente las clases y tipos. Asegúrese de incluir las importaciones siguientes:
    import com.ibm.carma.plugin.decorators.Activator;
    import org.eclipse.jface.resource.ImageDescriptor;
    import org.eclipse.jface.viewers.IDecoration;
    import org.eclipse.jface.viewers.ILightweightLabelDecorator;
    import org.eclipse.jface.viewers.LabelProvider;
    import com.ibm.carma.model.CARMAMember;
    import com.ibm.carma.model.CARMAContainer;
    import com.ibm.carma.model.CARMAResource;
    import com.ibm.carma.transport.NotSynchronizedException;
    import org.eclipse.emf.common.util.EMap;
  4. Si la parte correspondiente a com.ibm.carma.model de la sentencia de importación de paquetes sigue subrayada en rojo, púlsela con el botón derecho del ratón y seleccione el arreglo rápido, "Añadir com.ibm.carma.model a la lista de paquetes importados".
  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)