Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/Builder.java @ 959:a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
flys-artifacts/trunk@2378 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 20 Jul 2011 16:28:49 +0000 |
parents | e91996b46e3c |
children | 3ba4f5a88c20 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/Builder.java Wed Jul 20 15:06:16 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/Builder.java Wed Jul 20 16:28:49 2011 +0000 @@ -206,21 +206,12 @@ continue; } - try { - XPath xpath = XPATH_FACTORY.newXPath(); - xpath.setXPathVariableResolver(frames); - Object result = xpath.evaluate( - test, EVAL_DOCUMENT, XPathConstants.BOOLEAN); + Boolean result = evaluateXPath(test); + if (result != null && result.booleanValue()) { + branch = child; + break; + } - if (result instanceof Boolean - && ((Boolean)result).booleanValue()) { - branch = child; - break; - } - } - catch (XPathExpressionException xfce) { - log.error(xfce); - } continue; } else if ("otherwise".equals(name)) { @@ -237,6 +228,24 @@ } } + protected Boolean evaluateXPath(String expr) { + try { + XPath xpath = XPATH_FACTORY.newXPath(); + xpath.setXPathVariableResolver(frames); + xpath.setXPathFunctionResolver(FunctionResolver.FUNCTIONS); + Object result = xpath.evaluate( + expr, EVAL_DOCUMENT, XPathConstants.BOOLEAN); + + return result instanceof Boolean + ? (Boolean)result + : null; + } + catch (XPathExpressionException xfce) { + log.error(xfce); + } + return null; + } + protected void convert(Node parent, Element current) { String variable = expand(current.getAttribute("var"));