Mercurial > dive4elements > river
changeset 7962:e98ebf6585ad
merged.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Fri, 20 Jun 2014 16:33:36 +0200 |
parents | 598e4bec920b (current diff) fbab10c21e0b (diff) |
children | 7f1143972f16 |
files | |
diffstat | 2 files changed, 28 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/doc/datacage_ref_de.rst Fri Jun 20 16:33:09 2014 +0200 +++ b/artifacts/doc/datacage_ref_de.rst Fri Jun 20 16:33:36 2014 +0200 @@ -407,6 +407,16 @@ </marke> </marken> +Der Expr-Ausdruck kann mittels der Zeichenfolge '#!#' innerhalb des Ausdrucks +in mehrere Ausdrücke zerlegt werden. Damit ist es möglich, einen Wert +in mehrere Kategorien einzusortieren. Wird z.B. ein Film über den Zeitraum +von zwei Jahren gedreht und man möchte eine Liste von Filmen nach ihren +Produktionsjahren gruppieren, sollte der Film im Resulat in beiden Jahren auftauchen. + +.. code:: xml + + <dc:group expr="$start_jahr #!# $end_jahr"> + Datensätze auffalten ~~~~~~~~~~~~~~~~~~~~
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Fri Jun 20 16:33:09 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Fri Jun 20 16:33:36 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 '" +