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
- Fügen Sie zwischen der Klassendeklaration und der Methode
decoratezwei statischeImageDescriptor-Variablen hinzu, die dieImageDescriptor-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 Ordnericonsimportiert haben. - 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, wennMemberInfoMapnicht festgelegt wurde. Am folgenden Pseudocode wird dies veranschaulicht:
Mithilfe des folgenden Beispielcodes können diese Funktionen implementiert werden.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 } } }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)"); } } } - 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; - Wenn der Teil
com.ibm.carma.modelder 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.modelzur Liste der importierten Pakete hinzufügen" aus. - Speichern Sie die Quelle und korrigieren Sie alle Fehler.