Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsFilterBuilder.java @ 3785:a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk
........
r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line
fix issue865 - missing showarea theme prop.
........
r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line
Add robustness checks to prevent NPEs
........
r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line
i18n for area label (fix issue487).
........
r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line
Update themes to show point descriptions
........
r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines
Removed incorrect characteristic diameter.
........
r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines
Fixed some stupid bugs in bed quality data factory and calculation.
........
r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line
The usual whitespace and import cleanups.
........
r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line
Use generics aware Collections.emptyList().
........
r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line
Some more little steps towards "Auslagerung extremer Wasserspiegellagen".
........
r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line
A and B facets of fix analyis are now deactivated by default
........
r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines
Add the gauge station to the GaugeOverviewInfoService xml response
........
r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines
Added CSV export to bed quality calculation.
........
r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines
Fix date in changelog entry
........
r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line
Removed trailing whitespace.
........
flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 19 Sep 2012 14:58:31 +0000 |
parents | 0f7abd95c6e2 |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.model; import de.intevation.flys.artifacts.model.FixingsOverview.AndFilter; import de.intevation.flys.artifacts.model.FixingsOverview.DateFilter; import de.intevation.flys.artifacts.model.FixingsOverview.DateRangeFilter; import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter; import de.intevation.flys.artifacts.model.FixingsOverview.IdFilter; import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter; import de.intevation.flys.artifacts.model.FixingsOverview.KmFilter; import de.intevation.flys.artifacts.model.FixingsOverview.NotFilter; import de.intevation.flys.artifacts.model.FixingsOverview.OrFilter; import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter; import de.intevation.flys.artifacts.model.FixingsOverview.SectorRangeFilter; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class FixingsFilterBuilder { private static Logger log = Logger.getLogger(FixingsFilterBuilder.class); protected Filter filter; protected Range range; protected Document document; public FixingsFilterBuilder() { } public FixingsFilterBuilder(Document document) { this.document = document; } public Filter getFilter() { if (filter == null) { filter = buildFilter(); } return filter; } public Range getRange() { if (range == null) { range = buildRange(); } return range; } public Document getDocument() { return document; } protected Range buildRange() { NodeList ranges = document.getElementsByTagName("range"); if (ranges.getLength() < 1) { return FixingsOverview.FULL_EXTENT; } Element range = (Element)ranges.item(0); String from = range.getAttribute("from").trim(); String to = range.getAttribute("to" ).trim(); double start = -Double.MAX_VALUE; double end = Double.MAX_VALUE; if (from.length() > 0) { try { start = Double.parseDouble(from); } catch (NumberFormatException nfe) { log.warn("Invalid from value: " + from); } } if (to.length() > 0) { try { end = Double.parseDouble(to); } catch (NumberFormatException nfe) { log.warn("Invalid to value: " + to); } } if (start > end) { double t = start; start = end; end = t; } return new Range(start, end); } protected Filter buildFilter() { NodeList filters = document.getElementsByTagName("filter"); return filters.getLength() < 1 ? FixingsOverview.ACCEPT : buildFilter((Element)filters.item(0)); } protected static Filter buildFilter(Element root) { List<Filter> filters = buildRecursiveFilter(root); switch (filters.size()) { case 0: return FixingsOverview.ACCEPT; case 1: return filters.get(0); default: return new AndFilter(filters); } } protected static final Date parseDate(String text) { SimpleDateFormat format = new SimpleDateFormat(FixingsOverview.DATE_FORMAT); return format.parse(text, new ParsePosition(0)); } protected static List<Filter> buildRecursiveFilter(Element root) { List<Filter> filters = new ArrayList<Filter>(); NodeList children = root.getChildNodes(); for (int i = 0, N = children.getLength(); i < N; ++i) { Node child = children.item(i); if (child.getNodeType() != Node.ELEMENT_NODE) { continue; } Element element = (Element)child; String name = element.getLocalName(); if ("and".equals(name)) { filters.add(new AndFilter(buildRecursiveFilter(element))); } else if ("or".equals(name)) { filters.add(new OrFilter(buildRecursiveFilter(element))); } else if ("not".equals(name)) { List<Filter> childrenFilters = buildRecursiveFilter(element); if (!childrenFilters.isEmpty()) { filters.add(new NotFilter(childrenFilters.get(0))); } } else if ("column".equals(name)) { String cid = element.getAttribute("cid").trim(); if (cid.length() > 0) { try { filters.add(new IdFilter(Integer.parseInt(cid))); } catch (NumberFormatException nfe) { log.warn(nfe); } } } else if ("columns".equals(name)) { String cidsS = element.getAttribute("cids").trim(); String [] parts = cidsS.split("\\s+"); List<Integer> ids = new ArrayList<Integer>(); for (String part: parts) { try { ids.add(Integer.valueOf(part)); } catch (NumberFormatException nfe) { log.warn(nfe); } } int [] cids = new int[ids.size()]; for (int j = 0; j < cids.length; ++j) { cids[j] = ids.get(j); } filters.add(new IdsFilter(cids)); } else if ("date".equals(name)) { String when = element.getAttribute("when").trim(); if (when.length() > 0) { Date date = parseDate(when); if (date != null) { filters.add(new DateFilter(date)); } } } else if ("date-range".equals(name)) { String from = element.getAttribute("from").trim(); String to = element.getAttribute("to" ).trim(); if (from.length() > 0 && to.length() > 0) { Date start = parseDate(from); Date end = parseDate(to); if (start != null && end != null) { filters.add(new DateRangeFilter(start, end)); } } } else if ("sector-range".equals(name)) { String from = element.getAttribute("from").trim(); String to = element.getAttribute("to" ).trim(); if (from.length() > 0 && to.length() > 0) { try { filters.add(new SectorRangeFilter( Integer.parseInt(from), Integer.parseInt(to))); } catch (NumberFormatException nfe) { log.warn(nfe); } } } else if ("sector".equals(name)) { String value = element.getAttribute("value").trim(); if (value.length() > 0) { try { filters.add(new SectorFilter(Integer.parseInt(value))); } catch (NumberFormatException nfe) { log.warn(nfe); } } } else if ("position".equals(name)) { String km = element.getAttribute("km").trim(); if (km.length() > 0) { try { filters.add(new KmFilter(Double.parseDouble(km))); } catch (NumberFormatException nfe) { log.warn(nfe); } } } } return filters; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :