Leçon 4: Développement du code pour la classe Java™ Decorator

Dans cette leçon, vous allez développer le code pour la classe Decorator qui gère la décoration des ressources CARMA dans la vue Référentiels CARMA.

A propos de cette tâche

Pour ajouter cette fonctionnalité à la classe Decorator :

Procédure

  1. Entre la déclaration de classe et la méthode decorate , ajoutez deux variables ImageDescriptor statiques qui contiennent les noms de chemin ImageDescriptor pour le décorateur de verrou et le décorateur de point d'interrogation. Par exemple :
    private static ImageDescriptor lock; 	 	
    private static ImageDescriptor question; 	 	
    static 
    { 		
       lock = Activator.getImageDescriptor("icons/lock.jpg"); 		
       question = Activator.getImageDescriptor("icons/question_mark.jpg");
    }
    Astuce: Les noms de fichier que vous fournissez doivent correspondre aux noms des icônes que vous avez importées dans le dossier icons .
  2. Ajoutez le code au corps de la méthode decorate() qui ajoute un suffixe locked aux membres et aux conteneurs CARMA lorsqu'ils sont verrouillés, ou décorez-les avec des points d'interrogation si MemberInfoMap n'a pas été défini. Le pseudocode suivant le démontre :
    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
        }
     	}
    }
    Utilisez l'exemple de code suivant pour implémenter cette fonctionnalité.
    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. Importez automatiquement les classes et les types.
    Vérifiez que les importations suivantes sont incluses :
    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 partie com.ibm.carma.model de l'instruction d'importation de packages est toujours soulignée en rouge, cliquez dessus avec le bouton droit de la souris et sélectionnez le correctif rapide "Ajouter com.ibm.carma.model à la liste des packages importés".
  5. Enregistrez la source et déboguez les éventuelles erreurs.