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