Mercurial > dive4elements > river
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 |