diff backend/src/main/java/org/dive4elements/river/model/sinfo/CollisionValue.java @ 9160:38e8febd11b6

Added methods to select collision values and collision counts
author mschaefer
date Tue, 19 Jun 2018 14:24:41 +0200
parents 623b51bf03d7
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/sinfo/CollisionValue.java	Tue Jun 19 14:23:15 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/sinfo/CollisionValue.java	Tue Jun 19 14:24:41 2018 +0200
@@ -11,6 +11,7 @@
 package org.dive4elements.river.model.sinfo;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -25,8 +26,11 @@
 import javax.persistence.Table;
 
 import org.dive4elements.river.backend.SessionHolder;
+import org.dive4elements.river.model.River;
 import org.hibernate.Query;
+import org.hibernate.SQLQuery;
 import org.hibernate.Session;
+import org.hibernate.type.StandardBasicTypes;
 
 
 /**
@@ -164,4 +168,35 @@
         query.setParameter("kmHi", new Double(kmHi));
         return query.list();
     }
+    /**
+     * Selects from the database the collision values of a km range of a river and a date range
+     */
+    public static List<CollisionValue> getValues(final River river, final double kmLo, final double kmHi, final Date fromDate, final Date toDate) {
+        final Session session = SessionHolder.HOLDER.get();
+        final SQLQuery query = session.createSQLQuery("SELECT station, event_date, gauge_w, gauge_name, ct.name AS collisiontype"
+                + " FROM collision_values v INNER JOIN collision s ON v.collision_id=s.id"
+                + " INNER JOIN collision_type ct ON v.collision_type_id=ct.id"
+                + " WHERE (s.river_id=:river_id)"
+                + " AND (station BETWEEN (:kmLo - 0.0001) AND (:kmHi + 0.0001))"
+                + " AND (event_date BETWEEN :fromDate AND :toDate)"
+                + " ORDER BY station, event_date")
+                .addScalar("station", StandardBasicTypes.DOUBLE)
+                .addScalar("event_date", StandardBasicTypes.DATE)
+                .addScalar("gauge_w", StandardBasicTypes.DOUBLE)
+                .addScalar("gauge_name", StandardBasicTypes.STRING)
+                .addScalar("collisiontype", StandardBasicTypes.STRING);
+        query.setInteger("river_id", river.getId());
+        query.setDouble("kmLo", new Double(kmLo));
+        query.setDouble("kmHi", new Double(kmHi));
+        query.setDate("fromDate", fromDate);
+        query.setDate("toDate", toDate);
+        return buildCollisionValueList(query.list());
+    }
+
+    private static List<CollisionValue> buildCollisionValueList(final List<Object[]> rows) {
+        final List<CollisionValue> values = new ArrayList<>();
+        for (int i = 0; i <= rows.size() - 1; i++)
+            values.add(new CollisionValue(null, (double) rows.get(i)[0], null, (Date) rows.get(i)[1], (String) rows.get(i)[3], (double) rows.get(i)[2]));
+        return values;
+    }
 }

http://dive4elements.wald.intevation.org