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() {

http://dive4elements.wald.intevation.org