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);

http://dive4elements.wald.intevation.org