comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFactory.java @ 4546:af1938d4e957

New field in sediment load object and calculation. * Factory reads total load value. * New field in sediment load object. * State adds new facet to generate output for this type of data.
author Raimund Renkert <rrenkert@intevation.de>
date Thu, 15 Nov 2012 17:44:07 +0100
parents a5e4fae31089
children 2fadc6c5cdad
comparison
equal deleted inserted replaced
4545:bb8b1c182913 4546:af1938d4e957
1 package de.intevation.flys.artifacts.model.minfo; 1 package de.intevation.flys.artifacts.model.minfo;
2 2
3 import gnu.trove.TDoubleArrayList; 3 import gnu.trove.TDoubleArrayList;
4 4
5 import java.util.Arrays;
5 import java.util.Calendar; 6 import java.util.Calendar;
6 import java.util.Date; 7 import java.util.Date;
7 import java.util.List; 8 import java.util.List;
8 9
9 import net.sf.ehcache.Cache; 10 import net.sf.ehcache.Cache;
10 import net.sf.ehcache.Element; 11 import net.sf.ehcache.Element;
11 12
12 import org.apache.log4j.Logger; 13 import org.apache.log4j.Logger;
13 import org.hibernate.SQLQuery; 14 import org.hibernate.SQLQuery;
14 import org.hibernate.Session; 15 import org.hibernate.Session;
16 import org.hibernate.exception.SQLGrammarException;
15 import org.hibernate.type.StandardBasicTypes; 17 import org.hibernate.type.StandardBasicTypes;
16 18
17 import de.intevation.flys.artifacts.cache.CacheFactory; 19 import de.intevation.flys.artifacts.cache.CacheFactory;
18 import de.intevation.flys.artifacts.model.StaticSedimentLoadCacheKey; 20 import de.intevation.flys.artifacts.model.StaticSedimentLoadCacheKey;
19 import de.intevation.flys.backend.SessionHolder; 21 import de.intevation.flys.backend.SessionHolder;
73 75
74 public static final String SQL_SELECT_EPOCHS_DATA = 76 public static final String SQL_SELECT_EPOCHS_DATA =
75 "SELECT" + 77 "SELECT" +
76 " sy.description AS description, " + 78 " sy.description AS description, " +
77 " ti.start_time AS startYear, " + 79 " ti.start_time AS startYear, " +
78 " ti.stop_time AS endYear, " +
79 " syv.value AS load, " + 80 " syv.value AS load, " +
80 " syv.station AS km " + 81 " syv.station AS km," +
81 " FROM sediment_yield sy" + 82 " ti.stop_time AS endYear " +
83 " FROM sediment_yield sy " +
82 " JOIN rivers r ON sy.river_id = r.id " + 84 " JOIN rivers r ON sy.river_id = r.id " +
83 " JOIN time_intervals ti ON sy.time_interval_id = ti.id" + 85 " JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
84 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id" + 86 " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " +
85 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id" + 87 " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
86 " WHERE r.name = :name" + 88 " WHERE r.name = :name " +
87 " AND ti.start_time BETWEEN :sbegin AND :send" + 89 " AND ti.start_time BETWEEN :sbegin AND :send " +
88 " AND ti.stop_time IS NOT NULL" + 90 " AND ti.stop_time BETWEEN :ebegin AND :eend " +
89 " AND ti.stop_time BETWEEN :ebegin AND :eend" +
90 " AND gf.name = :grain " + 91 " AND gf.name = :grain " +
91 " AND syv.station BETWEEN :startKm AND :endKm"; 92 " AND syv.station BETWEEN :startKm AND :endKm";
92 93
93 private SedimentLoadFactory() { 94 private SedimentLoadFactory() {
94 } 95 }
256 log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached"); 257 log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached");
257 Session session = SessionHolder.HOLDER.get(); 258 Session session = SessionHolder.HOLDER.get();
258 SQLQuery sqlQuery = null; 259 SQLQuery sqlQuery = null;
259 260
260 Calendar start = Calendar.getInstance(); 261 Calendar start = Calendar.getInstance();
261 start.set(syear, 1, 1); 262 start.set(syear - 1, 11, 31);
262 Calendar end = Calendar.getInstance(); 263 Calendar end = Calendar.getInstance();
263 end.set(syear, 12, 31); 264 end.set(syear, 11, 30);
264 265
265 if (type.equals("year") || type.equals("epoch")) { 266 if (type.equals("year") || type.equals("epoch")) {
266 sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA) 267 sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA)
267 .addScalar("description", StandardBasicTypes.STRING) 268 .addScalar("description", StandardBasicTypes.STRING)
268 .addScalar("year", StandardBasicTypes.DATE) 269 .addScalar("year", StandardBasicTypes.DATE)
291 292
292 return load; 293 return load;
293 } 294 }
294 else if (type.equals("off_epoch")) { 295 else if (type.equals("off_epoch")) {
295 Calendar toStart = Calendar.getInstance(); 296 Calendar toStart = Calendar.getInstance();
296 toStart.set(eyear, 1, 1); 297 toStart.set(eyear - 1, 11, 31);
297 Calendar toEnd = Calendar.getInstance(); 298 Calendar toEnd = Calendar.getInstance();
298 toEnd.set(eyear, 12, 31); 299 toEnd.set(eyear, 11, 30);
299
300 sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS_DATA) 300 sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS_DATA)
301 .addScalar("description", StandardBasicTypes.STRING) 301 .addScalar("description", StandardBasicTypes.STRING)
302 .addScalar("startYear", StandardBasicTypes.DATE) 302 .addScalar("startYear", StandardBasicTypes.DATE)
303 .addScalar("stopYear", StandardBasicTypes.DATE)
304 .addScalar("load", StandardBasicTypes.DOUBLE) 303 .addScalar("load", StandardBasicTypes.DOUBLE)
305 .addScalar("km", StandardBasicTypes.DOUBLE); 304 .addScalar("km", StandardBasicTypes.DOUBLE)
305 .addScalar("endYear", StandardBasicTypes.DATE);
306 sqlQuery.setString("name", river); 306 sqlQuery.setString("name", river);
307 sqlQuery.setDouble("startKm", startKm); 307 sqlQuery.setDouble("startKm", startKm);
308 sqlQuery.setDouble("endKm", endKm); 308 sqlQuery.setDouble("endKm", endKm);
309 sqlQuery.setDate("sbegin", start.getTime()); 309 sqlQuery.setDate("sbegin", start.getTime());
310 sqlQuery.setDate("send", end.getTime()); 310 sqlQuery.setDate("send", end.getTime());
311 sqlQuery.setDate("ebegin",toStart.getTime()); 311 sqlQuery.setDate("ebegin",toStart.getTime());
312 sqlQuery.setDate("eend", toEnd.getTime()); 312 sqlQuery.setDate("eend", toEnd.getTime());
313 sqlQuery.setString("grain", "total"); 313 sqlQuery.setString("grain", "total");
314 314
315 List<Object []> results = sqlQuery.list(); 315 List<Object[]> results = null;
316 results = sqlQuery.list();
316 317
317 SedimentLoad load = new SedimentLoad(); 318 SedimentLoad load = new SedimentLoad();
318 Object[] row = results.get(0); 319 Object[] row = results.get(0);
319 load = new SedimentLoad( 320 load = new SedimentLoad(
320 (String) row[0], 321 (String) row[0],
321 (Date) row[1], 322 (Date) row[1],
322 null, 323 (Date) row[4],
323 false); 324 true);
324 TDoubleArrayList kms = new TDoubleArrayList(); 325 TDoubleArrayList kms = new TDoubleArrayList();
325 for (int i = 0; i < results.size(); i++) { 326 for (int i = 0; i < results.size(); i++) {
326 row = results.get(i); 327 row = results.get(i);
327 kms.add((Double)row[3]); 328 kms.add((Double)row[3]);
329 load.setLoadTotal((Double)row[3], (Double)row[2]);
328 } 330 }
329 getValues("coarse", sqlQuery, load); 331 getValues("coarse", sqlQuery, load);
330 getValues("fine_middle", sqlQuery, load); 332 getValues("fine_middle", sqlQuery, load);
331 getValues("sand", sqlQuery, load); 333 getValues("sand", sqlQuery, load);
332 getValues("suspended_sediment", sqlQuery, load); 334 getValues("suspended_sediment", sqlQuery, load);

http://dive4elements.wald.intevation.org