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