diff flys-aft/src/main/java/de/intevation/aft/SyncContext.java @ 4084:9178beeb7b05

Moved DIPS gauge number -> DIPS gauge index. flys-aft/trunk@3514 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 21 Dec 2011 15:16:58 +0000
parents 97de7a552b79
children 859b4781554a
line wrap: on
line diff
--- a/flys-aft/src/main/java/de/intevation/aft/SyncContext.java	Wed Dec 21 14:56:29 2011 +0000
+++ b/flys-aft/src/main/java/de/intevation/aft/SyncContext.java	Wed Dec 21 15:16:58 2011 +0000
@@ -1,14 +1,25 @@
 package de.intevation.aft;
 
+import java.util.Map;
+import java.util.HashMap;
+
+import org.w3c.dom.Document;
+
 import de.intevation.db.ConnectedStatements;
 
-import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Element;
+
+import org.apache.log4j.Logger;
 
 public class SyncContext
 {
-    protected ConnectedStatements aftStatements;
-    protected ConnectedStatements flysStatements;
-    protected Document            dips;
+    private static Logger log = Logger.getLogger(SyncContext.class);
+
+    protected ConnectedStatements  aftStatements;
+    protected ConnectedStatements  flysStatements;
+    protected Document             dips;
+    protected Map<Long, DIPSGauge> numberToGauge;
 
     public SyncContext() {
     }
@@ -21,6 +32,7 @@
         this.aftStatements  = aftStatements;
         this.flysStatements = flysStatements;
         this.dips           = dips;
+        numberToGauge       = indexByNumber(dips);
     }
 
     public ConnectedStatements getAftStatements() {
@@ -51,6 +63,44 @@
         aftStatements.close();
         flysStatements.close();
     }
+
+    public static Long numberToLong(String s) {
+        try {
+            return Long.valueOf(s.trim());
+        }
+        catch (NumberFormatException nfe) {
+        }
+        return null;
+    }
+
+    public Map<Long, DIPSGauge> getDIPSGauges() {
+        return numberToGauge;
+    }
+
+    protected static Map<Long, DIPSGauge> indexByNumber(Document document) {
+        Map<Long, DIPSGauge> map = new HashMap<Long, DIPSGauge>();
+        NodeList nodes = document.getElementsByTagName("PEGELSTATION");
+        for (int i = nodes.getLength()-1; i >= 0; --i) {
+            Element element = (Element)nodes.item(i);
+            String numberString = element.getAttribute("NUMMER");
+            Long number = numberToLong(numberString);
+            if (number != null) {
+                DIPSGauge newG = new DIPSGauge(element);
+                DIPSGauge oldG = map.put(number, newG);
+                if (oldG != null) {
+                    log.warn("DIPS: '" + newG.getName() +
+                        "' collides with '" + oldG.getName() + 
+                        "' on gauge number " + number + ".");
+                }
+            }
+            else {
+                log.warn("DIPS: gauge '" + element.getAttribute("NAME") +
+                    "' has invalid gauge number '" + numberString + "'");
+            }
+        }
+        return map;
+    }
+
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
 

http://dive4elements.wald.intevation.org