Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/Builder.java @ 5892:9a3ca7532f2a
Datacage: Repaired and simplified dc:filter code.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 02 May 2013 21:23:44 +0200 |
parents | 6ea004d51203 |
children | 95cb104a871b |
comparison
equal
deleted
inserted
replaced
5891:f59ff0ddc004 | 5892:9a3ca7532f2a |
---|---|
261 public boolean hasResult() { | 261 public boolean hasResult() { |
262 return !connectionsStack.isEmpty() | 262 return !connectionsStack.isEmpty() |
263 && !connectionsStack.peek().getB().isEmpty(); | 263 && !connectionsStack.peek().getB().isEmpty(); |
264 } | 264 } |
265 | 265 |
266 protected ResultData createFilteredResultData(ResultData rd, String filter) { | 266 protected ResultData createFilteredResultData( |
267 ResultData rd, | |
268 String filter | |
269 ) { | |
267 if (filter == null) return rd; | 270 if (filter == null) return rd; |
271 | |
272 XPathExpression x; | |
273 try { | |
274 x = getXPathExpression(filter); | |
275 } | |
276 catch (XPathExpressionException xee) { | |
277 log.warn("Invalid filter expression '" + filter + "'."); | |
278 return rd; | |
279 } | |
268 | 280 |
269 List<Object []> rows = rd.getRows(); | 281 List<Object []> rows = rd.getRows(); |
270 String [] columns = rd.getColumnLabels(); | 282 String [] columns = rd.getColumnLabels(); |
271 | 283 |
272 List<Object []> filtered = new ArrayList<Object[]>(rows.size()); | 284 List<Object []> filtered = new ArrayList<Object[]>(rows.size()); |
273 | 285 |
274 for (Object [] row: rows) { | 286 for (Object [] row: rows) { |
275 frames.enter(); | 287 frames.enter(); |
276 try { | 288 try { |
277 frames.put(columns, row); | 289 frames.put(columns, row); |
278 boolean traverse = filter == null; | 290 Object result = x.evaluate( |
279 | 291 EVAL_DOCUMENT, XPathConstants.BOOLEAN); |
280 if (!traverse) { | 292 |
281 Boolean b = evaluateXPathToBoolean(filter); | 293 if (result instanceof Boolean && (Boolean)result) { |
282 traverse = b != null && b; | |
283 } | |
284 if (traverse) { | |
285 filtered.add(row); | 294 filtered.add(row); |
286 } | 295 } |
296 } | |
297 catch (XPathExpressionException xee) { | |
298 log.warn("unable to apply filter expression '" + | |
299 filter + "' to dataset."); | |
287 } | 300 } |
288 finally { | 301 finally { |
289 frames.leave(); | 302 frames.leave(); |
290 } | 303 } |
291 } | 304 } |
292 return new ResultData(rd.getColumnLabels(), filtered); | 305 return new ResultData(columns, filtered); |
293 } | 306 } |
294 | 307 |
295 protected void filter(Node parent, Element current) | 308 protected void filter(Node parent, Element current) |
296 throws SQLException | 309 throws SQLException |
297 { | 310 { |