Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/model/sinfo/DailyDischargeValue.java @ 9404:bc9a45d2b1fa
common time range for gauges incl. error messages
author | gernotbelger |
---|---|
date | Wed, 15 Aug 2018 13:59:09 +0200 |
parents | e4a6679b868f |
children | 34cd4faf43f4 |
comparison
equal
deleted
inserted
replaced
9403:e2da9c8a7c57 | 9404:bc9a45d2b1fa |
---|---|
9 */ | 9 */ |
10 | 10 |
11 package org.dive4elements.river.model.sinfo; | 11 package org.dive4elements.river.model.sinfo; |
12 | 12 |
13 import java.io.Serializable; | 13 import java.io.Serializable; |
14 import java.util.ArrayList; | |
14 import java.util.Date; | 15 import java.util.Date; |
15 import java.util.List; | 16 import java.util.List; |
16 | 17 |
17 import javax.persistence.Column; | 18 import javax.persistence.Column; |
18 import javax.persistence.Entity; | 19 import javax.persistence.Entity; |
26 | 27 |
27 import org.dive4elements.river.backend.SessionHolder; | 28 import org.dive4elements.river.backend.SessionHolder; |
28 import org.dive4elements.river.model.Gauge; | 29 import org.dive4elements.river.model.Gauge; |
29 import org.hibernate.Query; | 30 import org.hibernate.Query; |
30 import org.hibernate.Session; | 31 import org.hibernate.Session; |
31 | |
32 | 32 |
33 /** | 33 /** |
34 * Hibernate binding for the DB table daily_discharge_values | 34 * Hibernate binding for the DB table daily_discharge_values |
35 * | 35 * |
36 * @author Matthias Schäfer | 36 * @author Matthias Schäfer |
60 | 60 |
61 private Date day; | 61 private Date day; |
62 | 62 |
63 private Double discharge; | 63 private Double discharge; |
64 | 64 |
65 | |
66 /***** CONSTRUCTORS *****/ | 65 /***** CONSTRUCTORS *****/ |
67 | 66 |
68 public DailyDischargeValue() { | 67 public DailyDischargeValue() { |
69 } | 68 } |
70 | 69 |
78 * Parameter constructor with primitive parameter types | 77 * Parameter constructor with primitive parameter types |
79 */ | 78 */ |
80 public DailyDischargeValue(final DailyDischarge dailyDischarge, final Date day, final double discharge) { | 79 public DailyDischargeValue(final DailyDischarge dailyDischarge, final Date day, final double discharge) { |
81 this(dailyDischarge, day, Double.valueOf(discharge)); | 80 this(dailyDischarge, day, Double.valueOf(discharge)); |
82 } | 81 } |
83 | |
84 | 82 |
85 /***** METHODS *****/ | 83 /***** METHODS *****/ |
86 | 84 |
87 @Id | 85 @Id |
88 @SequenceGenerator(name = "SEQUENCE_DAILY_DISCHARGE_VALUE_ID_SEQ", sequenceName = "DAILY_DISCHARGE_VALUES_ID_SEQ", allocationSize = 1) | 86 @SequenceGenerator(name = "SEQUENCE_DAILY_DISCHARGE_VALUE_ID_SEQ", sequenceName = "DAILY_DISCHARGE_VALUES_ID_SEQ", allocationSize = 1) |
128 * Selects from the database the daily discharge values of a gauge and a date range | 126 * Selects from the database the daily discharge values of a gauge and a date range |
129 */ | 127 */ |
130 public static List<DailyDischargeValue> getValues(final Gauge gauge, final Date startDate, final Date endDate, final OrderByField orderBy) { | 128 public static List<DailyDischargeValue> getValues(final Gauge gauge, final Date startDate, final Date endDate, final OrderByField orderBy) { |
131 final Session session = SessionHolder.HOLDER.get(); | 129 final Session session = SessionHolder.HOLDER.get(); |
132 final String orderField = (orderBy == OrderByField.DISCHARGE) ? "discharge" : "day"; | 130 final String orderField = (orderBy == OrderByField.DISCHARGE) ? "discharge" : "day"; |
133 final Query query = session.createQuery("SELECT v" | 131 final Query query = session.createQuery("SELECT v" + " FROM DailyDischargeValue AS v JOIN v.dailyDischarge AS s" |
134 + " FROM DailyDischargeValue AS v JOIN v.dailyDischarge AS s" | 132 + " WHERE (s.gauge.id=:gaugeid) AND (v.day BETWEEN :startDate AND :endDate)" + " ORDER BY " + orderField); |
135 + " WHERE (s.gauge.id=:gaugeid) AND (v.day BETWEEN :startDate AND :endDate)" | |
136 + " ORDER BY " + orderField); | |
137 query.setParameter("gaugeid", gauge.getId()); | 133 query.setParameter("gaugeid", gauge.getId()); |
138 query.setParameter("startDate", startDate); | 134 query.setParameter("startDate", startDate); |
139 query.setParameter("endDate", endDate); | 135 query.setParameter("endDate", endDate); |
140 return query.list(); | 136 return query.list(); |
141 } | 137 } |
138 | |
139 /** | |
140 * Selects from the database the daily discharge, puts the first and the last into a List (min, max day) | |
141 */ | |
142 public static List<DailyDischargeValue> getGlobalMinMax(final Gauge gauge) { | |
143 final Session session = SessionHolder.HOLDER.get(); | |
144 final Query query = session | |
145 .createQuery("SELECT v" + " FROM DailyDischargeValue AS v JOIN v.dailyDischarge AS s" + " WHERE (s.gauge.id=:gaugeid) ORDER BY day"); | |
146 query.setParameter("gaugeid", gauge.getId()); | |
147 return minMaxFromDbResultHelper(query.list()); | |
148 } | |
149 | |
150 private static List<DailyDischargeValue> minMaxFromDbResultHelper(final List<DailyDischargeValue> values) { | |
151 if (values != null && values.size() > 1) { | |
152 final List<DailyDischargeValue> newList = new ArrayList<>(); | |
153 newList.add(values.get(0)); | |
154 newList.add(values.get(values.size() - 1)); | |
155 return newList; | |
156 } | |
157 return null; | |
158 | |
159 } | |
142 } | 160 } |