可将操作添加至“CARMA 存储库”视图上下文菜单,以便可对 CARMA 资源执行该操作。
用于将菜单项添加至“导航器”视图的示例标记:
如果要定义菜单项以使它为 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 属性仅为操作的唯一标识。指定的
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 属性用来指定要应用的过滤器的类型。请参阅
CarmaActionFilter
以获取有关 name 属性的其他相关值。最后,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 资源的数组,随后可以使用该数组来执行操作。例如,您可对全部的所选资源进行循环并设置某些元数据属性。虽然,您实际上仅需要覆盖 run 方法,但是还可发现当覆盖 selectionChanged 方法以更新操作的可用性(如以上示例中显示)时它很有用。
如示例中所定义,selectionChanged 使用 CarmaObjectActionDelegate 的 isUnsupported 辅助函数来启用操作标识为 101 的操作(如果对象的新选择支持该操作)。虽然,值 101 硬编码为示例代码,但是当操作的名称已知时,可动态地对操作标识进行解析。仅使用相应 RepositoryManager 对象的 getActions 方法来检索对于该 RAM 可用的操作的列表,搜索该列表以根据操作的名称找到相应操作,然后使用 getActionId 方法来从对应 Action 对象检索操作标识。如果不确定该操作的操作标识是什么,那么可使用此较动态的方法来解析该标识。