Rational Developer for System z


课程 4:为 Java Decorator 类开发代码

在本课程中,您将为 Decorator 类开发代码,此类处理对“CARMA 存储库”视图中的 CARMA 资源进行装饰。

要对 Decorator 类添加此功能,请执行下列操作:

  1. 在类声明与 decorate 方法之间添加两个静态 ImageDescriptor 变量,这两个变量中包含锁修饰符和问号修饰符的 ImageDescriptor 路径名。例如:
    private static ImageDescriptor lock; 	 	
    private static ImageDescriptor question; 	 	
    static 
    { 		
       lock = Activator.getImageDescriptor("icons/lock.jpg"); 		
       question = Activator.getImageDescriptor("icons/question_mark.jpg");
    }
    提示: 您提供的文件名应当与导入到 icons 文件夹中的图标名称相对应。
  2. 将此代码添加至 decorate() 方法的主体,当 CARMA 成员和容器被锁定时,此方法将对这些成员和容器添加 locked 后缀;如果尚未设置 MemberInfoMap,那么将使用问号来装饰这些成员和容器。以下伪码演示了此情况:
    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)");
          }
       }
    }
  3. 自动导入类和类型。 请确保包括下列 import 语句:
    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. 如果 import packages 语句的 com.ibm.carma.model 部分仍然带有红色下划线,那么右键单击此部分并选择快速修订“将 com.ibm.carma.model 添加至已导入的包的列表”。
  5. 保存源代码,并调试存在的任何错误。

使用条款 | 反馈



本信息中心基于 Eclipse 技术。(http://www.eclipse.org)