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)
 	 *