diff backend/src/main/java/org/dive4elements/river/model/sinfo/DailyDischargeValue.java @ 9392:e4a6679b868f

Implemented first approach of bundu dynamic main value calculation
author mschaefer
date Thu, 09 Aug 2018 18:20:04 +0200
parents 50416a0df385
children bc9a45d2b1fa
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/sinfo/DailyDischargeValue.java	Thu Aug 09 17:25:13 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/sinfo/DailyDischargeValue.java	Thu Aug 09 18:20:04 2018 +0200
@@ -12,6 +12,7 @@
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -23,6 +24,11 @@
 import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
 
+import org.dive4elements.river.backend.SessionHolder;
+import org.dive4elements.river.model.Gauge;
+import org.hibernate.Query;
+import org.hibernate.Session;
+
 
 /**
  * Hibernate binding for the DB table daily_discharge_values
@@ -34,6 +40,16 @@
 @Table(name = "daily_discharge_values")
 public class DailyDischargeValue implements Serializable {
 
+    /***** TYPES *****/
+
+    /**
+     * Field to use in a query's order-by clause
+     *
+     */
+    public enum OrderByField {
+        DAY, DISCHARGE;
+    }
+
     /***** FIELDS *****/
 
     private static final long serialVersionUID = -6192738825193230784L;
@@ -107,4 +123,20 @@
     public void setDay(final Date day) {
         this.day = day;
     }
+
+    /**
+     * Selects from the database the daily discharge values of a gauge and a date range
+     */
+    public static List<DailyDischargeValue> getValues(final Gauge gauge, final Date startDate, final Date endDate, final OrderByField orderBy) {
+        final Session session = SessionHolder.HOLDER.get();
+        final String orderField = (orderBy == OrderByField.DISCHARGE) ? "discharge" : "day";
+        final Query query = session.createQuery("SELECT v"
+                + " FROM DailyDischargeValue AS v JOIN v.dailyDischarge AS s"
+                + " WHERE (s.gauge.id=:gaugeid) AND (v.day BETWEEN :startDate AND :endDate)"
+                + " ORDER BY " + orderField);
+        query.setParameter("gaugeid", gauge.getId());
+        query.setParameter("startDate", startDate);
+        query.setParameter("endDate", endDate);
+        return query.list();
+    }
 }

http://dive4elements.wald.intevation.org