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"));

http://dive4elements.wald.intevation.org