Mercurial > dive4elements > river
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 } |