comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/QualityMeasurementFactory.java @ 3755:9c555ce5ca50

Data objects and factory for minfo bedquality calculation. flys-artifacts/trunk@5450 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Thu, 13 Sep 2012 10:34:51 +0000
parents
children 912a398968b6
comparison
equal deleted inserted replaced
3754:a93b79cca2ca 3755:9c555ce5ca50
1 package de.intevation.flys.artifacts.model.minfo;
2
3 import java.util.Date;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import org.hibernate.SQLQuery;
8 import org.hibernate.Session;
9 import org.hibernate.transform.BasicTransformerAdapter;
10 import org.hibernate.type.StandardBasicTypes;
11
12 import de.intevation.flys.backend.SedDBSessionHolder;
13
14 public class QualityMeasurementFactory {
15
16 private static final String SQL_MEASUREMENT =
17 "SELECT st.km as km," +
18 " st.datum as date,"+
19 " sa.d10 as d10," +
20 " sa.d16 as d16," +
21 " sa.d20 as d20," +
22 " sa.d25 as d25," +
23 " sa.d30 as d30," +
24 " sa.d40 as d40," +
25 " sa.d50 as d50," +
26 " sa.d60 as d60," +
27 " sa.d70 as d70," +
28 " sa.d75 as d75," +
29 " sa.d80 as d80," +
30 " sa.d84 as d84," +
31 " sa.d90 as d90," +
32 " sa.dmin as dmin," +
33 " sa.dmax as dmax " +
34 "FROM sohltest st" +
35 " JOIN station sn ON sn.stationid = st.stationid" +
36 " JOIN gewaesser gw ON gw.gewaesserid = sn.gewaesserid" +
37 " JOIN sohlprobe sp ON sp.sohltestid = st.sohltestid" +
38 " JOIN siebanalyse sa ON sa.sohlprobeid = sp.sohlprobeid" +
39 "WHERE gw.name = :name AND " +
40 " st.km IS NOT NULL AND " +
41 " st.km BETWEEN :from - 0.001 AND :to + 0.001 AND" +
42 " st.datum BETWEEN :start AND :end";
43
44 public static final class QualityMeasurementResultTransformer
45 extends BasicTransformerAdapter
46 {
47 public static QualityMeasurementResultTransformer INSTANCE =
48 new QualityMeasurementResultTransformer();
49
50 public QualityMeasurementResultTransformer() {
51 }
52
53 @Override
54 public Object transformTuple(Object [] tuple, String [] aliases) {
55 Map<String, Double> map = new HashMap<String, Double>();
56 double km = 0;
57 Date d = null;
58 for (int i = 0; i < tuple.length; ++i) {
59 if (tuple[i] != null) {
60 if (aliases[i].equals("km")) {
61 km = ((Number)tuple[i]).doubleValue();
62 }
63 else if (aliases[i].equals("date")) {
64 d = (Date)tuple[i];
65 }
66 else {
67 map.put(aliases[i], (Double)tuple[i]);
68 }
69 }
70 }
71 return new QualityMeasurement(km, d, map);
72 }
73 } // class BasicTransformerAdapter
74
75 private QualityMeasurementFactory() {
76 }
77
78 protected static QualityMeasurements load(
79 Session session,
80 String river,
81 double from,
82 double to,
83 Date start,
84 Date end
85 ) {
86 SQLQuery query = session.createSQLQuery(SQL_MEASUREMENT)
87 .addScalar("km", StandardBasicTypes.DOUBLE)
88 .addScalar("date", StandardBasicTypes.DATE)
89 .addScalar("d10", StandardBasicTypes.DOUBLE)
90 .addScalar("d16", StandardBasicTypes.DOUBLE)
91 .addScalar("d20", StandardBasicTypes.DOUBLE)
92 .addScalar("d25", StandardBasicTypes.DOUBLE)
93 .addScalar("d30", StandardBasicTypes.DOUBLE)
94 .addScalar("d40", StandardBasicTypes.DOUBLE)
95 .addScalar("d50", StandardBasicTypes.DOUBLE)
96 .addScalar("d60", StandardBasicTypes.DOUBLE)
97 .addScalar("d70", StandardBasicTypes.DOUBLE)
98 .addScalar("d75", StandardBasicTypes.DOUBLE)
99 .addScalar("d80", StandardBasicTypes.DOUBLE)
100 .addScalar("d84", StandardBasicTypes.DOUBLE)
101 .addScalar("d90", StandardBasicTypes.DOUBLE)
102 .addScalar("dmin", StandardBasicTypes.DOUBLE)
103 .addScalar("dmax", StandardBasicTypes.DOUBLE);
104
105 query.setString("name", river);
106 query.setDouble("from", from);
107 query.setDouble("to", to);
108 query.setDate("start", start);
109 query.setDate("end", end);
110
111 query.setResultTransformer(
112 QualityMeasurementResultTransformer.INSTANCE);
113
114 return new QualityMeasurements(query.list());
115 }
116
117 public static QualityMeasurements getMeasurements(
118 String river,
119 double from,
120 double to,
121 Date start,
122 Date end
123 ) {
124 Session session = SedDBSessionHolder.HOLDER.get();
125 try {
126 return load(session, river, from, to, start, end);
127 }
128 finally {
129 session.close();
130 }
131 }
132 }

http://dive4elements.wald.intevation.org