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)