Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java @ 3289:ec9aab93f292
SQ: First peek into fetching relevant data from SedDB
flys-artifacts/trunk@4957 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 12 Jul 2012 16:15:30 +0000 |
parents | |
children | 36f3b53d5cfc |
comparison
equal
deleted
inserted
replaced
3288:cf1b769190b7 | 3289:ec9aab93f292 |
---|---|
1 package de.intevation.flys.artifacts.model.sq; | |
2 | |
3 import de.intevation.flys.artifacts.model.DateRange; | |
4 | |
5 import de.intevation.flys.backend.SedDBSessionHolder; | |
6 | |
7 import java.util.HashMap; | |
8 import java.util.List; | |
9 import java.util.Map; | |
10 | |
11 import org.apache.log4j.Logger; | |
12 | |
13 import org.hibernate.SQLQuery; | |
14 import org.hibernate.Session; | |
15 | |
16 import org.hibernate.transform.BasicTransformerAdapter; | |
17 | |
18 import org.hibernate.type.StandardBasicTypes; | |
19 | |
20 public class MeasurementFactory | |
21 { | |
22 private static final Logger log = | |
23 Logger.getLogger(MeasurementFactory.class); | |
24 | |
25 public static final String SQL_MEASSURE = | |
26 "SELECT " + | |
27 "m.TSAND AS TSAND," + | |
28 "m.TSCHWEB AS TSCHWEB," + | |
29 "m.CSCHWEB AS CSCHWEB " + | |
30 /* TODO: Select more */ | |
31 "FROM messung m " + | |
32 "JOIN station s ON m.stationid = s.stationid " + | |
33 "JOIN gewaesser g ON s.gewaesserid = g.gewaesserid " + | |
34 "WHERE " + | |
35 "g.name = :river_name AND " + | |
36 "s.km BETWEEN :location - 0.001 AND :location + 0.001 AND " + | |
37 "m.datum BETWEEN :from AND :to"; | |
38 | |
39 public static final class MeasurementResultTransformer | |
40 extends BasicTransformerAdapter | |
41 { | |
42 public static MeasurementResultTransformer INSTANCE = | |
43 new MeasurementResultTransformer(); | |
44 | |
45 public MeasurementResultTransformer() { | |
46 } | |
47 | |
48 @Override | |
49 public Object transformTuple(Object [] tuple, String [] aliases) { | |
50 Map<String, Object> map = new HashMap<String, Object>(); | |
51 for (int i = 0; i < tuple.length; ++i) { | |
52 map.put(aliases[i], tuple[i]); | |
53 } | |
54 return new Measurement(map); | |
55 } | |
56 } // class BasicTransformerAdapter | |
57 | |
58 private MeasurementFactory() { | |
59 } | |
60 | |
61 protected static List<Measurement> load( | |
62 Session session, | |
63 String river, | |
64 double location, | |
65 DateRange dateRange | |
66 ) { | |
67 SQLQuery query = session.createSQLQuery(SQL_MEASSURE) | |
68 .addScalar("TSAND", StandardBasicTypes.DOUBLE) | |
69 .addScalar("TSCHWEB", StandardBasicTypes.DOUBLE) | |
70 .addScalar("CSCHWEB", StandardBasicTypes.DOUBLE); | |
71 | |
72 query.setString("river_name", river); | |
73 query.setDouble("location", location); | |
74 query.setDate("from", dateRange.getFrom()); | |
75 query.setDate("to", dateRange.getTo()); | |
76 | |
77 query.setResultTransformer(MeasurementResultTransformer.INSTANCE); | |
78 | |
79 return query.list(); | |
80 } | |
81 | |
82 public static List<Measurement> getMeasurements( | |
83 String river, | |
84 double location, | |
85 DateRange dateRange | |
86 ) { | |
87 Session session = SedDBSessionHolder.HOLDER.get(); | |
88 try { | |
89 return load(session, river, location, dateRange); | |
90 } | |
91 finally { | |
92 session.close(); | |
93 } | |
94 } | |
95 } | |
96 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |