Lerneinheit 4: Code für die Java-Klasse™ Decorator entwickeln

In dieser Lerneinheit entwickeln Sie Code für die Klasse Decorator, von dem das Markieren der CARMA-Ressourcen in der Ansicht 'CARMA-Repositorys' verarbeitet wird.

Informationen zu dieser Task

Gehen Sie wie folgt vor, um diese Funktion zur Klasse Decorator hinzuzufügen:

Prozedur

  1. Fügen Sie zwischen der Klassendeklaration und der Methode decorate zwei statische ImageDescriptor -Variablen hinzu, die die ImageDescriptor -Pfadnamen für den Sperrdekorator und den Fragezeichendekorator enthalten. Beispiel:
    private static ImageDescriptor lock; 	 	
    private static ImageDescriptor question; 	 	
    static 
    { 		
       lock = Activator.getImageDescriptor("icons/lock.jpg"); 		
       question = Activator.getImageDescriptor("icons/question_mark.jpg");
    }
    Tipp: Die von Ihnen angegebenen Dateinamen müssen den Namen der Symbole entsprechen, die Sie in den Ordner icons importiert haben.
  2. Fügen Sie den Code zum Hauptteil der Methode decorate() hinzu, die ein Suffix locked zu den CARMA-Membern und -Containern hinzufügt, wenn sie gesperrt sind, oder versehen Sie sie mit Fragezeichen, wenn MemberInfoMap nicht festgelegt wurde. Am folgenden Pseudocode wird dies veranschaulicht:
    if( resource is CARMA Container or CARMA Member){
      if( Member Info Map Set){ 		
        if( Member Info Map Set contains the Key “locked”){ 
    		  if( value for the key “locked” is not empty string){ 				
            decorate CARMA Member/Container with lock decorator
            Add “locked” suffix to CARMA Member/Container  } 
          } else { 	
            decorate CARMA Member/Container with question decorator
        }
     	}
    }
    Mithilfe des folgenden Beispielcodes können diese Funktionen implementiert werden.
    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(" - (Member Locked)");
                      else
                         decoration.addSuffix(" - (Container Locked)");
                   }
                }  	
             }
             catch(NotSynchronizedException e)
             {
                //TODO handle exception
             }
          } 
          else 
          {
             decoration.addOverlay(question);
             decoration.addSuffix(" - (Not Syncronized)");
          }
       }
    }
    
  3. Importieren Sie die Klassen und Typen automatisch.
    Stellen Sie sicher, dass folgende Importe eingeschlossen sind:
    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. Wenn der Teil com.ibm.carma.model der Anweisung zum Importieren von Paketen noch rot unterstrichen ist, klicken Sie mit der rechten Maustaste darauf und wählen Sie die Schnellkorrektur " com.ibm.carma.model zur Liste der importierten Pakete hinzufügen" aus.
  5. Speichern Sie die Quelle und korrigieren Sie alle Fehler.