Rational Developer for System z


レッスン 4: Java Decorator クラスのコードの開発

このレッスンでは、「CARMA リポジトリー」ビューの CARMA リソースの装飾を処理する Decorator クラスのコードを開発します。

この機能を Decorator クラスに追加するには、次のようにします。

  1. クラス宣言と decorate メソッドの間に、ロック・デコレーターと疑問符デコレーターの ImageDescriptor パス名を含む 2 つの静的な 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. CARMA メンバーとコンテナーがロックされたときに接尾部 locked を CARMA メンバーとコンテナーに追加する decorate() メソッドの本文にコードを追加するか、または MemberInfoMap が設定されていない場合は CARMA メンバーとコンテナーを疑問符で修飾します。次の疑似コードはこの例です。
    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 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. インポート・パッケージ・ステートメントの com.ibm.carma.model の部分にまだ赤の下線が引かれている場合は、その部分を右クリックして、クイック・フィックス「com.ibm.carma.model をインポートされたパッケージのリストに追加 (Add com.ibm.carma.model to list of imported packages)」を選択します。
  5. ソースを保存し、すべてのエラーをデバッグします。

ご利用条件 | フィードバック



このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)