Bug 401611 - [Commands] request: convert parameter value back to Object
diff --git a/bundles/org.eclipse.e4.core.commands/src/org/eclipse/e4/core/commands/internal/HandlerServiceImpl.java b/bundles/org.eclipse.e4.core.commands/src/org/eclipse/e4/core/commands/internal/HandlerServiceImpl.java
index e8b565f..aa8d702 100644
--- a/bundles/org.eclipse.e4.core.commands/src/org/eclipse/e4/core/commands/internal/HandlerServiceImpl.java
+++ b/bundles/org.eclipse.e4.core.commands/src/org/eclipse/e4/core/commands/internal/HandlerServiceImpl.java
@@ -14,8 +14,12 @@
import java.util.Iterator;
import java.util.Map;
import javax.inject.Inject;
+import org.eclipse.core.commands.AbstractParameterValueConverter;
import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ParameterType;
+import org.eclipse.core.commands.ParameterValueConversionException;
import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.e4.core.commands.EHandlerService;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
@@ -75,12 +79,41 @@
Iterator i = parms.entrySet().iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
- staticContext.set((String) entry.getKey(), entry.getValue());
+ String parameterId = (String) entry.getKey();
+ staticContext.set(
+ parameterId,
+ convertParameterValue(command.getCommand(), parameterId,
+ (String) entry.getValue()));
}
staticContext.set(PARM_MAP, parms);
staticContext.set(ParameterizedCommand.class, command);
}
+ /**
+ * Convert the parameter's value according to it's type.
+ *
+ * @param command
+ * @param parameterId
+ * @param value
+ * @return converted value
+ * @see org.eclipse.e4.ui.model.application.commands.MCommandParameter#getTypeId()
+ */
+ private Object convertParameterValue(Command command, String parameterId, String value) {
+ try {
+ ParameterType parameterType = command.getParameterType(parameterId);
+
+ if (parameterType != null) {
+ AbstractParameterValueConverter valueConverter = parameterType.getValueConverter();
+ if (valueConverter != null) {
+ return valueConverter.convertToObject(value);
+ }
+ }
+ } catch (NotDefinedException e) {
+ } catch (ParameterValueConversionException e) {
+ }
+ return value;
+ }
+
/*
* (non-Javadoc)
*