用於將功能表項目新增至「導覽器」視圖的標記範例:
如果針對「導覽器」視圖中由 CARMA 管理的檔案,定義要顯示的功能表項目,則可以將下列標記包括在 plugin.xml 檔案中:
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.ibm.carma.action.disconnected.iFile"
objectClass="org.eclipse.core.resources.IFile"
adaptable="true">
<filter
name="projectPersistentProperty"
value="org.eclipse.team.core.repository=com.ibm.carma">
</filter>
<action
label="ABC Action"
class="com.xyz.ABCDelegate"
id="com.xyz.abc">
</action>
</objectContribution>
</extension>
請注意,objectContribution 標籤的 objectClass 屬性指定為
org.eclipse.core.resources.IFile,這指出此功能表項目應該出現在「導覽器」視圖的快速功能表中。objectContribution
標籤的 id 屬性只是動作的唯一 ID。指定的 filter 標籤將功能表項目限制為僅對「導覽器」視圖中由
CARMA 管理的那些檔案顯示。必要的話,您也可以使用附加的 filter 標籤。最後,action
標籤在其 class 屬性中指定物件委派類別。 用於將功能表項目新增至「CARMA 儲存庫」視圖的標記範例:
如果針對「CARMA 儲存庫」視圖中的資源,定義要顯示的功能表項目,則可以將下列標記包括在 plugin.xml 檔案中:
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.ibm.carma.action.disconnected.carmaContent"
objectClass="com.ibm.carma.model.CARMAContent
adaptable="true">
<filter
name="repositoryManager"
value="My RAM">
</filter>
<action
label="ABC Action"
class="com.xyz.ABCDelegate"
id="com.xyz.abc">
</action>
</objectContribution>
</extension>
在這裡,objectContribution 標籤的 objectClass 屬性改為指定為
com.ibm.carma.model.CARMAContent,這指出此功能表項目應該出現在「CARMA 儲存庫」視圖的快速功能表中。請注意,在此範例中使用了一個不同的過濾器:此過濾器將功能表項目限制為僅對名為
"My RAM" 的 RAM 下面的資源顯示。filter 標籤的
name 屬性用於指定要套用的過濾器類型。如需 name 屬性的其他相關值的相關資訊,請參閱
CarmaActionFilter 屬性。最後,action
標籤在其 class 屬性中指定物件委派類別。ABCDelegate 的程式碼範例:
可以使用下列程式碼,作為開發您自己的物件委派的起始點:public class ABCDelegate extends CarmaObjectActionDelegate {
public void run(IAction action) {
CARMAContent[] members = (CARMAContent[]) getSelectedCarmaResources().toArray(new CARMAContent[0]);
//perform task, schedule job, etc.
}
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
//this is the ID assigned by the installation of the action
action.setEnabled(!isUnsupported("101"));
}
}
上方 run 方法的第一行取得一組選定 CARMA 資源,隨後可使用該組資源來執行動作。例如,可迴路通過所有選定資源並設定某些 meta 資料內容。雖然實際上您只需要置換 run 方法,但是您可能會發現,如上方範例所示置換 selectionChanged 方法來更新動作的可用性也很有用。
如範例中的定義所示,selectionChanged 使用 CarmaObjectActionDelegate 的 isUnsupported helper 函數,來啟用動作識別碼為 101 的動作(如果物件的新選項支援該動作的話)。雖然值 101 寫在程式碼範例中,但是如果動作的名稱已知,則可以動態解析動作識別碼。只需使用適當的 RepositoryManager 物件的 getActions 方法,來擷取可用於該 RAM 的動作清單,根據動作的名稱搜尋整個清單以找出適當的動作,然後使用 getActionId 方法從對應的 Action 物件擷取動作識別碼。如果您不確定動作的動作識別碼,則可以使用此更動態的方法來解析 ID。