annotate flys-backend/src/main/java/de/intevation/flys/importer/ImportSedimentYield.java @ 3943:a5b003595d6c

Store minfo values into database only if their peer has been successfully stored. flys-backend/trunk@5520 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 10:05:36 +0000
parents 71175502d868
children 4ee97d914501
rev   line source
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.importer;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
2839
163c037f2c7e Added config option to skip parsing sediment yield data and prepared the importer to read/store those data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2838
diff changeset
3 import java.sql.SQLException;
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 import java.util.ArrayList;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 import java.util.List;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 import org.apache.log4j.Logger;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9 import org.hibernate.Session;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10 import org.hibernate.Query;
2839
163c037f2c7e Added config option to skip parsing sediment yield data and prepared the importer to read/store those data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2838
diff changeset
11 import org.hibernate.exception.ConstraintViolationException;
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import de.intevation.flys.model.GrainFraction;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import de.intevation.flys.model.River;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15 import de.intevation.flys.model.SedimentYield;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16 import de.intevation.flys.model.TimeInterval;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17 import de.intevation.flys.model.Unit;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 public class ImportSedimentYield {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 private static Logger log = Logger.getLogger(ImportSedimentYield.class);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 private ImportGrainFraction grainFraction;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 private ImportUnit unit;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 private ImportTimeInterval timeInterval;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29
2840
71175502d868 Added a parser for sediment yield files; started parsing and store values in db.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2839
diff changeset
30 private String description;
71175502d868 Added a parser for sediment yield files; started parsing and store values in db.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2839
diff changeset
31
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 private List<ImportSedimentYieldValue> values;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34 private SedimentYield peer;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35
2840
71175502d868 Added a parser for sediment yield files; started parsing and store values in db.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2839
diff changeset
36 public ImportSedimentYield(String description) {
3943
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
37 this.values = new ArrayList<ImportSedimentYieldValue>();
2840
71175502d868 Added a parser for sediment yield files; started parsing and store values in db.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2839
diff changeset
38 this.description = description;
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 public void setTimeInterval(ImportTimeInterval timeInterval) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 this.timeInterval = timeInterval;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 public void setUnit(ImportUnit unit) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 this.unit = unit;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 public void setGrainFraction(ImportGrainFraction grainFraction) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50 this.grainFraction = grainFraction;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53 public void addValue(ImportSedimentYieldValue value) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54 this.values.add(value);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56
3943
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
57 public void storeDependencies(River river) throws SQLException,
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
58 ConstraintViolationException {
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 log.debug("store dependencies");
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61 if (grainFraction != null) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62 grainFraction.storeDependencies();
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 SedimentYield peer = getPeer(river);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66
3943
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
67 if (peer != null) {
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
68 int i = 0;
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69
3943
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
70 for (ImportSedimentYieldValue value : values) {
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
71 value.storeDependencies(peer);
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
72 i++;
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
73 }
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
74
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
75 log.info("stored " + i + " sediment yield values.");
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
77 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79 public SedimentYield getPeer(River river) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80 log.debug("get peer");
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81
3943
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
82 GrainFraction gf = grainFraction != null ? grainFraction.getPeer()
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
83 : null;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
84
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
85 Unit u = unit != null ? unit.getPeer() : null;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
86
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 TimeInterval ti = timeInterval != null ? timeInterval.getPeer() : null;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
88
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89 if (ti == null || u == null) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
90 log.warn("Skip invalid SedimentYield: time interval or unit null!");
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 return null;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
92 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
93
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94 if (peer == null) {
3943
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
95 Session session = ImporterSession.getInstance()
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
96 .getDatabaseSession();
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
97 Query query = session.createQuery("from SedimentYield where "
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
98 + " river=:river and "
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
99 + " grainFraction=:grainFraction and " + " unit=:unit and "
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
100 + " timeInterval=:timeInterval and "
a5b003595d6c Store minfo values into database only if their peer has been successfully stored.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2840
diff changeset
101 + " description=:description");
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
103 query.setParameter("river", river);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
104 query.setParameter("grainFraction", gf);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
105 query.setParameter("unit", u);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
106 query.setParameter("timeInterval", ti);
2840
71175502d868 Added a parser for sediment yield files; started parsing and store values in db.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2839
diff changeset
107 query.setParameter("description", description);
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
108
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
109 List<SedimentYield> yields = query.list();
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
110 if (yields.isEmpty()) {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111 log.debug("create new SedimentYield");
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112
2840
71175502d868 Added a parser for sediment yield files; started parsing and store values in db.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2839
diff changeset
113 peer = new SedimentYield(river, u, ti, gf, description);
2838
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114 session.save(peer);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 else {
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 peer = yields.get(0);
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121 return peer;
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
123 }
75446c47ef77 Added new importer classes for importing sediment yield data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
124 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org