Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelDifference.java @ 2850:a1402c16152f
Added a parser and importer classes used to import waterlevel differences.
flys-backend/trunk@4304 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 26 Apr 2012 09:46:32 +0000 |
parents | |
children | 0d27d02b1208 |
comparison
equal
deleted
inserted
replaced
2849:c36106f15ac9 | 2850:a1402c16152f |
---|---|
1 package de.intevation.flys.importer; | |
2 | |
3 import java.sql.SQLException; | |
4 import java.util.ArrayList; | |
5 import java.util.List; | |
6 | |
7 import org.apache.log4j.Logger; | |
8 | |
9 import org.hibernate.Session; | |
10 import org.hibernate.Query; | |
11 import org.hibernate.exception.ConstraintViolationException; | |
12 | |
13 import de.intevation.flys.model.River; | |
14 import de.intevation.flys.model.Unit; | |
15 import de.intevation.flys.model.WaterlevelDifference; | |
16 | |
17 | |
18 public class ImportWaterlevelDifference { | |
19 | |
20 private static final Logger log = | |
21 Logger.getLogger(ImportWaterlevelDifference.class); | |
22 | |
23 | |
24 private ImportUnit unit; | |
25 | |
26 private String description; | |
27 | |
28 private List<ImportWaterlevelDifferenceColumn> columns; | |
29 | |
30 private WaterlevelDifference peer; | |
31 | |
32 | |
33 public ImportWaterlevelDifference(String description) { | |
34 this.columns = new ArrayList<ImportWaterlevelDifferenceColumn>(); | |
35 | |
36 this.description = description; | |
37 } | |
38 | |
39 | |
40 public void setUnit(ImportUnit unit) { | |
41 this.unit = unit; | |
42 } | |
43 | |
44 | |
45 public void addValue(ImportWaterlevelDifferenceColumn column) { | |
46 this.columns.add(column); | |
47 } | |
48 | |
49 | |
50 public void storeDependencies(River river) | |
51 throws SQLException, ConstraintViolationException | |
52 { | |
53 log.info("store dependencies"); | |
54 | |
55 WaterlevelDifference peer = getPeer(river); | |
56 | |
57 int i = 0; | |
58 | |
59 for (ImportWaterlevelDifferenceColumn column: columns) { | |
60 column.storeDependencies(peer); | |
61 i++; | |
62 } | |
63 | |
64 log.info("stored " + i + " waterlevel difference columns"); | |
65 } | |
66 | |
67 | |
68 public WaterlevelDifference getPeer(River river) { | |
69 Unit u = unit != null ? unit.getPeer() : null; | |
70 if (u == null) { | |
71 log.warn("skip invalid waterlevel difference - no unit set!"); | |
72 return null; | |
73 } | |
74 | |
75 if (peer == null) { | |
76 Session session = ImporterSession.getInstance().getDatabaseSession(); | |
77 Query query = session.createQuery( | |
78 "from WaterlevelDifference where " + | |
79 " river=:river and " + | |
80 " unit=:unit and " + | |
81 " description=:description" | |
82 ); | |
83 | |
84 query.setParameter("river", river); | |
85 query.setParameter("unit", u); | |
86 query.setParameter("description", description); | |
87 | |
88 List<WaterlevelDifference> diffs = query.list(); | |
89 if (diffs.isEmpty()) { | |
90 peer = new WaterlevelDifference(river, u, description); | |
91 session.save(peer); | |
92 } | |
93 else { | |
94 peer = diffs.get(0); | |
95 } | |
96 } | |
97 | |
98 return peer; | |
99 } | |
100 } | |
101 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |