如何将 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(),但只需要一个布尔值。
总结:
作品:
- 调用作弊代码sheet
- 在 Java 代码中使用传递的参数
问题:
- 不能 return 字符串值显示在作弊中 sheet。
可能的解决方案2:使用命令...
作弊 sheet xml 也允许 <command>
元素。这个使用起来稍微不太方便,因为命令需要'serializing',但是它的好处是execute()方法可以return任何javaObject,包括字符串I想要return.
使用命令,我还设法从作弊 sheet 调用我的 eclipse 代码,我可以 return 一个字符串返回给作弊 sheet 并在那里显示它,但是我无法访问我试图传递给 execute() 方法的参数。
总结:
作品:
- 调用作弊代码sheet
- Return给作弊器输入字符串 sheet
问题:
- 无法访问外挂传入的参数sheet.
后续步骤:
除非有人可以建议一种从 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 摘要:
我怎样才能:
-
Return 从动作到作弊的字符串 sheet,或者
-
调整我的 code/plugin 设置,以便我可以访问传递到命令处理程序的参数
感谢所有 help/pointers/constructive 条评论。
您的 commandParameter
ID 是 SimpleSerializedCommand.firstParameter
但您在其他任何地方都使用 firstParameter
。更改 ID 以匹配所有位置。
请注意,name
属性应该是 'human readable' 名称,UI 在需要显示相关信息时使用该名称。
对于 tl;dr,请参阅底部的 摘要。
我的 objective 已经在问题的标题中得到了很好的总结:
我想从eclipse cheat中传入一个字符串参数sheet,使用参数来控制代码的行为,然后return从代码,所以它可以在作弊 sheet.
中显示给用户可能的解决方案 1:使用操作...
我有一个包,其中包含一些 eclipse 作弊 sheets。我找到的大多数在线指南都在谈论使用 <action>
元素调用 eclipse 代码,并与 ICheatSheetAction 一起使用,这允许使用方便的 paramN = value
xml 语法。
使用操作,我已经设法让我的 eclipse 代码从作弊 sheet 接收参数,并且可以使用参数控制代码的行为,但是 运行() 方法IAction 的 return 无效,所以我不能 return 一个字符串。有 notifyResult(),但只需要一个布尔值。
总结:
作品:
- 调用作弊代码sheet
- 在 Java 代码中使用传递的参数
问题:
- 不能 return 字符串值显示在作弊中 sheet。
可能的解决方案2:使用命令...
作弊 sheet xml 也允许 <command>
元素。这个使用起来稍微不太方便,因为命令需要'serializing',但是它的好处是execute()方法可以return任何javaObject,包括字符串I想要return.
使用命令,我还设法从作弊 sheet 调用我的 eclipse 代码,我可以 return 一个字符串返回给作弊 sheet 并在那里显示它,但是我无法访问我试图传递给 execute() 方法的参数。
总结:
作品:
- 调用作弊代码sheet
- Return给作弊器输入字符串 sheet
问题:
- 无法访问外挂传入的参数sheet.
后续步骤:
除非有人可以建议一种从 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 摘要:
我怎样才能:
- Return 从动作到作弊的字符串 sheet,或者
- 调整我的 code/plugin 设置,以便我可以访问传递到命令处理程序的参数
感谢所有 help/pointers/constructive 条评论。
您的 commandParameter
ID 是 SimpleSerializedCommand.firstParameter
但您在其他任何地方都使用 firstParameter
。更改 ID 以匹配所有位置。
请注意,name
属性应该是 'human readable' 名称,UI 在需要显示相关信息时使用该名称。