Marcación de ejemplo para añadir un elemento de menú a la vista Navegador:
Podría incluir la marcación siguientes en su archivo plugin.xml si va a definir un elemento de menú para que aparezca para los archivos gestionados por CARMA en la vista Navegador:
<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>
Fíjese que el atributo objectClass del código objectContribution se ha especificado para que seaorg.eclipse.core.resources.IFile, lo cual indica que este elemento de menú debería aparecer en el menú contextual para la vista Navegador. El atributo id del código objectContribution no es más que un identificador exclusivo para su acción. El código filter especificado limita el elemento de menú para que solamente aparezca para aquellos archivos de la vista Navegador gestionados por CARMA. También puede añadir códigos filter adicionales según convenga. Finalmente, el código action especifica la clase delegada de objeto en este atributo class. Marcación de ejemplo para añadir un elemento de menú a la vista Repositorios de CARMA:
Podría incluir la marcación siguiente en su archivo plugin.xml si va a definir un elemento de menú para que aparezca en la vista Repositorios de CARMA:
<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>
Aquí, el atributo objectClass del código objectContribution se especifica en lugar de com.ibm.carma.model.CARMAContent, lo cual indica que este elemento de menú debería aparecer en el menú contextual para la vista Repositorios de CARMA. Fíjese que se utiliza un filtro distinto en este ejemplo: este filtro limita el elemento de menú para que solamente aparezca para recursos bajo un RAM denominado "My RAM". El atributo name del código filter se utiliza para especificar el tipo de filtro que se va a aplicar. Consulte CarmaActionFilter si desea otros valores importantes para el atributo name. Finalmente, el código action especifica la clase delegada de objeto en este atributo class.Código de ejemplo para ABCDelegate:
Puede utilizar el código siguiente como punto de partida para desarrollar su propio delegado de objeto: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"));
}
}
La primera línea del método run anterior contiene una matriz de los recursos de CARMA seleccionados, que seguidamente podrá utilizar para llevar a cabo su acción. Por ejemplo, puede moverse en círculo por todos los recursos seleccionados y establecer determinadas propiedades de metadatos. Aunque solamente tenga que alterar temporalmente el método run, puede que también le resulte útil alterar temporalmente el método selectionChanged para actualizar la disponibilidad de su acción tal como muestra el ejemplo anterior.
Según se define en el ejemplo, selectionChanged utiliza la función de ayudante isUnsupported de CarmaObjectActionDelegate para permitir la acción con un ID de acción de 101 si la nueva selección de objetos da soporte a la acción. Aunque un valor de 101 esté codificado en el código del ejemplo, es posible resolver el ID de acción dinámicamente si se sabe el nombre de la acción. Basta con utilizar el método getActions del objeto RepositoryManager correspondiente para recuperar una lista de las acciones disponibles para ese RAM, buscara en la lista la correspondiente acción en base al nombre de la acción y, a continuación, utilizar el método getActionId para recuperar el ID de la acción a partir del objeto Action correspondiente. Puede resolver el ID utilizando este método más dinámico si no está seguro de cuál es +el ID de acción.