如何将 String 参数从 eclipse cheet sheet 传递给一些 java 代码和 return 将字符串值传递给 cheet sheet

How to pass a String parameter from an eclipse cheet sheet to some java code and return a String value to the cheat sheet

对于 tl;dr,请参阅底部的 摘要
我的 objective 已经在问题的标题中得到了很好的总结:

我想从eclipse cheat中传入一个字符串参数sheet,使用参数来控制代码的行为,然后return从代码,所以它可以在作弊 sheet.

中显示给用户

可能的解决方案 1:使用操作...

我有一个包,其中包含一些 eclipse 作弊 sheets。我找到的大多数在线指南都在谈论使用 <action> 元素调用 eclipse 代码,并与 ICheatSheetAction 一起使用,这允许使用方便的 paramN = value xml 语法。

使用操作,我已经设法让我的 eclipse 代码从作弊 sheet 接收参数,并且可以使用参数控制代码的行为,但是 运行() 方法IAction 的 return 无效,所以我不能 return 一个字符串。有 notifyResult(),但只需要一个布尔值。

总结:
作品:

问题:

可能的解决方案2:使用命令...

作弊 sheet xml 也允许 <command> 元素。这个使用起来稍微不太方便,因为命令需要'serializing',但是它的好处是execute()方法可以return任何javaObject,包括字符串I想要return.

使用命令,我还设法从作弊 sheet 调用我的 eclipse 代码,我可以 return 一个字符串返回给作弊 sheet 并在那里显示它,但是我无法访问我试图传递给 execute() 方法的参数。

总结:
作品:

问题:

后续步骤:

除非有人可以建议一种从 Action 的 运行() 方法中 return String 的方法,否则我认为我无法使用操作来实现我想要的。

我认为我最好的选择是使用命令,并且根据下面作弊 sheet 的第一步,必须 肯定 是可能的。 documentation says that I should provide a "serialized ParameterizedCommand". I think the problem is that I don't understand how a ParameterizedCommand 有效,我发现文档完全不透明。

我可以为每个作弊的每个步骤的每个可能行为实施一个命令 sheet,但我认为这将很快变成可怕的代码重复。

我的秘籍sheet很简单:

<?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>

我怀疑需要更多代码或 set-up - 可能与 ParameterizedCommand 相关,例如 this,但我不知道应该在何处添加此类代码。

tl;dr 摘要:

我怎样才能:

  1. Return 从动作到作弊的字符串 sheet,或者
  2. 调整我的 code/plugin 设置,以便我可以访问传递到命令处理程序的参数

感谢所有 help/pointers/constructive 条评论。

您的 commandParameter ID 是 SimpleSerializedCommand.firstParameter 但您在其他任何地方都使用 firstParameter。更改 ID 以匹配所有位置。

请注意,name 属性应该是 'human readable' 名称,UI 在需要显示相关信息时使用该名称。