Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFactory.java Thu Nov 15 17:38:48 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFactory.java Thu Nov 15 17:44:07 2012 +0100 @@ -2,6 +2,7 @@ import gnu.trove.TDoubleArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -12,6 +13,7 @@ import org.apache.log4j.Logger; import org.hibernate.SQLQuery; import org.hibernate.Session; +import org.hibernate.exception.SQLGrammarException; import org.hibernate.type.StandardBasicTypes; import de.intevation.flys.artifacts.cache.CacheFactory; @@ -75,18 +77,17 @@ "SELECT" + " sy.description AS description, " + " ti.start_time AS startYear, " + - " ti.stop_time AS endYear, " + " syv.value AS load, " + - " syv.station AS km " + - " FROM sediment_yield sy" + + " syv.station AS km," + + " ti.stop_time AS endYear " + + " FROM sediment_yield sy " + " JOIN rivers r ON sy.river_id = r.id " + - " JOIN time_intervals ti ON sy.time_interval_id = ti.id" + - " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id" + - " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id" + - " WHERE r.name = :name" + - " AND ti.start_time BETWEEN :sbegin AND :send" + - " AND ti.stop_time IS NOT NULL" + - " AND ti.stop_time BETWEEN :ebegin AND :eend" + + " JOIN time_intervals ti ON sy.time_interval_id = ti.id " + + " JOIN sediment_yield_values syv ON sy.id = syv.sediment_yield_id " + + " JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " + + " WHERE r.name = :name " + + " AND ti.start_time BETWEEN :sbegin AND :send " + + " AND ti.stop_time BETWEEN :ebegin AND :eend " + " AND gf.name = :grain " + " AND syv.station BETWEEN :startKm AND :endKm"; @@ -258,9 +259,9 @@ SQLQuery sqlQuery = null; Calendar start = Calendar.getInstance(); - start.set(syear, 1, 1); + start.set(syear - 1, 11, 31); Calendar end = Calendar.getInstance(); - end.set(syear, 12, 31); + end.set(syear, 11, 30); if (type.equals("year") || type.equals("epoch")) { sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA) @@ -293,16 +294,15 @@ } else if (type.equals("off_epoch")) { Calendar toStart = Calendar.getInstance(); - toStart.set(eyear, 1, 1); + toStart.set(eyear - 1, 11, 31); Calendar toEnd = Calendar.getInstance(); - toEnd.set(eyear, 12, 31); - + toEnd.set(eyear, 11, 30); sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS_DATA) .addScalar("description", StandardBasicTypes.STRING) .addScalar("startYear", StandardBasicTypes.DATE) - .addScalar("stopYear", StandardBasicTypes.DATE) .addScalar("load", StandardBasicTypes.DOUBLE) - .addScalar("km", StandardBasicTypes.DOUBLE); + .addScalar("km", StandardBasicTypes.DOUBLE) + .addScalar("endYear", StandardBasicTypes.DATE); sqlQuery.setString("name", river); sqlQuery.setDouble("startKm", startKm); sqlQuery.setDouble("endKm", endKm); @@ -312,19 +312,21 @@ sqlQuery.setDate("eend", toEnd.getTime()); sqlQuery.setString("grain", "total"); - List<Object []> results = sqlQuery.list(); + List<Object[]> results = null; + results = sqlQuery.list(); SedimentLoad load = new SedimentLoad(); Object[] row = results.get(0); load = new SedimentLoad( (String) row[0], (Date) row[1], - null, - false); + (Date) row[4], + true); TDoubleArrayList kms = new TDoubleArrayList(); for (int i = 0; i < results.size(); i++) { row = results.get(i); kms.add((Double)row[3]); + load.setLoadTotal((Double)row[3], (Double)row[2]); } getValues("coarse", sqlQuery, load); getValues("fine_middle", sqlQuery, load);