L'assistant "Nouvelle action" de NetBeans 7.0 génère une classe qui implémente l'interface ActionListener
et comporte plusieurs annotations. Ces annotations placent des références à cette action dans les barres d'outils/menus spécifiés dans l'assistant. La plupart de cela est expliqué dans le NetBeans wiki et fonctionne comme prévu.Enregistrement de l'action déclarative NetBeans par rapport au menu contextuel du nœud
Le problème se pose lorsque je souhaite ajouter une telle action au menu contextuel d'un nœud. Exposer des actions signifie que vous devez renvoyer des instances concrètes de vos actions à partir de la méthode Node.getActions(..). La pièce manquante ici est que j'ai un ActionListener
avec quelques annotations fantaisistes, mais à la place j'ai besoin d'une instance Action
qui est soutenue par cet écouteur. Lorsque vous essayez de combler cette lacune je suis tombé sur un blog post by Geertjan, qui semble en quelque sorte lié et conduit à une méthode statique j'ai ajouté à mon ActionListener
:
public static Action findAction() throws Exception {
final FileObject fo = FileUtil.getConfigFile(
"Actions/Tools/foo-bar-Action.instance");
final DataObject dob = DataObject.find(fo);
final InstanceCookie ic = dob.getLookup().lookup(InstanceCookie.class);
if (ic != null) {
final Object instance = ic.instanceCreate();
if (instance instanceof Action) {
return (Action) instance;
}
}
return null;
}
Bien que cela fonctionne, il est sûrement pas le plus beau morceau de code avec tout ce qui passe par l'API du système de fichiers et cette chaîne de nom d'action laide constante. Cela me semble très fragile.
Donc, je voudrais savoir quel est le moyen préféré pour obtenir mon action générée par l'assistant dans le menu contextuel d'un nœud? Si cela est important, je voudrais mentionner que mon action est sensible au contexte (il faut donc qu'une interface spécifique dans la recherche soit activée).