diff flys-backend/src/main/java/de/intevation/flys/importer/ImportMeasurementStation.java @ 4193:f63b39799d2d

Adapted DB schema (added relation measurement_station); improved importer to read files from filesystem with measurement stations.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 22 Oct 2012 09:02:26 +0200
parents
children 4ee97d914501
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportMeasurementStation.java	Mon Oct 22 09:02:26 2012 +0200
@@ -0,0 +1,112 @@
+package de.intevation.flys.importer;
+
+import java.sql.SQLException;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.hibernate.Session;
+import org.hibernate.exception.ConstraintViolationException;
+
+import de.intevation.flys.model.Gauge;
+import de.intevation.flys.model.MeasurementStation;
+import de.intevation.flys.model.Range;
+import de.intevation.flys.model.River;
+import de.intevation.flys.model.TimeInterval;
+
+
+public class ImportMeasurementStation {
+
+    private static final Logger log = Logger
+        .getLogger(ImportMeasurementStation.class);
+
+    private MeasurementStation peer;
+
+    public String name;
+    public Double station;
+    public ImportRange range;
+    public String measurementType;
+    public String riverside;
+    public String gauge;
+    public ImportTimeInterval observationTimerange;
+    public String operator;
+    public String comment;
+
+    public ImportMeasurementStation() {
+    }
+
+    private Gauge getGaugeFromDB() {
+        Session session = ImporterSession.getInstance().getDatabaseSession();
+
+        org.hibernate.Query query = session
+            .createQuery("FROM Gauge WHERE name=:name");
+
+        query.setParameter("name", gauge);
+        List<Gauge> gauges = query.list();
+
+        return gauges.isEmpty() ? null : gauges.get(0);
+    }
+
+    public boolean storeDependencies(River river) throws SQLException,
+        ConstraintViolationException {
+        getPeer(river);
+
+        return peer != null;
+    }
+
+    public Object getPeer(River river) {
+        if (peer == null) {
+            Gauge gauge = null;
+            try {
+                gauge = getGaugeFromDB();
+                if (gauge == null) {
+                    log.warn("Skip measurement station '" + name
+                        + "': unable to find gauge with name '" + this.gauge
+                        + "'");
+                    return null;
+                }
+            }
+            catch (Exception e) {
+                log.error("Exception: " + e.getMessage());
+            }
+
+            Range range = this.range.getPeer(river);
+            if (range == null) {
+                log.warn("Skip measurement station '" + name
+                    + "': unable to get range");
+                return null;
+            }
+
+            TimeInterval observationTimerange = this.observationTimerange
+                .getPeer();
+            if (observationTimerange == null) {
+                log.warn("Skip measurement station '" + name
+                    + "': unable to get time interval for observation time");
+                return null;
+            }
+
+            Session session = ImporterSession.getInstance()
+                .getDatabaseSession();
+
+            org.hibernate.Query query = session
+                .createQuery("FROM MeasurementStation "
+                    + "   WHERE river=:river AND station=:station");
+
+            query.setParameter("river", river);
+            query.setParameter("station", station);
+
+            List<MeasurementStation> stations = query.list();
+
+            if (stations.isEmpty()) {
+                log.info("create new measurement station '" + name + "'");
+
+                peer = new MeasurementStation(river, name, measurementType,
+                    riverside, station, range, gauge, observationTimerange,
+                    operator, comment);
+
+                session.save(peer);
+            }
+        }
+
+        return peer;
+    }
+}

http://dive4elements.wald.intevation.org