# HG changeset patch # User Sascha L. Teichmann # Date 1357137742 -3600 # Node ID f6d0ad25f1ee81104afbb482e6801466f7fd86c4 # Parent fb135e1dfa35e438827537aea174ab15c07e2b7b# Parent 5014a84c0c7dcdf4e57fbc14f576bf55bdf38189 Merged diff -r 5014a84c0c7d -r f6d0ad25f1ee flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/Builder.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/Builder.java Wed Jan 02 15:24:18 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/Builder.java Wed Jan 02 15:42:22 2013 +0100 @@ -1,34 +1,36 @@ package de.intevation.flys.artifacts.datacage.templating; -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.Map; -import java.util.Deque; -import java.util.ArrayDeque; - -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; -import org.w3c.dom.Node; -import org.w3c.dom.Element; - -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathFactory; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathConstants; - -import java.sql.SQLException; -import java.sql.Connection; - import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.flys.utils.Pair; +import java.sql.Connection; +import java.sql.SQLException; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.xml.namespace.QName; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + public class Builder { @@ -82,7 +84,6 @@ } } // class NamedConnection - public class BuildHelper { protected Node output; @@ -402,7 +403,7 @@ } } - protected Object evaluateXPath(String expr) { + protected Object evaluateXPath(String expr, QName returnType) { if (log.isDebugEnabled()) { log.debug("evaluate: '" + expr + "'"); @@ -412,17 +413,17 @@ XPath xpath = XPATH_FACTORY.newXPath(); xpath.setXPathVariableResolver(frames); xpath.setXPathFunctionResolver(FunctionResolver.FUNCTIONS); - return xpath.evaluate(expr, EVAL_DOCUMENT, XPathConstants.BOOLEAN); + return xpath.evaluate(expr, EVAL_DOCUMENT, returnType); } - catch (XPathExpressionException xfce) { - log.error("expression: " + expr, xfce); + catch (XPathExpressionException xpee) { + log.error("expression: " + expr, xpee); } return null; } protected Boolean evaluateXPathToBoolean(String expr) { - Object result = evaluateXPath(expr); + Object result = evaluateXPath(expr, XPathConstants.BOOLEAN); return result instanceof Boolean ? (Boolean)result @@ -442,16 +443,20 @@ } } + protected void variable(Element current) { String varName = expand(current.getAttribute("name")); String expr = current.getAttribute("expr"); + String type = current.getAttribute("type"); if (varName.length() == 0 || expr.length() == 0) { log.error("dc:variable 'name' or 'expr' empty."); } else { - frames.put(varName.toUpperCase(), evaluateXPath(expr)); + frames.put( + varName.toUpperCase(), + evaluateXPath(expr, typeToQName(type))); } } @@ -563,6 +568,14 @@ compileStatements(); } + protected static QName typeToQName(String type) { + if ("number" .equals(type)) return XPathConstants.NUMBER; + if ("bool" .equals(type)) return XPathConstants.BOOLEAN; + if ("node" .equals(type)) return XPathConstants.NODE; + if ("nodeset".equals(type)) return XPathConstants.NODESET; + return XPathConstants.STRING; + } + /** Handle elements. */ protected void compileStatements() {