Mercurial > dive4elements > river
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); |