Mercurial > dive4elements > river
changeset 6494:1e97d2e95410
Amtl. Linien: Fixed problem that only a random official line is detect.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 28 Jun 2013 12:52:51 +0200 |
parents | c740a4815bb2 |
children | d1d503584d34 |
files | artifacts/src/main/java/org/dive4elements/river/artifacts/model/OfficialLineFinder.java artifacts/src/main/java/org/dive4elements/river/artifacts/model/Range.java |
diffstat | 2 files changed, 70 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/OfficialLineFinder.java Fri Jun 28 11:25:41 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/OfficialLineFinder.java Fri Jun 28 12:52:51 2013 +0200 @@ -17,6 +17,7 @@ import net.sf.ehcache.Cache; import net.sf.ehcache.Element; +import org.apache.log4j.Logger; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.cache.CacheFactory; import org.dive4elements.river.model.Gauge; @@ -31,6 +32,8 @@ { public static final String CACHE_NAME = "official-lines"; + private static Logger log = Logger.getLogger(OfficialLineFinder.class); + // We will only have one entry in this cache. public static final String CACHE_KEY = CACHE_NAME; @@ -87,6 +90,14 @@ ValueRange r = (ValueRange)o; return wstId == r.wstId && columnPos == r.columnPos; } + + @Override + public String toString() { + return "[" + name + + " value: " + value + + " wstId: " + wstId + + " pos: " + columnPos + "]"; + } } public OfficialLineFinder() { @@ -115,14 +126,16 @@ public static Map<String, List<ValueRange>> getAllUncached() { + boolean debug = log.isDebugEnabled(); + Map<String, List<ValueRange>> rivers2officialLines = new HashMap<String, List<ValueRange>>(); - for (OfficialLine line: OfficialLine.fetchAllOfficalLines()) { - String name = line.getNamedMainValue().getName(); - WstColumn wc = line.getWstColumn(); - Wst wst = wc.getWst(); + NamedMainValue nmv = line.getNamedMainValue(); + Integer mnvId = nmv.getId(); + WstColumn wc = line.getWstColumn(); + Wst wst = wc.getWst(); List<ValueRange> ranges = new ArrayList<ValueRange>(); @@ -131,17 +144,24 @@ for (Gauge gauge: gauges) { List<MainValue> mainValues = gauge.getMainValues(); for (MainValue mainValue: mainValues) { - NamedMainValue nmv = mainValue.getMainValue(); - if (nmv.getName().equalsIgnoreCase(name)) { + NamedMainValue tnmv = mainValue.getMainValue(); + if (tnmv.getId().equals(mnvId)) { // found gauge with this main value - double from = gauge.getRange().getA().doubleValue(); - double to = gauge.getRange().getA().doubleValue(); + double from = gauge.getRange().getA().doubleValue(); + double to = gauge.getRange().getA().doubleValue(); double value = mainValue.getValue().doubleValue(); int wstId = wst.getId(); int pos = wc.getPosition(); - ValueRange range = - new ValueRange(from, to, value, wstId, pos, name); + ValueRange range = new ValueRange( + from, to, value, wstId, pos, nmv.getName()); + + if (debug) { + log.debug( + "river: " + river.getName() + + " gauge: " + gauge.getName() + + " ol: " + range); + } ranges.add(range); break; } @@ -149,7 +169,14 @@ } if (!ranges.isEmpty()) { - rivers2officialLines.put(river.getName(), ranges); + String rname = river.getName(); + List<ValueRange> old = rivers2officialLines.get(rname); + if (old != null) { + old.addAll(ranges); + } + else { + rivers2officialLines.put(rname, ranges); + } } } @@ -163,11 +190,19 @@ } public static Range extractRange(D4EArtifact artifact) { + String mode = nn(artifact.getDataAsString("ld_mode")); String locations = nn(artifact.getDataAsString("ld_locations")); String from = nn(artifact.getDataAsString("ld_from")); String to = nn(artifact.getDataAsString("ld_to")); + if (log.isDebugEnabled()) { + log.debug("ld_mode: '" + mode + "'"); + log.debug("ld_locations: '" + locations + "'"); + log.debug("ld_from: '" + from + "'"); + log.debug("ld_to: '" + to + "'"); + } + if (mode.equals("location")) { try { String loc = locations.replace(" ", ""); @@ -309,9 +344,18 @@ if (ranges == null) { return Collections.<ValueRange>emptyList(); } + boolean debug = log.isDebugEnabled(); + + if (debug) { + log.debug("Before range filter:" + ranges); + } ranges = filterByRange(extractRange(artifact), ranges); + if (debug) { + log.debug("After range filter:" + ranges); + } + if (ranges.isEmpty()) { return Collections.<ValueRange>emptyList(); } @@ -324,6 +368,16 @@ qRange = tripleQRange(artifact); } - return filterByQRange(qRange, ranges); + if (debug) { + log.debug("Q range filter: " + qRange); + } + + ranges = filterByQRange(qRange, ranges); + + if (debug) { + log.debug("After q range filter: " + ranges); + } + + return ranges; } }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/Range.java Fri Jun 28 11:25:41 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/Range.java Fri Jun 28 12:52:51 2013 +0200 @@ -111,5 +111,9 @@ public Object clone() { return new Range(this.start, this.end); } + + public String toString() { + return "[Range: start=" + start + " end=" + end + "]"; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :