Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/QualityMeasurementFactory.java @ 3769:728ecd2afa20
Implemented bed quality calculation in minfo module.
flys-artifacts/trunk@5474 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Fri, 14 Sep 2012 14:20:42 +0000 |
parents | 75bc96dd9d82 |
children | a5f65e8983be |
comparison
equal
deleted
inserted
replaced
3768:00aafe1fedd7 | 3769:728ecd2afa20 |
---|---|
2 | 2 |
3 import java.util.Date; | 3 import java.util.Date; |
4 import java.util.HashMap; | 4 import java.util.HashMap; |
5 import java.util.Map; | 5 import java.util.Map; |
6 | 6 |
7 import org.apache.log4j.Logger; | |
7 import org.hibernate.SQLQuery; | 8 import org.hibernate.SQLQuery; |
8 import org.hibernate.Session; | 9 import org.hibernate.Session; |
9 import org.hibernate.transform.BasicTransformerAdapter; | 10 import org.hibernate.transform.BasicTransformerAdapter; |
10 import org.hibernate.type.StandardBasicTypes; | 11 import org.hibernate.type.StandardBasicTypes; |
11 | 12 |
12 import de.intevation.flys.backend.SedDBSessionHolder; | 13 import de.intevation.flys.backend.SedDBSessionHolder; |
13 | 14 |
14 | 15 |
15 public class QualityMeasurementFactory { | 16 public class QualityMeasurementFactory { |
16 | 17 |
18 private static Logger logger = Logger.getLogger(QualityMeasurementFactory.class); | |
19 | |
17 private static final String SQL_BED_MEASUREMENT = | 20 private static final String SQL_BED_MEASUREMENT = |
18 "SELECT st.km as km," + | 21 "SELECT st.km as km," + |
19 " st.datum as date," + | 22 " st.datum as datum," + |
20 " sp.tiefevon as depth1" + | 23 " sp.tiefevon as depth1," + |
21 " sp.tiefebis as depth2" + | 24 " sp.tiefebis as depth2," + |
22 " sa.d10 as d10," + | 25 " sa.d10 as d10," + |
23 " sa.d16 as d16," + | 26 " sa.d16 as d16," + |
24 " sa.d20 as d20," + | 27 " sa.d20 as d20," + |
25 " sa.d25 as d25," + | 28 " sa.d25 as d25," + |
26 " sa.d30 as d30," + | 29 " sa.d30 as d30," + |
32 " sa.d80 as d80," + | 35 " sa.d80 as d80," + |
33 " sa.d84 as d84," + | 36 " sa.d84 as d84," + |
34 " sa.d90 as d90," + | 37 " sa.d90 as d90," + |
35 " sa.dmin as dmin," + | 38 " sa.dmin as dmin," + |
36 " sa.dmax as dmax " + | 39 " sa.dmax as dmax " + |
37 "FROM sohltest st" + | 40 "FROM sohltest st " + |
38 " JOIN station sn ON sn.stationid = st.stationid" + | 41 " JOIN station sn ON sn.stationid = st.stationid " + |
39 " JOIN gewaesser gw ON gw.gewaesserid = sn.gewaesserid" + | 42 " JOIN gewaesser gw ON gw.gewaesserid = sn.gewaesserid " + |
40 " JOIN sohlprobe sp ON sp.sohltestid = st.sohltestid" + | 43 " JOIN sohlprobe sp ON sp.sohltestid = st.sohltestid " + |
41 " JOIN siebanalyse sa ON sa.sohlprobeid = sp.sohlprobeid " + | 44 " JOIN siebanalyse sa ON sa.sohlprobeid = sp.sohlprobeid " + |
42 "WHERE gw.name = :name AND " + | 45 "WHERE gw.name = :name AND " + |
43 " st.km IS NOT NULL AND " + | 46 " st.km IS NOT NULL AND " + |
44 " st.km BETWEEN :from - 0.001 AND :to + 0.001 AND" + | 47 " sp.tiefevon IS NOT NULL AND " + |
48 " sp.tiefebis IS NOT NULL AND " + | |
49 " st.km BETWEEN :from - 0.001 AND :to + 0.001 AND " + | |
45 " st.datum BETWEEN :start AND :end"; | 50 " st.datum BETWEEN :start AND :end"; |
46 | 51 |
47 private static final String SQL_BEDLOAD_MEASUREMENT = | 52 private static final String SQL_BEDLOAD_MEASUREMENT = |
48 "SELECT m.km as km," + | 53 "SELECT m.km as km," + |
49 " m.datum as date," + | 54 " m.datum as datum," + |
50 " m.d10 as d10," + | 55 " m.d10 as d10," + |
51 " m.d16 as d16," + | 56 " m.d16 as d16," + |
52 " m.d20 as d20," + | 57 " m.d20 as d20," + |
53 " m.d25 as d25," + | 58 " m.d25 as d25," + |
54 " m.d30 as d30," + | 59 " m.d30 as d30," + |
81 @Override | 86 @Override |
82 public Object transformTuple(Object[] tuple, String[] aliases) { | 87 public Object transformTuple(Object[] tuple, String[] aliases) { |
83 Map<String, Double> map = new HashMap<String, Double>(); | 88 Map<String, Double> map = new HashMap<String, Double>(); |
84 double km = 0; | 89 double km = 0; |
85 Date d = null; | 90 Date d = null; |
86 double depth1 = 0; | 91 double depth1 = Double.NaN; |
87 double depth2 = 0; | 92 double depth2 = Double.NaN; |
88 for (int i = 0; i < tuple.length; ++i) { | 93 for (int i = 0; i < tuple.length; ++i) { |
89 if (tuple[i] != null) { | 94 if (tuple[i] != null) { |
90 if (aliases[i].equals("km")) { | 95 if (aliases[i].equals("km")) { |
91 km = ((Number) tuple[i]).doubleValue(); | 96 km = ((Number) tuple[i]).doubleValue(); |
92 } | 97 } |
93 else if (aliases[i].equals("date")) { | 98 else if (aliases[i].equals("datum")) { |
94 d = (Date) tuple[i]; | 99 d = (Date) tuple[i]; |
95 } | 100 } |
96 else if (aliases[i].equals("depth1")) { | 101 else if (aliases[i].equals("depth1")) { |
97 depth1 = ((Number) tuple[i]).doubleValue(); | 102 depth1 = ((Number) tuple[i]).doubleValue(); |
98 } | 103 } |
99 else if (aliases[i].equals("depth2")) { | 104 else if (aliases[i].equals("depth2")) { |
100 depth2 = ((Number) tuple[i]).doubleValue(); | 105 depth2 = ((Number) tuple[i]).doubleValue(); |
101 } | 106 } |
102 else { | 107 else { |
103 map.put(aliases[i], (Double) tuple[i]); | 108 map.put(aliases[i], ((Double) tuple[i])/1000); |
104 } | 109 } |
105 } | 110 } |
106 } | 111 } |
107 return new QualityMeasurement(km, d, depth1, depth2, map); | 112 return new QualityMeasurement(km, d, depth1, depth2, map); |
108 } | 113 } |
120 Date end, | 125 Date end, |
121 String statement | 126 String statement |
122 ) { | 127 ) { |
123 SQLQuery query = session.createSQLQuery(statement) | 128 SQLQuery query = session.createSQLQuery(statement) |
124 .addScalar("km", StandardBasicTypes.DOUBLE) | 129 .addScalar("km", StandardBasicTypes.DOUBLE) |
125 .addScalar("date", StandardBasicTypes.DATE) | 130 .addScalar("datum", StandardBasicTypes.DATE) |
126 .addScalar("d10", StandardBasicTypes.DOUBLE) | 131 .addScalar("d10", StandardBasicTypes.DOUBLE) |
127 .addScalar("d16", StandardBasicTypes.DOUBLE) | 132 .addScalar("d16", StandardBasicTypes.DOUBLE) |
128 .addScalar("d20", StandardBasicTypes.DOUBLE) | 133 .addScalar("d20", StandardBasicTypes.DOUBLE) |
129 .addScalar("d25", StandardBasicTypes.DOUBLE) | 134 .addScalar("d25", StandardBasicTypes.DOUBLE) |
130 .addScalar("d30", StandardBasicTypes.DOUBLE) | 135 .addScalar("d30", StandardBasicTypes.DOUBLE) |
166 try { | 171 try { |
167 return load(session, river, from, to, start, end, | 172 return load(session, river, from, to, start, end, |
168 SQL_BED_MEASUREMENT); | 173 SQL_BED_MEASUREMENT); |
169 } | 174 } |
170 finally { | 175 finally { |
171 session.close(); | 176 //session.close(); |
172 } | 177 } |
173 } | 178 } |
174 | 179 |
175 public static QualityMeasurements getBedloadMeasurements( | 180 public static QualityMeasurements getBedloadMeasurements( |
176 String river, | 181 String river, |