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 /**

http://dive4elements.wald.intevation.org