comparison backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java @ 8418:536a1c0c8a81

Give ordered list of measurement stations at river.
author Tom Gottfried <tom@intevation.de>
date Thu, 16 Oct 2014 16:45:53 +0200
parents ffbeffe2d266
children 724d8dfb628a
comparison
equal deleted inserted replaced
8417:71144e25a6c9 8418:536a1c0c8a81
9 package org.dive4elements.river.model; 9 package org.dive4elements.river.model;
10 10
11 import java.util.Iterator; 11 import java.util.Iterator;
12 import java.util.List; 12 import java.util.List;
13 import java.util.ArrayList; 13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.Comparator;
14 16
15 import java.math.BigDecimal; 17 import java.math.BigDecimal;
16 18
17 import javax.persistence.Column; 19 import javax.persistence.Column;
18 import javax.persistence.Entity; 20 import javax.persistence.Entity;
27 import org.hibernate.Session; 29 import org.hibernate.Session;
28 import org.hibernate.Query; 30 import org.hibernate.Query;
29 31
30 import org.dive4elements.river.backend.SessionHolder; 32 import org.dive4elements.river.backend.SessionHolder;
31 33
34 import static org.dive4elements.river.backend.utils.EpsilonComparator.CMP;
35
32 @Entity 36 @Entity
33 @Table(name = "measurement_station") 37 @Table(name = "measurement_station")
34 public class MeasurementStation { 38 public class MeasurementStation {
35 39
36 private Integer id; 40 private Integer id;
45 49
46 private Gauge gauge; 50 private Gauge gauge;
47 private String gaugeName; 51 private String gaugeName;
48 52
49 private TimeInterval observationTimerange; 53 private TimeInterval observationTimerange;
54
55 public static final class MeasurementStationComparator
56 implements Comparator<MeasurementStation> {
57
58 public MeasurementStationComparator() {
59 }
60
61 @Override
62 public int compare(MeasurementStation m1, MeasurementStation m2)
63 throws IllegalArgumentException {
64
65 if (m1.getRange().getRiver() != m2.getRange().getRiver()) {
66 throw new IllegalArgumentException(
67 "Stations not at same river");
68 }
69
70 boolean kmUp = m1.getRange().getRiver().getKmUp();
71 double s1 = kmUp && m1.getRange().getB() != null
72 ? m1.getRange().getB().doubleValue()
73 : m1.getRange().getA().doubleValue();
74 double s2 = kmUp && m2.getRange().getB() != null
75 ? m2.getRange().getB().doubleValue()
76 : m2.getRange().getA().doubleValue();
77
78 int cmpStations = CMP.compare(s1, s2);
79 if (cmpStations == 0) {
80 if (m1.getMeasurementType().equals(m2.getMeasurementType())) {
81 throw new IllegalArgumentException(
82 "Two stations of same type at same km");
83 }
84
85 return m1.getMeasurementType().equals("Geschiebe") ? -1 : +1;
86 }
87 return cmpStations;
88 }
89 }
50 90
51 public MeasurementStation() { 91 public MeasurementStation() {
52 } 92 }
53 93
54 public MeasurementStation(String name, String measurementType, 94 public MeasurementStation(String name, String measurementType,
167 Session session = SessionHolder.HOLDER.get(); 207 Session session = SessionHolder.HOLDER.get();
168 208
169 Query query = session.createQuery( 209 Query query = session.createQuery(
170 "from MeasurementStation " + 210 "from MeasurementStation " +
171 "where range.river = :river"); 211 "where range.river = :river");
172
173 query.setParameter("river", river); 212 query.setParameter("river", river);
174 213
175 return query.list(); 214 List<MeasurementStation> result = query.list();
215 Collections.sort(result, new MeasurementStationComparator());
216 return result;
176 } 217 }
177 218
178 public static List<MeasurementStation> getStationsAtKM( 219 public static List<MeasurementStation> getStationsAtKM(
179 River river, 220 River river,
180 Double river_km 221 Double river_km

http://dive4elements.wald.intevation.org