Vous pouvez ajouter une action au menu contextuel de la vue Référentiels CARMA pour que celle-ci soit exécutée sur des ressources CARMA.
Exemple de marquage permettant d'ajouter un élément de menu à la vue Navigateur :
Vous pouvez inclure le marquage suivant à votre fichier plugin.xml si vous prévoyez de définir l'affichage d'un élément de menu dans la vue Navigateur pour des fichiers gérés par CARMA :
<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>
Notez que l'attribut objectClass de la balise
objectContribution est spécifié pour être
org.eclipse.core.resources.IFile, indiquant que cet élément de menu
doit apparaître dans le menu contextuel de la vue Navigateur. L'attribut id
de la balise objectContribution est simplement un identificateur unique
pour votre action. La balise filter spécifiée limite l'élément de menu
pour que celui-ci apparaisse uniquement pour les fichiers de la vue Navigateur
gérés par CARMA. Vous pouvez également ajouter des balises filter
supplémentaires en fonction de vos besoins. Enfin, la balise action
spécifie la classe de délégation d'objet dans son attribut class. Exemple de marquage permettant d'ajouter un élément de menu à la vue Référentiels CARMA :
Vous pouvez inclure le marquage suivant à votre fichier plugin.xml si vous prévoyez de définir l'affichage d'un élément de menu dans la vue Référentiels CARMA pour des ressources :
<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>
Ici, l'attribut objectClass de la balise objectContribution
est en revanche spécifié pour être com.ibm.carma.model.CARMAContent,
indiquant que cet élément de menu doit apparaître dans le menu contextuel
de la vue Référentiels CARMA. Notez qu'un filtre différent est utilisé dans l'exemple présent :
Ce filtre limite l'élément de menu pour qu'il apparaisse uniquement pour les ressources
situées sous un gestionnaire RAM appelé "My RAM". L'attribut name
de la balise filter est utilisé pour spécifier le type de filtre
appliqué. Voir CarmaActionFilter
pour d'autres valeurs pertinentes pour l'attribut name.
Enfin, la balise action
spécifie la classe de délégation d'objet dans son attribut class. Exemple de code pour ABCDelegate :
Vous pouvez utiliser le code suivant comme point de départ du développement de votre propre délégation d'objet :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 première ligne de la méthode run ci-dessus donne un tableau des ressources CARMA sélectionnées, que vous pouvez ensuite utiliser pour exécuter votre action. Vous pouvez, par exemple, lire en boucle toutes les ressources sélectionnées et définir certaines propriétés de métadonnées. Bien que vous n'ayez réellement besoin que de remplacer la méthode run, vous pouvez également trouver utile de remplacer la méthode selectionChanged pour mettre à jour la disponibilité de votre action, comme illustré dans l'exemple ci-dessus.
Telle que définie dans l'exemple, la méthode selectionChanged utilise la fonction d'aide isUnsupported de CarmaObjectActionDelegate pour activer l'action avec un ID action de 101 si la nouvelle sélection d'objets prend en charge l'action. Bien qu'une valeur de 101 soit codée en dur dans l'exemple de code, il est possible de résoudre l'ID action de manière dynamique si le nom de l'action est connu. Il suffit d'utiliser la méthode getActions de l'objet RepositoryManager approprié pour extraire la liste des actions disponible pour ce gestionnaire RAM, effectuer une recherche sur la liste pour trouver l'action appropriée en fonction du nom de l'action, puis utiliser la méthode getActionId pour extraire l'ID action de l'objet Action correspondant. Vous pouvez résoudre l'ID à l'aide de cette méthode plus dynamique si vous n'êtes pas certain de l'ID action de votre action.