annotate backend/src/main/java/org/dive4elements/river/importer/ImportDischargeTable.java @ 5885:09d9c14145a3

Do not import discharge tables twice if no time interval given
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 30 Apr 2013 19:03:44 +0200
parents 4dd33b86dc61
children a763fb7aa2e5
rev   line source
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
6 * documentation coming with Dive4Elements River for details.
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5829
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
9 package org.dive4elements.river.importer;
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import java.util.ArrayList;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import java.util.List;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import org.hibernate.Session;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15 import org.hibernate.Query;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16
5829
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
17 import org.dive4elements.river.model.DischargeTable;
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
18 import org.dive4elements.river.model.Gauge;
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
19 import org.dive4elements.river.model.TimeInterval;
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20
499
cce054f27dac Importer: Only accept main value types 'Q', 'W', 'D' and 'T' by default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 497
diff changeset
21 import org.apache.log4j.Logger;
cce054f27dac Importer: Only accept main value types 'Q', 'W', 'D' and 'T' by default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 497
diff changeset
22
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23 public class ImportDischargeTable
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 {
499
cce054f27dac Importer: Only accept main value types 'Q', 'W', 'D' and 'T' by default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 497
diff changeset
25 private static Logger log = Logger.getLogger(ImportDischargeTable.class);
cce054f27dac Importer: Only accept main value types 'Q', 'W', 'D' and 'T' by default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 497
diff changeset
26
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27 protected DischargeTable peer;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28
493
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
29 protected String description;
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
30
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
31 protected Integer kind;
467
c8c09e31cdb8 Added new column 'kind' in discharge tables and wst to distinguish between different types.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 198
diff changeset
32
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 protected List<ImportDischargeTableValue> dischargeTableValues;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
486
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
35 protected ImportTimeInterval timeInterval;
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37 public ImportDischargeTable() {
493
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
38 this(0, null);
492
14de9246b356 Importer: parse historical discharge tables, too. TODO: store them in database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 486
diff changeset
39 }
14de9246b356 Importer: parse historical discharge tables, too. TODO: store them in database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 486
diff changeset
40
493
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
41 public ImportDischargeTable(int kind, String description) {
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
42 this.kind = kind;
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
43 this.description = description;
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 dischargeTableValues = new ArrayList<ImportDischargeTableValue>();
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
493
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
48 public String getDescription() {
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
49 return description;
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
50 }
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
51
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
52 public void setDescription(String description) {
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
53 this.description = description;
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
54 }
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
55
b35c5dc0f8b7 Importer: Make import of historical discharge tables work.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 492
diff changeset
56
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57 public void addDischargeTableValue(ImportDischargeTableValue value) {
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
58 dischargeTableValues.add(value);
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62 public void setDischargeTableValues(List<ImportDischargeTableValue> values){
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63 this.dischargeTableValues = values;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 public List<ImportDischargeTableValue> getDischargeTableValues() {
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
68 return dischargeTableValues;
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70
486
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
71 public ImportTimeInterval getTimeInterval() {
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
72 return timeInterval;
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
73 }
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
74
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
75 public void setTimeInterval(ImportTimeInterval timeInterval) {
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
76 this.timeInterval = timeInterval;
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
77 }
8ea09ec7f0c8 Importer: Attach a time interval to a discharge table if we find one during import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
78
5885
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
79
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81 public DischargeTable getPeer(Gauge gauge) {
5885
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
82 if (peer == null) {
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
83 TimeInterval ti = timeInterval != null
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
84 ? timeInterval.getPeer()
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
85 : null;
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
86 Session session = ImporterSession.getInstance().getDatabaseSession();
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
87
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
88 String timeIntervalQuery = ti != null
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
89 ? "timeInterval=:interval"
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
90 : "timeInterval is null";
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
91
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
92 Query query = session.createQuery(
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
93 "from DischargeTable where " +
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
94 "gauge.id=:gauge and kind=:kind and " +
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
95 "description=:description and " + timeIntervalQuery);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
96 query.setParameter("gauge", gauge.getId());
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
97 query.setParameter("description", description);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
98 query.setParameter("kind", kind);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
99 if (ti != null) {
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
100 query.setParameter("interval", ti);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
101 }
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
102
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
103 List<DischargeTable> dischargeTables = query.list();
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
104 if (dischargeTables.isEmpty()) {
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
105 peer = new DischargeTable(gauge, description, null, kind, ti);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
106 session.save(peer);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
107 }
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
108 else {
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
109 peer = dischargeTables.get(0);
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
110 }
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
111 }
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
112
09d9c14145a3 Do not import discharge tables twice if no time interval given
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
113 return peer;
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 public void storeDependencies(Gauge gauge) {
499
cce054f27dac Importer: Only accept main value types 'Q', 'W', 'D' and 'T' by default.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 497
diff changeset
118 log.info("store discharge table '" + description + "'");
198
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 storeDischargeTableValues(gauge);
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
123 public void storeDischargeTableValues(Gauge gauge) {
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
124 DischargeTable dischargeTable = getPeer(gauge);
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
125
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
126 for (ImportDischargeTableValue value: dischargeTableValues) {
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127 value.getPeer(dischargeTable);
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
128 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
129 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 }
d980e545ccab Added import code for importing discharge tables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org