# HG changeset patch # User František Kučera # Date 1409848414 -7200 # Node ID 4ba54a632eb85094e97fbbceb9a3303de4644afb # Parent 75556166817a1a52151548b2d51fa06e9ef28cc3 out-xpath: support parameter types: [STRING, BOOLEAN, INTEGER, LONG, DOUBLE] diff -r 75556166817a -r 4ba54a632eb8 java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/XPathAction.java --- a/java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/XPathAction.java Thu Sep 04 18:16:33 2014 +0200 +++ b/java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/XPathAction.java Thu Sep 04 18:33:34 2014 +0200 @@ -21,6 +21,7 @@ import cz.frantovo.alt2xml.out.ActionContext; import cz.frantovo.alt2xml.out.OutputActionException; import java.io.PrintWriter; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -59,7 +60,7 @@ for (int i = 1; i < actionData.size(); i++) { String parameterName = actionData.get(i++); - String parameterType = typedParameters ? actionData.get(i++) : "string"; + String parameterType = typedParameters ? actionData.get(i++) : PARAMETER_TYPE.STRING.name(); Object parameterValue = parseParameterValue(parameterType, actionData.get(i)); xpathParameters.put(parameterName, parameterValue); } @@ -76,9 +77,61 @@ } } - private static Object parseParameterValue(String type, String value) { - // TODO: support more types - return value; + private enum PARAMETER_TYPE { + + // TODO: wait for Java 8 widespread and rewrite with lambdas :-) + STRING { + @Override + public Object parse(String value) { + return value; + } + }, + BOOLEAN { + @Override + public Object parse(String value) { + return Boolean.valueOf(value); + } + }, + INTEGER { + @Override + public Object parse(String value) { + return Integer.parseInt(value); + } + }, + LONG { + @Override + public Object parse(String value) { + return Long.parseLong(value); + } + }, + DOUBLE { + @Override + public Object parse(String value) { + return Double.parseDouble(value); + } + }; + + public abstract Object parse(String value); + + } + + private static Object parseParameterValue(String type, String value) throws OutputActionException { + + try { + PARAMETER_TYPE parameterType = PARAMETER_TYPE.valueOf(type.toUpperCase()); + + try { + return parameterType.parse(value); + } catch (IllegalArgumentException e) { + throw new OutputActionException("Unable to parse value: „" + value + "“ as " + parameterType.name()); + } + } catch (IllegalArgumentException e) { + throw new OutputActionException( + "Invalid XPath parameter type: „" + type + + "“. Possible values are: " + Arrays.toString(PARAMETER_TYPE.values()) + + " and are case insensitive.", + e); + } } @Override