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
- Entre a declaração de classe e o método
decorate, inclua duas variáveisImageDescriptorestáticas que contêm os nomes de caminhoImageDescriptorpara 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 pastaicons. - 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 oMemberInfoMapnão tiver sido configurado. O pseudocódigo a seguir demonstra isso:
Use o código de amostra de exemplo a seguir para implementar essa funcionalidade.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)"); } } } - 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; - Se a parte
com.ibm.carma.modelde 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, "Adicionarcom.ibm.carma.modela lista de pacotes importados." - Salve a origem e depure qualquer erro.