Mercurial > dive4elements > river
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");