Mercurial > dive4elements > river
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 : |