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 :

http://dive4elements.wald.intevation.org