diff artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java @ 7960:fbab10c21e0b

Datacage: Make it possible to group a value tuple into more than one group.
author Sascha L. Teichmann <teichmann@intevation.de>
date Fri, 20 Jun 2014 16:26:26 +0200
parents 36e28ec7ff16
children 7021753b3797
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java	Fri Jun 20 13:45:54 2014 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java	Fri Jun 20 16:26:26 2014 +0200
@@ -54,6 +54,9 @@
 {
     private static Logger log = Logger.getLogger(Builder.class);
 
+    public static final Pattern MAGIC_EXPR_SEPARATOR =
+        Pattern.compile("#!#");
+
     public static final Pattern STRIP_LINE_INDENT =
         Pattern.compile("\\s*\\r?\\n\\s*");
 
@@ -506,9 +509,14 @@
             List<Object []> rows = rd.getRows();
             String [] columns = rd.getColumnLabels();
 
-            XPathExpression x;
+            String [] exprs = MAGIC_EXPR_SEPARATOR.split(expr);
+
+            XPathExpression [] xs = new XPathExpression[exprs.length];
+
             try {
-                x = getXPathExpression(expr);
+                for (int i = 0; i < exprs.length; ++i) {
+                    xs[i] = getXPathExpression(exprs[i]);
+                }
             }
             catch (XPathExpressionException xee) {
                 log.warn("Invalid expression '" + expr + "'.");
@@ -524,16 +532,16 @@
                 try {
                     frames.put(columns, row);
 
-                    Object key = x.evaluate(EVAL_DOCUMENT, returnType);
-
-                    ResultData group = groups.get(key);
+                    for (XPathExpression x: xs) {
+                        Object key = x.evaluate(EVAL_DOCUMENT, returnType);
+                        ResultData group = groups.get(key);
 
-                    if (group == null) {
-                        group = new ResultData(rd.getColumnLabels());
-                        groups.put(key, group);
+                        if (group == null) {
+                            group = new ResultData(rd.getColumnLabels());
+                            groups.put(key, group);
+                        }
+                        group.add(row);
                     }
-
-                    group.add(row);
                 }
                 catch (XPathExpressionException xxe) {
                     log.warn("unable to apply expression '" +

http://dive4elements.wald.intevation.org