Mercurial > dive4elements > river
comparison 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 |
comparison
equal
deleted
inserted
replaced
4192:34337e357a54 | 4193:f63b39799d2d |
---|---|
1 package de.intevation.flys.importer; | 1 package de.intevation.flys.importer; |
2 | 2 |
3 import java.io.File; | |
4 import java.io.IOException; | |
5 import java.sql.SQLException; | |
6 import java.util.ArrayList; | |
7 import java.util.Calendar; | |
8 import java.util.Date; | |
9 import java.util.HashSet; | |
10 import java.util.List; | |
11 import java.util.Map; | |
12 import java.util.Set; | |
13 | |
14 import org.apache.log4j.Logger; | |
15 import org.hibernate.Query; | |
16 import org.hibernate.Session; | |
17 import org.hibernate.exception.ConstraintViolationException; | |
18 | |
19 import de.intevation.artifacts.common.utils.FileTools; | |
3 import de.intevation.artifacts.common.utils.FileTools.HashedFile; | 20 import de.intevation.artifacts.common.utils.FileTools.HashedFile; |
4 | |
5 import de.intevation.artifacts.common.utils.FileTools; | |
6 | |
7 import de.intevation.flys.importer.parsers.AnnotationClassifier; | 21 import de.intevation.flys.importer.parsers.AnnotationClassifier; |
8 import de.intevation.flys.importer.parsers.AnnotationsParser; | 22 import de.intevation.flys.importer.parsers.AnnotationsParser; |
9 import de.intevation.flys.importer.parsers.BedHeightEpochParser; | 23 import de.intevation.flys.importer.parsers.BedHeightEpochParser; |
10 import de.intevation.flys.importer.parsers.BedHeightSingleParser; | 24 import de.intevation.flys.importer.parsers.BedHeightSingleParser; |
11 import de.intevation.flys.importer.parsers.FlowVelocityMeasurementParser; | 25 import de.intevation.flys.importer.parsers.FlowVelocityMeasurementParser; |
12 import de.intevation.flys.importer.parsers.FlowVelocityModelParser; | 26 import de.intevation.flys.importer.parsers.FlowVelocityModelParser; |
13 import de.intevation.flys.importer.parsers.HYKParser; | 27 import de.intevation.flys.importer.parsers.HYKParser; |
28 import de.intevation.flys.importer.parsers.MeasurementStationsParser; | |
14 import de.intevation.flys.importer.parsers.MorphologicalWidthParser; | 29 import de.intevation.flys.importer.parsers.MorphologicalWidthParser; |
15 import de.intevation.flys.importer.parsers.PRFParser; | 30 import de.intevation.flys.importer.parsers.PRFParser; |
16 import de.intevation.flys.importer.parsers.PegelGltParser; | 31 import de.intevation.flys.importer.parsers.PegelGltParser; |
32 import de.intevation.flys.importer.parsers.SQRelationParser; | |
17 import de.intevation.flys.importer.parsers.SedimentDensityParser; | 33 import de.intevation.flys.importer.parsers.SedimentDensityParser; |
18 import de.intevation.flys.importer.parsers.SedimentYieldParser; | 34 import de.intevation.flys.importer.parsers.SedimentYieldParser; |
19 import de.intevation.flys.importer.parsers.SQRelationParser; | |
20 import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser; | 35 import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser; |
21 import de.intevation.flys.importer.parsers.WaterlevelParser; | 36 import de.intevation.flys.importer.parsers.WaterlevelParser; |
22 import de.intevation.flys.importer.parsers.WstParser; | 37 import de.intevation.flys.importer.parsers.WstParser; |
23 | |
24 import de.intevation.flys.model.River; | 38 import de.intevation.flys.model.River; |
25 import de.intevation.flys.model.Unit; | 39 import de.intevation.flys.model.Unit; |
26 | |
27 import java.io.File; | |
28 import java.io.IOException; | |
29 | |
30 import java.sql.SQLException; | |
31 | |
32 import java.util.ArrayList; | |
33 import java.util.Calendar; | |
34 import java.util.Date; | |
35 import java.util.HashSet; | |
36 import java.util.List; | |
37 import java.util.Map; | |
38 import java.util.Set; | |
39 | |
40 import org.apache.log4j.Logger; | |
41 | |
42 import org.hibernate.Query; | |
43 import org.hibernate.Session; | |
44 | |
45 import org.hibernate.exception.ConstraintViolationException; | |
46 | 40 |
47 public class ImportRiver | 41 public class ImportRiver |
48 { | 42 { |
49 private static Logger log = Logger.getLogger(ImportRiver.class); | 43 private static Logger log = Logger.getLogger(ImportRiver.class); |
50 | 44 |
95 | 89 |
96 public static final String MINFO_WATERLEVELS_DIR = "Wasserspiegellagen"; | 90 public static final String MINFO_WATERLEVELS_DIR = "Wasserspiegellagen"; |
97 | 91 |
98 public static final String MINFO_WATERLEVEL_DIFF_DIR = "Wasserspiegeldifferenzen"; | 92 public static final String MINFO_WATERLEVEL_DIFF_DIR = "Wasserspiegeldifferenzen"; |
99 | 93 |
94 public static final String MINFO_BASE_DIR = "Basisdaten"; | |
95 | |
96 public static final String MINFO_CORE_DATA_FILE = "Stammdaten_Messstellen.csv"; | |
97 | |
100 public static final String MINFO_SQ_DIR = "Feststofftransport-Abfluss-Beziehung"; | 98 public static final String MINFO_SQ_DIR = "Feststofftransport-Abfluss-Beziehung"; |
101 | 99 |
102 | 100 |
103 protected String name; | 101 protected String name; |
104 | 102 |
139 protected List<ImportSedimentYield> sedimentYields; | 137 protected List<ImportSedimentYield> sedimentYields; |
140 | 138 |
141 protected List<ImportWaterlevel> waterlevels; | 139 protected List<ImportWaterlevel> waterlevels; |
142 | 140 |
143 protected List<ImportWaterlevelDifference> waterlevelDiffs; | 141 protected List<ImportWaterlevelDifference> waterlevelDiffs; |
142 | |
143 protected List<ImportMeasurementStation> measurementStations; | |
144 | 144 |
145 protected List<ImportSQRelation> sqRelations; | 145 protected List<ImportSQRelation> sqRelations; |
146 | 146 |
147 protected ImportWst wst; | 147 protected ImportWst wst; |
148 | 148 |
165 flowVelocityModels = new ArrayList<ImportFlowVelocityModel>(); | 165 flowVelocityModels = new ArrayList<ImportFlowVelocityModel>(); |
166 flowVelocityMeasurements = new ArrayList<ImportFlowVelocityMeasurement>(); | 166 flowVelocityMeasurements = new ArrayList<ImportFlowVelocityMeasurement>(); |
167 sedimentYields = new ArrayList<ImportSedimentYield>(); | 167 sedimentYields = new ArrayList<ImportSedimentYield>(); |
168 waterlevels = new ArrayList<ImportWaterlevel>(); | 168 waterlevels = new ArrayList<ImportWaterlevel>(); |
169 waterlevelDiffs = new ArrayList<ImportWaterlevelDifference>(); | 169 waterlevelDiffs = new ArrayList<ImportWaterlevelDifference>(); |
170 measurementStations = new ArrayList<ImportMeasurementStation>(); | |
170 sqRelations = new ArrayList<ImportSQRelation>(); | 171 sqRelations = new ArrayList<ImportSQRelation>(); |
171 } | 172 } |
172 | 173 |
173 public ImportRiver( | 174 public ImportRiver( |
174 String name, | 175 String name, |
236 parseMorphologicalWidth(); | 237 parseMorphologicalWidth(); |
237 parseFlowVelocity(); | 238 parseFlowVelocity(); |
238 parseSedimentYield(); | 239 parseSedimentYield(); |
239 parseWaterlevels(); | 240 parseWaterlevels(); |
240 parseWaterlevelDifferences(); | 241 parseWaterlevelDifferences(); |
242 parseMeasurementStations(); | |
241 parseSQRelation(); | 243 parseSQRelation(); |
242 } | 244 } |
243 | 245 |
244 public void parseFloodProtection() throws IOException { | 246 public void parseFloodProtection() throws IOException { |
245 if (Config.INSTANCE.skipFloodProtection()) { | 247 if (Config.INSTANCE.skipFloodProtection()) { |
494 for (File file: files) { | 496 for (File file: files) { |
495 parser.parse(file); | 497 parser.parse(file); |
496 } | 498 } |
497 | 499 |
498 waterlevels = parser.getWaterlevels(); | 500 waterlevels = parser.getWaterlevels(); |
501 } | |
502 | |
503 protected void parseMeasurementStations() throws IOException { | |
504 if (Config.INSTANCE.skipMeasurementStations()) { | |
505 log.info("skip parsing measurement stations"); | |
506 return; | |
507 } | |
508 | |
509 log.info("Parse measurement stations"); | |
510 | |
511 File minfo = getMinfoDir(); | |
512 File minfoBaseDir = new File(minfo, MINFO_BASE_DIR); | |
513 File coredataFile = new File(minfoBaseDir, MINFO_CORE_DATA_FILE); | |
514 | |
515 if (coredataFile == null || !coredataFile.exists()) { | |
516 log.warn("No core data file '" + MINFO_CORE_DATA_FILE + "' found"); | |
517 return; | |
518 } | |
519 | |
520 MeasurementStationsParser parser = new MeasurementStationsParser(); | |
521 try { | |
522 parser.parse(coredataFile); | |
523 measurementStations = parser.getMeasurementStations(); | |
524 | |
525 log.info("Successfully parsed " + measurementStations.size() + " measurement stations."); | |
526 } | |
527 catch (IOException ioe) { | |
528 log.error("unable to parse file '" + coredataFile.getName() + | |
529 ": " + ioe.getMessage()); | |
530 } | |
499 } | 531 } |
500 | 532 |
501 | 533 |
502 protected void parseWaterlevelDifferences() throws IOException { | 534 protected void parseWaterlevelDifferences() throws IOException { |
503 if (Config.INSTANCE.skipWaterlevelDifferences()) { | 535 if (Config.INSTANCE.skipWaterlevelDifferences()) { |
927 storeMorphologicalWidth(); | 959 storeMorphologicalWidth(); |
928 storeFlowVelocity(); | 960 storeFlowVelocity(); |
929 storeSedimentYield(); | 961 storeSedimentYield(); |
930 storeWaterlevels(); | 962 storeWaterlevels(); |
931 storeWaterlevelDifferences(); | 963 storeWaterlevelDifferences(); |
964 storeMeasurementStations(); | |
932 storeSQRelations(); | 965 storeSQRelations(); |
933 } | 966 } |
934 | 967 |
935 public void storeWstUnit() { | 968 public void storeWstUnit() { |
936 if (wst == null) { | 969 if (wst == null) { |
1218 } | 1251 } |
1219 catch (ConstraintViolationException cve) { | 1252 catch (ConstraintViolationException cve) { |
1220 log.error("Error while storing waterlevel diff.", cve); | 1253 log.error("Error while storing waterlevel diff.", cve); |
1221 } | 1254 } |
1222 } | 1255 } |
1256 } | |
1257 } | |
1258 | |
1259 | |
1260 public void storeMeasurementStations() { | |
1261 if (!Config.INSTANCE.skipMeasurementStations()) { | |
1262 log.info("store measurement stations"); | |
1263 | |
1264 River river = getPeer(); | |
1265 | |
1266 int count = 0; | |
1267 | |
1268 for (ImportMeasurementStation station: measurementStations) { | |
1269 try { | |
1270 boolean success = station.storeDependencies(river); | |
1271 if (success) { | |
1272 count++; | |
1273 } | |
1274 } | |
1275 catch (SQLException sqle) { | |
1276 log.error("Error while storing measurement station.", sqle); | |
1277 } | |
1278 catch (ConstraintViolationException cve) { | |
1279 log.error("Error while storing measurement station.", cve); | |
1280 } | |
1281 } | |
1282 | |
1283 log.info("stored " + count + " measurement stations."); | |
1223 } | 1284 } |
1224 } | 1285 } |
1225 | 1286 |
1226 | 1287 |
1227 public void storeSQRelations() { | 1288 public void storeSQRelations() { |