# HG changeset patch # User Sascha L. Teichmann # Date 1367243657 -7200 # Node ID a7b56219b362aea7162bb8c17457868fa5e161c5 # Parent a251ccee56e4fba7b0b458f157da87f0d88dedcd Partial fix for flys/issue1247: When trying to find gauges take care of the fact that start and end position are in abitrary order. diff -r a251ccee56e4 -r a7b56219b362 backend/src/main/java/org/dive4elements/river/model/River.java --- a/backend/src/main/java/org/dive4elements/river/model/River.java Mon Apr 29 11:42:15 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/River.java Mon Apr 29 15:54:17 2013 +0200 @@ -200,6 +200,8 @@ double c = r.getA().doubleValue(); double d = r.getB().doubleValue(); + if (c > d) { double t = c; c = d; d = t; } + double start = c >= a ? c : a; double stop = d <= b ? d : b; @@ -228,7 +230,9 @@ Session session = SessionHolder.HOLDER.get(); Query query = session.createQuery( "from Gauge g where river=:river " + - "and :p between g.range.a and g.range.b"); + "and :p between " + + "least(g.range.a, g.range.b) and " + + "greatest(g.range.a, g.range.b)"); query.setParameter("river", this); query.setParameter("p", new BigDecimal(p, PRECISION)); List gauges = query.list(); @@ -265,7 +269,7 @@ query.setParameter("river", getId()); - double minmax[] = new double[] { Double.MAX_VALUE, Double.MIN_VALUE }; + double minmax[] = new double[] { Double.MAX_VALUE, -Double.MAX_VALUE }; List results = query.list(); @@ -312,7 +316,7 @@ return null; } - double minmax[] = new double[] { Double.MAX_VALUE, Double.MIN_VALUE }; + double minmax[] = new double[] { Double.MAX_VALUE, -Double.MAX_VALUE }; for (Gauge g: gauges) { Range r = g.getRange(); @@ -321,13 +325,23 @@ continue; } - double a = r.getA().doubleValue(); - minmax[0] = minmax[0] < a ? minmax[0] : a; + double a = r.getA().doubleValue(); + if (a < minmax[0]) { + minmax[0] = a; + } + if (a > minmax[1]) { + minmax[1] = a; + } BigDecimal bigB = r.getB(); if (bigB != null) { - double b = bigB.doubleValue(); - minmax[1] = minmax[1] > b ? minmax[1] : b; + double b = bigB.doubleValue(); + if (b < minmax[0]) { + minmax[0] = b; + } + if (b > minmax[1]) { + minmax[1] = b; + } } } @@ -336,7 +350,7 @@ public Map queryGaugeDatumsKMs() { List gauges = getGauges(); - Map result = new TreeMap(KM_CMP); + Map result = new TreeMap(KM_CMP); for (Gauge gauge: gauges) { BigDecimal km = gauge.getStation();