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 {

http://dive4elements.wald.intevation.org