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 }

http://dive4elements.wald.intevation.org