# HG changeset patch # User Sascha L. Teichmann # Date 1367522624 -7200 # Node ID 9a3ca7532f2a190a5fa68df4d0d234d90a223d9b # Parent f59ff0ddc00486365f69b1123382f6e6cd8ab9db Datacage: Repaired and simplified dc:filter code. diff -r f59ff0ddc004 -r 9a3ca7532f2a artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Thu May 02 20:55:08 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java Thu May 02 21:23:44 2013 +0200 @@ -263,9 +263,21 @@ && !connectionsStack.peek().getB().isEmpty(); } - protected ResultData createFilteredResultData(ResultData rd, String filter) { + protected ResultData createFilteredResultData( + ResultData rd, + String filter + ) { if (filter == null) return rd; + XPathExpression x; + try { + x = getXPathExpression(filter); + } + catch (XPathExpressionException xee) { + log.warn("Invalid filter expression '" + filter + "'."); + return rd; + } + List rows = rd.getRows(); String [] columns = rd.getColumnLabels(); @@ -275,21 +287,22 @@ frames.enter(); try { frames.put(columns, row); - boolean traverse = filter == null; + Object result = x.evaluate( + EVAL_DOCUMENT, XPathConstants.BOOLEAN); - if (!traverse) { - Boolean b = evaluateXPathToBoolean(filter); - traverse = b != null && b; - } - if (traverse) { + if (result instanceof Boolean && (Boolean)result) { filtered.add(row); } } + catch (XPathExpressionException xee) { + log.warn("unable to apply filter expression '" + + filter + "' to dataset."); + } finally { frames.leave(); } } - return new ResultData(rd.getColumnLabels(), filtered); + return new ResultData(columns, filtered); } protected void filter(Node parent, Element current)