Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java @ 6725:7ea933f9c6ea
issu1393/SedimentLoadFactory: Handle off_epoch type queries.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 31 Jul 2013 11:32:00 +0200 |
parents | b7945db8a43b |
children | 1960d55bafb1 |
comparison
equal
deleted
inserted
replaced
6724:0baf7abffcc6 | 6725:7ea933f9c6ea |
---|---|
33 public class SedimentLoadFactory | 33 public class SedimentLoadFactory |
34 { | 34 { |
35 /** Private logger to use here. */ | 35 /** Private logger to use here. */ |
36 private static Logger log = Logger.getLogger(SedimentLoadFactory.class); | 36 private static Logger log = Logger.getLogger(SedimentLoadFactory.class); |
37 | 37 |
38 // Cache name/keys | |
38 public static final String LOADS_CACHE_NAME = "sedimentloads"; | 39 public static final String LOADS_CACHE_NAME = "sedimentloads"; |
39 public static final String LOAD_DATA_CACHE_NAME = "sedimentload-data"; | 40 public static final String LOAD_DATA_CACHE_NAME = "sedimentload-data"; |
40 | 41 |
41 /** Query to get km and ws for wst_id and column_pos. */ | 42 /** Query to get description and start year of single type |
43 * sediment_yields. */ | |
42 public static final String SQL_SELECT_SINGLES = | 44 public static final String SQL_SELECT_SINGLES = |
43 "SELECT DISTINCT " + | 45 "SELECT DISTINCT " + |
44 " sy.description AS description, " + | 46 " sy.description AS description, " + |
45 " ti.start_time AS year " + | 47 " ti.start_time AS year " + |
46 " FROM sediment_yield sy " + | 48 " FROM sediment_yield sy " + |
49 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " + | 51 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " + |
50 " WHERE r.name = :name " + | 52 " WHERE r.name = :name " + |
51 " AND ti.stop_time IS NULL " + | 53 " AND ti.stop_time IS NULL " + |
52 " AND syv.station BETWEEN :startKm AND :endKm"; | 54 " AND syv.station BETWEEN :startKm AND :endKm"; |
53 | 55 |
54 /** Query to get name for wst_id and column_pos. */ | 56 /** Query to get description, name and time range for official |
57 * epoch-type sediment yields. */ | |
58 public static final String SQL_SELECT_OFFEPOCHS = | |
59 "SELECT DISTINCT " + | |
60 " ti.start_time AS startYear, " + | |
61 " ti.stop_time AS end " + | |
62 " FROM sediment_yield sy " + | |
63 " JOIN rivers r ON sy.river_id = r.id " + | |
64 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " + | |
65 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " + | |
66 " WHERE r.name = :name " + | |
67 " AND ti.stop_time IS NOT NULL " + | |
68 " AND syv.station BETWEEN :startKm AND :endKm " + | |
69 " AND sy.kind = 1"; | |
70 | |
71 /** Query to get description, name and time range for epoch-type | |
72 * sediment yields. */ | |
55 public static final String SQL_SELECT_EPOCHS = | 73 public static final String SQL_SELECT_EPOCHS = |
56 "SELECT DISTINCT " + | 74 "SELECT DISTINCT " + |
57 " sy.description AS description, " + | 75 " sy.description AS description, " + |
58 " ti.start_time AS startYear, " + | 76 " ti.start_time AS startYear, " + |
59 " ti.stop_time AS end, " + | 77 " ti.stop_time AS end, " + |
143 | 161 |
144 private SedimentLoadFactory() { | 162 private SedimentLoadFactory() { |
145 } | 163 } |
146 | 164 |
147 /** | 165 /** |
148 * | 166 * @param river name of river. |
167 * @param type | |
149 */ | 168 */ |
150 public static SedimentLoad[] getLoads( | 169 public static SedimentLoad[] getLoads( |
151 String river, | 170 String river, |
152 String type, | 171 String type, |
153 double startKm, | 172 double startKm, |
286 (Date) row[2], | 305 (Date) row[2], |
287 true, | 306 true, |
288 ""); | 307 ""); |
289 } | 308 } |
290 return loads; | 309 return loads; |
310 } | |
311 else if (type.equals("off_epoch")) { | |
312 sqlQuery = session.createSQLQuery(SQL_SELECT_OFFEPOCHS) | |
313 .addScalar("startYear", StandardBasicTypes.DATE) | |
314 .addScalar("end", StandardBasicTypes.DATE); | |
315 sqlQuery.setString("name", river); | |
316 sqlQuery.setDouble("startKm", startKm); | |
317 sqlQuery.setDouble("endKm", endKm); | |
318 List<Object []> results = sqlQuery.list(); | |
319 | |
320 SedimentLoad[] loads = new SedimentLoad[results.size()]; | |
321 for (int i = 0; i < results.size(); i++) { | |
322 Object[] row = results.get(i); | |
323 loads[i] = new SedimentLoad( | |
324 ((Date) row[0]).toString() + (Date) row[1], | |
325 (Date) row[0], | |
326 (Date) row[1], | |
327 true, | |
328 ""); | |
329 } | |
330 return loads; | |
331 } | |
332 else { | |
333 log.warn("getSedimentLoadsUncached does not understand type " + type); | |
291 } | 334 } |
292 return new SedimentLoad[0]; | 335 return new SedimentLoad[0]; |
293 } | 336 } |
294 | 337 |
295 /** | 338 /** |