このコマンドのコマンドとcommandParameterを宣言しました。このcommandParameterの「値」を自分で実装したクラスとして指定しました。このクラスの実装は以下のとおりです。
public class ParameterValues implements IParameterValues {
@Override
public Map<String, Double> getParameterValues() {
// TODO Auto-generated method stub
Map<String, Double> values = new HashMap<String, Double>(2);
values.put("testParam", 1.1239);
values.put("AnotherTest", 4.1239);
return values;
}
}
このコマンドのハンドラーの実装は打撃です、
public class testHandler extends AbstractHandler implements IHandler {
private static String PARAMETER_ID = "my.parameter1";
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
String value = event.getParameter(PARAMETER_ID);
MessageDialog.openInformation(HandlerUtil.getActiveShell(event),
"Test", "Parameter ID: " + PARAMETER_ID + "\nValue: " + value);
return null;
}
}
今、私はメニューにコマンドを提供します、
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu">
<menu
id="my.edit"
label="Edit">
<command
commandId="myCommand.test"
label="Test1">
<parameter
name="my.parameter1"
value="testParam">
</parameter>
</command>
commandParaterに「values」クラスを指定したので、メニューをクリックすると、このコード行「String value = event.getParameter(PARAMETER_ID);」が期待されます。ハンドラークラスでは、「testParam」の代わりに1.1239が返されます。しかし、コード行が「testParam」を返すことはまだわかります。
どうしたの?getParameterValues()によって返されるマップにアクセスするにはどうすればよいですか?
ちなみに、マップで「ppp」を定義しなくても、次のメニュー宣言は機能します。
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu">
<menu
id="my.edit"
label="Edit">
<command
commandId="myCommand.test"
label="Test1">
<parameter
name="my.parameter1"
value="ppp">
</parameter>
</command>
ありがとう!