Для Tl; др см Резюме в нижней части.
Моя цель в значительной степени сведена в названии вопроса:Как передать параметр строки из затмения cheet листа в какой-то код Java и возвращать значение типа String в шпаргалку
Я хочу передать в качестве параметра строки из шпаргалки затмения, используйте параметр для управления поведением коды, а затем возвращает строку от кода, чтобы он мог отображаться пользователю в обмане.
Возможное решение 1: с помощью действия ...
У меня есть пакет, который содержит несколько затмений шпаргалок. Большинство интерактивных рекомендаций, которые я нашел, говорят об использовании элемента <action>
для вызова кода eclipse и вместе с ICheatSheetAction, это позволяет использовать удобный синтаксис xxml.
Используя действия, мне удалось получить код Eclipse для получения параметров из листа чит-листа и управлять поведением кода с помощью параметров, но метод run() для IAction возвращает void, поэтому я могу 't верните строку. Существует notifyResult(), но это имеет значение boolean.
Резюмируя:
работы:
- Вызов кода из шпаргалку
- Используя переданные параметры в коде Java
Проблема:
- Не удается вернуть значение строки, которое будет отображаться на обложке.
Возможное решение 2: с помощью команд ...
Листа XML-мошенника также позволяет <command>
элемента. Это немного менее удобно использовать, потому что команде требуется «сериализация», но имеет то преимущество, что метод execute() может возвращать любой Java-объект, включая строку, которую я хочу вернуть.
Используя команды, мне также удалось вызвать мой код затмения из листа чит-листа, и я могу вернуть строку обратно на страницу обмана и отобразить ее там, НО я не могу получить доступ к параметрам, которые я пытаюсь передать в метод execute().
В итоге:
работ:
- Calling код из шпаргалки
- возвращающей строку в шпаргалке
Проблема:
- Невозможно получить доступ к параметрам, переданным с чит-листа.
Следующие шаги:
Если кто-нибудь может предложить способ вернуть строку из запустить действие в() метод, я не думаю, что я могу использовать действия, чтобы достичь того, чего я хочу.
Я думаю, что моя лучшая ставка с помощью команд, и на основе первого этапа шпаргалку ниже, должен, конечно возможно. documentation говорит, что я должен предоставить «сериализованный ParameterizedCommand». Я думаю, проблема в том, что я не понимаю, как работает ParameterizedCommand, и я нахожу документацию совершенно непрозрачной.
Я мог бы реализовать команду для каждого возможного поведения каждого шага каждого чит-листа, но я думаю, что это быстро перерастет в ужасающее дублирование кода.
Моя шпаргалка довольно просто:
<?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>
Я пытаю параметры доступа, используя примеры кода, которые я нашел в Интернете.
Мой обработчик выглядит следующим образом:
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
всегда нуль.
Я настроил свою команду в мой плагин, как показано ниже:
<?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>
Я подозреваю, еще какой-то код или настройку требуется - возможно, что-то делать с ParameterizedCommand
с, как this, но у меня есть не знаю, где такой код должен быть добавлен.
Т.Л., др Резюме:
Как я могу:
- Возвращает строку из действия на шпаргалку или
- Adjust мои настройки кода/плагин так Я могу получить доступ к параметрам, переданным в обработчик моей команды
Все рекомендации/указатели/конструктивные комментарии оценены.
Ваш идентификатор командыParameter является 'SimpleSerializedCommand.firstParameter', но вы используете' firstParameter' везде. Измените идентификаторы для соответствия. –
@ greg-449: довольно смущающе, это действительно было так просто. Вы хотите опубликовать его как ответ, который я могу принять? –