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 :

http://dive4elements.wald.intevation.org