# HG changeset patch # User Tom Gottfried # Date 1413470753 -7200 # Node ID 536a1c0c8a81192ddbf180e406c5a8ed364a62ae # Parent 71144e25a6c99b0929b447266da32ca1f47164c4 Give ordered list of measurement stations at river. diff -r 71144e25a6c9 -r 536a1c0c8a81 backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java --- a/backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java Thu Oct 16 13:39:22 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java Thu Oct 16 16:45:53 2014 +0200 @@ -11,6 +11,8 @@ import java.util.Iterator; import java.util.List; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.math.BigDecimal; @@ -29,6 +31,8 @@ import org.dive4elements.river.backend.SessionHolder; +import static org.dive4elements.river.backend.utils.EpsilonComparator.CMP; + @Entity @Table(name = "measurement_station") public class MeasurementStation { @@ -48,6 +52,42 @@ private TimeInterval observationTimerange; + public static final class MeasurementStationComparator + implements Comparator { + + public MeasurementStationComparator() { + } + + @Override + public int compare(MeasurementStation m1, MeasurementStation m2) + throws IllegalArgumentException { + + if (m1.getRange().getRiver() != m2.getRange().getRiver()) { + throw new IllegalArgumentException( + "Stations not at same river"); + } + + boolean kmUp = m1.getRange().getRiver().getKmUp(); + double s1 = kmUp && m1.getRange().getB() != null + ? m1.getRange().getB().doubleValue() + : m1.getRange().getA().doubleValue(); + double s2 = kmUp && m2.getRange().getB() != null + ? m2.getRange().getB().doubleValue() + : m2.getRange().getA().doubleValue(); + + int cmpStations = CMP.compare(s1, s2); + if (cmpStations == 0) { + if (m1.getMeasurementType().equals(m2.getMeasurementType())) { + throw new IllegalArgumentException( + "Two stations of same type at same km"); + } + + return m1.getMeasurementType().equals("Geschiebe") ? -1 : +1; + } + return cmpStations; + } + } + public MeasurementStation() { } @@ -169,10 +209,11 @@ Query query = session.createQuery( "from MeasurementStation " + "where range.river = :river"); - query.setParameter("river", river); - return query.list(); + List result = query.list(); + Collections.sort(result, new MeasurementStationComparator()); + return result; } public static List getStationsAtKM(