diff flys-aft/src/main/java/de/intevation/aft/SyncContext.java @ 4090:d556e29592f5

Create new discharge tables if needed. flys-aft/trunk@3590 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 04 Jan 2012 17:59:26 +0000
parents 859b4781554a
children b6a18d706cbe
line wrap: on
line diff
--- a/flys-aft/src/main/java/de/intevation/aft/SyncContext.java	Tue Jan 03 12:25:06 2012 +0000
+++ b/flys-aft/src/main/java/de/intevation/aft/SyncContext.java	Wed Jan 04 17:59:26 2012 +0000
@@ -3,8 +3,7 @@
 import java.util.Map;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.TreeMap;
 
 import java.sql.SQLException;
 import java.sql.ResultSet;
@@ -22,11 +21,12 @@
 {
     private static Logger log = Logger.getLogger(SyncContext.class);
 
-    protected ConnectedStatements  aftStatements;
-    protected ConnectedStatements  flysStatements;
-    protected Document             dips;
-    protected Map<Long, DIPSGauge> numberToGauge;
-    protected Set<TimeInterval>    flysTimeIntervals;
+    protected ConnectedStatements             aftStatements;
+    protected ConnectedStatements             flysStatements;
+    protected Document                        dips;
+
+    protected Map<Long, DIPSGauge>            numberToGauge;
+    protected Map<TimeInterval, TimeInterval> flysTimeIntervals;
 
     public SyncContext() {
     }
@@ -112,11 +112,14 @@
         return map;
     }
 
-    protected Set<TimeInterval> loadTimeIntervals() throws SQLException {
+    protected Map<TimeInterval, TimeInterval> loadTimeIntervals() 
+    throws SQLException {
 
         boolean debug = log.isDebugEnabled();
 
-        Set<TimeInterval> intervals = new TreeSet<TimeInterval>();
+        Map<TimeInterval, TimeInterval> intervals =
+            new TreeMap<TimeInterval, TimeInterval>();
+
         ResultSet rs = null;
         
         try {
@@ -136,7 +139,7 @@
                 }
 
                 TimeInterval ti = new TimeInterval(id, start, stop);
-                intervals.add(ti);
+                intervals.put(ti, ti);
             }
         }
         finally {
@@ -152,6 +155,44 @@
         return intervals;
     }
 
+    public TimeInterval fetchOrCreateFLYSTimeInterval(TimeInterval key)
+    throws SQLException
+    {
+        TimeInterval old = flysTimeIntervals.get(key);
+        if (old != null) {
+            return old;
+        }
+
+        ResultSet rs = null;
+        try {
+            rs = flysStatements.getStatement("next.timeinterval.id")
+                .executeQuery();
+            rs.next();
+            key.setId(rs.getInt("time_interval_id"));
+            rs.close(); rs = null;
+
+            flysStatements.getStatement("insert.timeinterval")
+                .clearParameters()
+                .setInt("id", key.getId())
+                .setObject("start_time", key.getStart())
+                .setObject("stop_time", key.getStop())
+                .execute();
+
+            if (log.isDebugEnabled()) {
+                log.debug("FLYS: Created time interval id: " + key.getId());
+            }
+        }
+        finally {
+            if (rs != null) {
+                rs.close();
+            }
+        }
+
+        flysTimeIntervals.put(key, key);
+
+        return key;
+    }
+
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
 

http://dive4elements.wald.intevation.org