diff flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.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 976ead36192d
children 83838f87e98f
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java	Fri Oct 19 13:59:51 2012 +0200
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java	Mon Oct 22 09:02:26 2012 +0200
@@ -1,34 +1,8 @@
 package de.intevation.flys.importer;
 
-import de.intevation.artifacts.common.utils.FileTools.HashedFile;
-
-import de.intevation.artifacts.common.utils.FileTools;
-
-import de.intevation.flys.importer.parsers.AnnotationClassifier;
-import de.intevation.flys.importer.parsers.AnnotationsParser;
-import de.intevation.flys.importer.parsers.BedHeightEpochParser;
-import de.intevation.flys.importer.parsers.BedHeightSingleParser;
-import de.intevation.flys.importer.parsers.FlowVelocityMeasurementParser;
-import de.intevation.flys.importer.parsers.FlowVelocityModelParser;
-import de.intevation.flys.importer.parsers.HYKParser;
-import de.intevation.flys.importer.parsers.MorphologicalWidthParser;
-import de.intevation.flys.importer.parsers.PRFParser;
-import de.intevation.flys.importer.parsers.PegelGltParser;
-import de.intevation.flys.importer.parsers.SedimentDensityParser;
-import de.intevation.flys.importer.parsers.SedimentYieldParser;
-import de.intevation.flys.importer.parsers.SQRelationParser;
-import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser;
-import de.intevation.flys.importer.parsers.WaterlevelParser;
-import de.intevation.flys.importer.parsers.WstParser;
-
-import de.intevation.flys.model.River;
-import de.intevation.flys.model.Unit;
-
 import java.io.File;
 import java.io.IOException;
-
 import java.sql.SQLException;
-
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -38,11 +12,31 @@
 import java.util.Set;
 
 import org.apache.log4j.Logger;
-
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.exception.ConstraintViolationException;
 
-import org.hibernate.exception.ConstraintViolationException;
+import de.intevation.artifacts.common.utils.FileTools;
+import de.intevation.artifacts.common.utils.FileTools.HashedFile;
+import de.intevation.flys.importer.parsers.AnnotationClassifier;
+import de.intevation.flys.importer.parsers.AnnotationsParser;
+import de.intevation.flys.importer.parsers.BedHeightEpochParser;
+import de.intevation.flys.importer.parsers.BedHeightSingleParser;
+import de.intevation.flys.importer.parsers.FlowVelocityMeasurementParser;
+import de.intevation.flys.importer.parsers.FlowVelocityModelParser;
+import de.intevation.flys.importer.parsers.HYKParser;
+import de.intevation.flys.importer.parsers.MeasurementStationsParser;
+import de.intevation.flys.importer.parsers.MorphologicalWidthParser;
+import de.intevation.flys.importer.parsers.PRFParser;
+import de.intevation.flys.importer.parsers.PegelGltParser;
+import de.intevation.flys.importer.parsers.SQRelationParser;
+import de.intevation.flys.importer.parsers.SedimentDensityParser;
+import de.intevation.flys.importer.parsers.SedimentYieldParser;
+import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser;
+import de.intevation.flys.importer.parsers.WaterlevelParser;
+import de.intevation.flys.importer.parsers.WstParser;
+import de.intevation.flys.model.River;
+import de.intevation.flys.model.Unit;
 
 public class ImportRiver
 {
@@ -97,6 +91,10 @@
 
     public static final String MINFO_WATERLEVEL_DIFF_DIR = "Wasserspiegeldifferenzen";
 
+    public static final String MINFO_BASE_DIR = "Basisdaten";
+
+    public static final String MINFO_CORE_DATA_FILE = "Stammdaten_Messstellen.csv";
+
     public static final String MINFO_SQ_DIR = "Feststofftransport-Abfluss-Beziehung";
 
 
@@ -142,6 +140,8 @@
 
     protected List<ImportWaterlevelDifference> waterlevelDiffs;
 
+    protected List<ImportMeasurementStation> measurementStations;
+
     protected List<ImportSQRelation> sqRelations;
 
     protected ImportWst wst;
@@ -167,6 +167,7 @@
         sedimentYields            = new ArrayList<ImportSedimentYield>();
         waterlevels               = new ArrayList<ImportWaterlevel>();
         waterlevelDiffs           = new ArrayList<ImportWaterlevelDifference>();
+        measurementStations       = new ArrayList<ImportMeasurementStation>();
         sqRelations               = new ArrayList<ImportSQRelation>();
     }
 
@@ -238,6 +239,7 @@
         parseSedimentYield();
         parseWaterlevels();
         parseWaterlevelDifferences();
+        parseMeasurementStations();
         parseSQRelation();
     }
 
@@ -498,6 +500,36 @@
         waterlevels = parser.getWaterlevels();
     }
 
+    protected void parseMeasurementStations() throws IOException {
+        if (Config.INSTANCE.skipMeasurementStations()) {
+            log.info("skip parsing measurement stations");
+            return;
+        }
+
+        log.info("Parse measurement stations");
+
+        File minfo = getMinfoDir();
+        File minfoBaseDir = new File(minfo, MINFO_BASE_DIR);
+        File coredataFile = new File(minfoBaseDir, MINFO_CORE_DATA_FILE);
+
+        if (coredataFile == null || !coredataFile.exists()) {
+            log.warn("No core data file '" + MINFO_CORE_DATA_FILE + "' found");
+            return;
+        }
+
+        MeasurementStationsParser parser = new MeasurementStationsParser();
+        try {
+            parser.parse(coredataFile);
+            measurementStations = parser.getMeasurementStations();
+
+            log.info("Successfully parsed " + measurementStations.size() + " measurement stations.");
+        }
+        catch (IOException ioe) {
+            log.error("unable to parse file '" + coredataFile.getName() +
+                ": " + ioe.getMessage());
+        }
+    }
+
 
     protected void parseWaterlevelDifferences() throws IOException {
         if (Config.INSTANCE.skipWaterlevelDifferences()) {
@@ -929,6 +961,7 @@
         storeSedimentYield();
         storeWaterlevels();
         storeWaterlevelDifferences();
+        storeMeasurementStations();
         storeSQRelations();
     }
 
@@ -1224,6 +1257,34 @@
     }
 
 
+    public void storeMeasurementStations() {
+        if (!Config.INSTANCE.skipMeasurementStations()) {
+            log.info("store measurement stations");
+
+            River river = getPeer();
+
+            int count = 0;
+
+            for (ImportMeasurementStation station: measurementStations) {
+                try {
+                    boolean success = station.storeDependencies(river);
+                    if (success) {
+                        count++;
+                    }
+                }
+                catch (SQLException sqle) {
+                    log.error("Error while storing measurement station.", sqle);
+                }
+                catch (ConstraintViolationException cve) {
+                    log.error("Error while storing measurement station.", cve);
+                }
+            }
+
+            log.info("stored " + count + " measurement stations.");
+        }
+    }
+
+
     public void storeSQRelations() {
         if (!Config.INSTANCE.skipSQRelation()) {
             log.info("store sq relations");

http://dive4elements.wald.intevation.org