comparison 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
comparison
equal deleted inserted replaced
4192:34337e357a54 4193:f63b39799d2d
1 package de.intevation.flys.importer;
2
3 import java.sql.SQLException;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7 import org.hibernate.Session;
8 import org.hibernate.exception.ConstraintViolationException;
9
10 import de.intevation.flys.model.Gauge;
11 import de.intevation.flys.model.MeasurementStation;
12 import de.intevation.flys.model.Range;
13 import de.intevation.flys.model.River;
14 import de.intevation.flys.model.TimeInterval;
15
16
17 public class ImportMeasurementStation {
18
19 private static final Logger log = Logger
20 .getLogger(ImportMeasurementStation.class);
21
22 private MeasurementStation peer;
23
24 public String name;
25 public Double station;
26 public ImportRange range;
27 public String measurementType;
28 public String riverside;
29 public String gauge;
30 public ImportTimeInterval observationTimerange;
31 public String operator;
32 public String comment;
33
34 public ImportMeasurementStation() {
35 }
36
37 private Gauge getGaugeFromDB() {
38 Session session = ImporterSession.getInstance().getDatabaseSession();
39
40 org.hibernate.Query query = session
41 .createQuery("FROM Gauge WHERE name=:name");
42
43 query.setParameter("name", gauge);
44 List<Gauge> gauges = query.list();
45
46 return gauges.isEmpty() ? null : gauges.get(0);
47 }
48
49 public boolean storeDependencies(River river) throws SQLException,
50 ConstraintViolationException {
51 getPeer(river);
52
53 return peer != null;
54 }
55
56 public Object getPeer(River river) {
57 if (peer == null) {
58 Gauge gauge = null;
59 try {
60 gauge = getGaugeFromDB();
61 if (gauge == null) {
62 log.warn("Skip measurement station '" + name
63 + "': unable to find gauge with name '" + this.gauge
64 + "'");
65 return null;
66 }
67 }
68 catch (Exception e) {
69 log.error("Exception: " + e.getMessage());
70 }
71
72 Range range = this.range.getPeer(river);
73 if (range == null) {
74 log.warn("Skip measurement station '" + name
75 + "': unable to get range");
76 return null;
77 }
78
79 TimeInterval observationTimerange = this.observationTimerange
80 .getPeer();
81 if (observationTimerange == null) {
82 log.warn("Skip measurement station '" + name
83 + "': unable to get time interval for observation time");
84 return null;
85 }
86
87 Session session = ImporterSession.getInstance()
88 .getDatabaseSession();
89
90 org.hibernate.Query query = session
91 .createQuery("FROM MeasurementStation "
92 + " WHERE river=:river AND station=:station");
93
94 query.setParameter("river", river);
95 query.setParameter("station", station);
96
97 List<MeasurementStation> stations = query.list();
98
99 if (stations.isEmpty()) {
100 log.info("create new measurement station '" + name + "'");
101
102 peer = new MeasurementStation(river, name, measurementType,
103 riverside, station, range, gauge, observationTimerange,
104 operator, comment);
105
106 session.save(peer);
107 }
108 }
109
110 return peer;
111 }
112 }

http://dive4elements.wald.intevation.org