2013-10-10 3 views
4

В настоящее время я внедряю приложение Eclipse 4.3 и сталкиваюсь с проблемой. Я пытаюсь параметризовать команду для удаления определенных файлов. Мой подход соответствует Getting parameter of parameterized command in Eclipse RCP 4.2, но я как-то не понимаю, как он работает.Как ввести параметр ParameterizedCommand в Eclipse 4.3?

В моей Application.e4xmi я добавил команду с параметром:

<commands xmi:id="_K1MVgDGKEeOO8o2ChqdHMA" elementId="first.application.command.deleteproject" commandName="deleteProjectCommand"> 
<parameters xmi:id="_Hr4FEDGTEeOO8o2ChqdHMA" elementId="cmd0" name="cmd0" typeId="" optional="false"/> 
</commands> 

В один момент в моем коде я создаю команду, установите параметр, и выполнить его:

Map<String, String> parameters = new HashMap<String, String>(); 
parameters.put("cmd0", "test"); 
final Command command =commandService.getCommand("first.application.command.deleteproject"); 
final ParameterizedCommand pcmd = ParameterizedCommand.generateCommand(command, parameters); 
pcmd.executeWithChecks(null, null); 

у меня есть обработчик, который связан с командой, которая имеет следующий выполнить метод:

@Execute 
public void execute(@Optional @Named("cmd0") String file) { 
    System.out.println("delete project " + file); 
} 

Все работает нормально, только file не вводится, он остается null. Когда я проверяю переменную pcmd перед ее выполнением, она сообщает мне, что она правильно установила параметры {cmd0=test} (используя System.out.println(pcmd.getParameterMap());). Когда я удаляю @Optional, метод execute вообще не вызывается.

Где-то параметр cmd0 утерян. Где ошибка в моем коде?

Спасибо!

ответ

5

Просто нашли решение. Выполнение команды pcmd.executeWithChecks(null, null); похоже не работает должным образом. Вместо этого нам понадобится EHandlerService, что мы вводим:

@Inject 
private EHandlerService handlerService; 

И теперь мы выполняем команду с сервисом, как это:

handlerService.executeHandler(pcmd); 

вуаля!

Надеюсь, это тоже поможет кому-то.