Pour tl; dr, voir le Résumé au fond.
Mon objectif est à peu près résumée dans le titre de la question:Comment passer un paramètre de chaîne à partir d'une éclipse feuille de cheet à un code java et renvoie une valeur de chaîne à la antisèche
Je veux passer un paramètre de chaîne à partir d'une feuille de triche Eclipse, utilisez le paramètre pour contrôler le comportement du code, puis retourner une chaîne à partir du code, de sorte qu'il peut être affiché à l'utilisateur dans la feuille de triche.
Solution possible 1: en utilisant des actions ...
J'ai un paquet qui contient des feuilles de triche Eclipse. La plupart des conseils en ligne que j'ai trouvé parle de l'utilisation de l'élément <action>
pour invoquer le code eclipse, et avec ICheatSheetAction, cela permet la syntaxe x123 pratique paramN = value
. En utilisant les actions, j'ai réussi à obtenir mon code eclipse pour recevoir les paramètres de la feuille de triche et peut contrôler le comportement du code en utilisant le (s) paramètre (s), mais la méthode run() d'un IAction retourne void, donc je peux ne retourne pas de chaîne. Il y a notifyResult(), mais cela ne prend qu'un booléen.
En résumé:
Travaux:
- code d'appel de antisèche
- En utilisant les paramètres passés dans le code Java
Problème:
- Impossible de renvoyer une valeur de chaîne à afficher dans la feuille de triche.
Solution possible 2: en utilisant des commandes ...
La feuille de triche xml permet également à l'élément <command>
. C'est un peu moins pratique à utiliser car la commande nécessite une 'sérialisation', mais elle a l'avantage que la méthode execute() peut retourner n'importe quel objet java, y compris la chaîne que je veux retourner. En utilisant les commandes, j'ai également réussi à invoquer mon code d'éclipse de la feuille de triche et je peux retourner une corde à la feuille de triche et l'afficher là, MAIS je ne peux pas accéder aux paramètres que j'essaye de passer dans la méthode execute().
En résumé:
Travaux:
- Indicatif téléphonique de antisèche
- retourne une chaîne à la feuille de triche
Problème:
- Impossible d'accéder aux paramètres transmis depuis la feuille de triche.
Prochaines étapes:
À moins quelqu'un peut suggérer une façon de renvoyer une chaîne à partir d'une méthode de course d'action(), je ne pense pas que je peux utiliser des actions pour obtenir ce que je veux.
Je pense que mon meilleur pari utilise des commandes, et basées sur la première étape de la feuille de triche ci-dessous, il doit sûrement possible. Le documentation dit que je devrais fournir un "ParameterizedCommand sérialisé". Je pense que le problème est que je ne comprends pas comment un ParameterizedCommand fonctionne, et je trouve la documentation complètement opaque.
Je pourrais mettre en œuvre une commande pour chaque comportement possible de chaque étape de chaque feuille de triche, mais je pense que cela se traduira rapidement par la duplication de code horrible.
Ma feuille de triche est assez simple:
<?xml version="1.0" encoding="UTF-8"?>
<cheatsheet title="Example Cheat Sheet">
<intro>
<description>This Cheat Sheet will invoke some actions and commands.</description>
</intro>
<item
title="Get a Cheat Sheet variable">
<description>
Pick foo or bar...
</description>
<command returns="selection" serialization="org.eclipse.ui.dialogs.openMessageDialog(title=Select One,buttonLabel0=foo,message=Select a button,buttonLabel1=bar)"/>
<onCompletion><b>${selection} selected</b></onCompletion>
</item>
<item
title="Invoke an Action">
<description>
Click...
</description>
<action class="com.example.cheatsheets.CheatSheet1.CheatSheet1ActionHandler" pluginId="SimpleSerializedCommand" param1="${selection}"/>
</item>
<item title="Invoke a Command">
<description>Click...</description>
<command returns="result2" serialization="com.example.cheatsheets.CheatSheet1.SimpleSerializedCommand.command1(firstParameter=${selection})" />
<onCompletion><b>${result2}</b></onCompletion>
</item>
</cheatsheet>
Je tente d'accéder aux paramètres en utilisant des exemples de code I trouvé en ligne.
Mon gestionnaire ressemble à ceci:
public class CheatSheet1CommandHandler extends org.eclipse.core.commands.AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
String action = event.getParameter("firstParameter");
if (action == null)
return "I got NULL!";
else if (action.equals("foo"))
return "Hooray!";
else
return "Boo!";
}
}
action
est toujours nulle.
J'ai créé ma commande dans mon plug-in comme ci-dessous:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.cheatsheets.cheatSheetContent">
<category
id="SimpleSerializedCommand.CSCategory1"
name="CSCategory1">
</category>
<cheatsheet
category="SimpleSerializedCommand.CSCategory1"
composite="false"
contentFile="CheatSheet1Content.xml"
id="SimpleSerializedCommand.cheatsheet1"
name="CheatSheet1">
</cheatsheet>
</extension>
<extension
point="org.eclipse.ui.commands">
<category
id="SimpleSerializedCommand.CommandCategory1"
name="CommandCategory1">
</category>
<command
categoryId="SimpleSerializedCommand.CommandCategory1"
defaultHandler="com.example.cheatsheets.CheatSheet1.SimpleSerializedCommand.command1"
id="com.example.cheatsheets.CheatSheet1.SimpleSerializedCommand.command1"
name="command1">
<commandParameter
id="SimpleSerializedCommand.firstParameter"
name="firstParameter"
optional="false"
typeId="java.lang.String">
</commandParameter>
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.example.cheatsheets.CheatSheet1.CheatSheet1CommandHandler"
commandId="com.example.cheatsheets.CheatSheet1.SimpleSerializedCommand.command1">
</handler>
</extension>
</plugin>
Je soupçonne un peu plus de code ou set-up est nécessaire - peut-être quelque chose à voir avec ParameterizedCommand
s, comme this, mais je aucune idée où un tel code devrait être ajouté.
tl; dr Résumé:
Comment puis-je:
- Retour d'une chaîne d'une action à une feuille de triche, ou
- Régler ma configuration code/plug-in afin Je peux accéder aux paramètres passés dans le gestionnaire de ma commande
Tous les aide/pointeurs/commentaires constructifs appréciés.
Votre identifiant commandParameter est 'SimpleSerializedCommand.firstParameter' mais vous utilisez' firstParameter' partout ailleurs. Changez les identifiants pour correspondre. –
@ greg-449: assez embarrassant, c'était vraiment aussi simple. Voulez-vous l'afficher comme une réponse que je peux accepter? –