comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/QualityMeasurementFactory.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/QualityMeasurementFactory.java@bd047b71ab37
children 4897a58c8746
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
1 package org.dive4elements.river.artifacts.model.minfo;
2
3 import java.util.Date;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import org.apache.log4j.Logger;
8 import org.hibernate.SQLQuery;
9 import org.hibernate.Session;
10 import org.hibernate.transform.BasicTransformerAdapter;
11 import org.hibernate.type.StandardBasicTypes;
12
13 import org.dive4elements.river.backend.SedDBSessionHolder;
14
15
16 public class QualityMeasurementFactory {
17
18 private static Logger logger = Logger.getLogger(QualityMeasurementFactory.class);
19
20 private static final String SQL_BED_MEASUREMENT =
21 "SELECT st.km as km," +
22 " st.datum as datum," +
23 " sp.tiefevon as depth1," +
24 " sp.tiefebis as depth2," +
25 " sa.d10 as d10," +
26 " sa.d16 as d16," +
27 " sa.d20 as d20," +
28 " sa.d25 as d25," +
29 " sa.d30 as d30," +
30 " sa.d40 as d40," +
31 " sa.d50 as d50," +
32 " sa.d60 as d60," +
33 " sa.d70 as d70," +
34 " sa.d75 as d75," +
35 " sa.d80 as d80," +
36 " sa.d84 as d84," +
37 " sa.d90 as d90," +
38 " sa.dmin as dmin," +
39 " sa.dmax as dmax " +
40 "FROM sohltest st " +
41 " JOIN station sn ON sn.stationid = st.stationid " +
42 " JOIN gewaesser gw ON gw.gewaesserid = sn.gewaesserid " +
43 " JOIN sohlprobe sp ON sp.sohltestid = st.sohltestid " +
44 " JOIN siebanalyse sa ON sa.sohlprobeid = sp.sohlprobeid " +
45 "WHERE gw.name = :name AND " +
46 " st.km IS NOT NULL AND " +
47 " sp.tiefevon IS NOT NULL AND " +
48 " sp.tiefebis IS NOT NULL AND " + // TODO: Test if char diameter ist null.
49 " st.km BETWEEN :from - 0.001 AND :to + 0.001 AND " +
50 " st.datum BETWEEN :start AND :end";
51
52 private static final String SQL_BEDLOAD_MEASUREMENT =
53 "SELECT m.km as km," +
54 " m.datum as datum," +
55 " m.d10 as d10," +
56 " m.d16 as d16," +
57 " m.d20 as d20," +
58 " m.d25 as d25," +
59 " m.d30 as d30," +
60 " m.d40 as d40," +
61 " m.d50 as d50," +
62 " m.d60 as d60," +
63 " m.d70 as d70," +
64 " m.d75 as d75," +
65 " m.d80 as d80," +
66 " m.d84 as d84," +
67 " m.d90 as d90," +
68 " m.dmin as dmin," +
69 " m.dmax as dmax " +
70 "FROM messung m" +
71 " JOIN station sn ON sn.stationid = m.stationid" +
72 " JOIN gewaesser gw ON gw.gewaesserid = sn.gewaesserid " +
73 "WHERE gw.name = :name AND " +
74 " m.km IS NOT NULL AND " +
75 " m.d10 IS NOT NULL AND" + //TODO: Add all other char. diameter.
76 " m.km BETWEEN :from - 0.001 AND :to + 0.001 AND" +
77 " m.datum BETWEEN :start AND :end";
78
79 public static final class QualityMeasurementResultTransformer
80 extends BasicTransformerAdapter {
81
82 public static QualityMeasurementResultTransformer INSTANCE = new QualityMeasurementResultTransformer();
83
84 public QualityMeasurementResultTransformer() {
85 }
86
87 @Override
88 public Object transformTuple(Object[] tuple, String[] aliases) {
89 Map<String, Double> map = new HashMap<String, Double>();
90 double km = 0;
91 Date d = null;
92 double depth1 = Double.NaN;
93 double depth2 = Double.NaN;
94 for (int i = 0; i < tuple.length; ++i) {
95 if (tuple[i] != null) {
96 if (aliases[i].equals("km")) {
97 km = ((Number) tuple[i]).doubleValue();
98 }
99 else if (aliases[i].equals("datum")) {
100 d = (Date) tuple[i];
101 }
102 else if (aliases[i].equals("depth1")) {
103 depth1 = ((Number) tuple[i]).doubleValue();
104 }
105 else if (aliases[i].equals("depth2")) {
106 depth2 = ((Number) tuple[i]).doubleValue();
107 }
108 else {
109 map.put(aliases[i], ((Double) tuple[i])/1000);
110 }
111 }
112 }
113 return new QualityMeasurement(km, d, depth1, depth2, map);
114 }
115 } // class BasicTransformerAdapter
116
117 private QualityMeasurementFactory() {
118 }
119
120 protected static QualityMeasurements load(
121 Session session,
122 String river,
123 double from,
124 double to,
125 Date start,
126 Date end,
127 String statement
128 ) {
129 SQLQuery query = session.createSQLQuery(statement)
130 .addScalar("km", StandardBasicTypes.DOUBLE)
131 .addScalar("datum", StandardBasicTypes.DATE)
132 .addScalar("d10", StandardBasicTypes.DOUBLE)
133 .addScalar("d16", StandardBasicTypes.DOUBLE)
134 .addScalar("d20", StandardBasicTypes.DOUBLE)
135 .addScalar("d25", StandardBasicTypes.DOUBLE)
136 .addScalar("d30", StandardBasicTypes.DOUBLE)
137 .addScalar("d40", StandardBasicTypes.DOUBLE)
138 .addScalar("d50", StandardBasicTypes.DOUBLE)
139 .addScalar("d60", StandardBasicTypes.DOUBLE)
140 .addScalar("d70", StandardBasicTypes.DOUBLE)
141 .addScalar("d75", StandardBasicTypes.DOUBLE)
142 .addScalar("d80", StandardBasicTypes.DOUBLE)
143 .addScalar("d84", StandardBasicTypes.DOUBLE)
144 .addScalar("d90", StandardBasicTypes.DOUBLE)
145 .addScalar("dmin", StandardBasicTypes.DOUBLE)
146 .addScalar("dmax", StandardBasicTypes.DOUBLE);
147
148 if (statement.equals(SQL_BED_MEASUREMENT)) {
149 query.addScalar("depth1", StandardBasicTypes.DOUBLE);
150 query.addScalar("depth2", StandardBasicTypes.DOUBLE);
151 }
152
153 query.setString("name", river);
154 query.setDouble("from", from);
155 query.setDouble("to", to);
156 query.setDate("start", start);
157 query.setDate("end", end);
158
159 query.setResultTransformer(
160 QualityMeasurementResultTransformer.INSTANCE);
161
162 return new QualityMeasurements(query.list());
163 }
164
165 public static QualityMeasurements getBedMeasurements(
166 String river,
167 double from,
168 double to,
169 Date start,
170 Date end) {
171 Session session = SedDBSessionHolder.HOLDER.get();
172 try {
173 return load(session, river, from, to, start, end,
174 SQL_BED_MEASUREMENT);
175 }
176 finally {
177 //session.close();
178 }
179 }
180
181 public static QualityMeasurements getBedloadMeasurements(
182 String river,
183 double from,
184 double to,
185 Date start,
186 Date end
187 ) {
188 Session session = SedDBSessionHolder.HOLDER.get();
189 try {
190 return load(
191 session,
192 river,
193 from,
194 to,
195 start,
196 end,
197 SQL_BEDLOAD_MEASUREMENT);
198 }
199 finally {
200 //session.close();
201 }
202 }
203 }
204 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org