Lição 4: Desenvolva o código para a classe Java™ Decorator

Nesta lição, você desenvolverá o código para a classe Decorator que trata da decoração dos recursos do CARMA na visualização Repositórios do CARMA.

Sobre esta Tarefa

Para incluir essa funcionalidade na classe Decorator:

Procedimento

  1. Entre a declaração de classe e o método decorate , inclua duas variáveis ImageDescriptor estáticas que contêm os nomes de caminho ImageDescriptor para o decorador de bloqueio e o decorador de interrogação. Por exemplo:
    private static ImageDescriptor lock; 	 	
    private static ImageDescriptor question; 	 	
    static 
    { 		
       lock = Activator.getImageDescriptor("icons/lock.jpg"); 		
       question = Activator.getImageDescriptor("icons/question_mark.jpg");
    }
    Dica: Os nomes de arquivos que você fornece devem corresponder com os nomes dos ícones que você importou na pasta icons .
  2. Adicionar o código ao corpo do método decorate() que adiciula um sufixo bloqueado aos membros e contêineres do CARMA quando eles estiverem bloqueados, ou decorá-los com pontos de interrogação se o MemberInfoMap não tiver sido configurado. O pseudocódigo a seguir demonstra isso:
    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
        }
     	}
    }
    Use o código de amostra de exemplo a seguir para implementar essa funcionalidade.
    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. Importe automaticamente as classes e tipos.
    Assegure que as importações a seguir sejam incluídas:
    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. Se a parte com.ibm.carma.model de sua declaração de pacotes de importação ainda estiver sublinhada em vermelho, então clique com o botão direito do mouse sobre ele e selecione a correção rápida, "Adicionar com.ibm.carma.model a lista de pacotes importados."
  5. Salve a origem e depure qualquer erro.