diff backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java @ 8412:17db08570637

SCHEMA CHANGE: removed superfluous columns station and river_id from measurement_stations and adapted other components accordingly.
author Tom Gottfried <tom@intevation.de>
date Wed, 15 Oct 2014 19:20:26 +0200
parents d5d717effa06
children ffbeffe2d266
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java	Wed Oct 15 14:58:46 2014 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/MeasurementStation.java	Wed Oct 15 19:20:26 2014 +0200
@@ -8,7 +8,11 @@
 
 package org.dive4elements.river.model;
 
+import java.util.Iterator;
 import java.util.List;
+import java.util.ArrayList;
+
+import java.math.BigDecimal;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -35,13 +39,10 @@
     private String measurementType;
     private String riverside;
     private String operator;
-    private String description;
+    private String comment;
 
-    private Double station;
     private Range range;
 
-    private River river;
-
     private Gauge gauge;
     private String gaugeName;
 
@@ -50,22 +51,20 @@
     public MeasurementStation() {
     }
 
-    public MeasurementStation(River river, String name, String measurementType,
-        String riverside, Double station, Range range, Gauge gauge,
+    public MeasurementStation(String name, String measurementType,
+        String riverside, Range range, Gauge gauge,
         String gaugeName, TimeInterval observationTimerange, String operator,
-        String description
+        String comment
     ) {
-        this.river = river;
         this.name = name;
         this.measurementType = measurementType;
         this.riverside = riverside;
-        this.station = station;
         this.range = range;
         this.gauge = gauge;
         this.gaugeName = gaugeName;
         this.observationTimerange = observationTimerange;
         this.operator = operator;
-        this.description = description;
+        this.comment = comment;
     }
 
     @Id
@@ -108,16 +107,6 @@
     }
 
     @OneToOne
-    @JoinColumn(name = "river_id")
-    public River getRiver() {
-        return river;
-    }
-
-    public void setRiver(River river) {
-        this.river = river;
-    }
-
-    @OneToOne
     @JoinColumn(name = "reference_gauge_id")
     public Gauge getGauge() {
         return gauge;
@@ -136,15 +125,6 @@
         this.gaugeName = gaugeName;
     }
 
-    @Column(name = "station")
-    public Double getStation() {
-        return station;
-    }
-
-    public void setStation(Double station) {
-        this.station = station;
-    }
-
     @OneToOne
     @JoinColumn(name = "range_id")
     public Range getRange() {
@@ -156,7 +136,7 @@
     }
 
     @OneToOne
-    @JoinColumn(name = "observation_timerange_id")
+    @JoinColumn(name = "time_interval_id")
     public TimeInterval getObservationTimerange() {
         return observationTimerange;
     }
@@ -174,25 +154,53 @@
         this.operator = operator;
     }
 
-    @Column(name = "description")
-    public String getDescription() {
-        return description;
+    @Column(name = "comment")
+    public String getComment() {
+        return comment;
     }
 
-    public void setDescription(String description) {
-        this.description = description;
+    public void setComment(String comment) {
+        this.comment = comment;
     }
 
-    public static List<MeasurementStation> getStationsAtKM(String river, Double river_km)
-    {
+    public static List<MeasurementStation> getStationsAtRiver(River river) {
         Session session = SessionHolder.HOLDER.get();
 
         Query query = session.createQuery(
-            "from MeasurementStation as ms " +
-            "where ms.river.name = :river_name and ms.station = :river_km");
-        query.setParameter("river_name", river);
-        query.setParameter("river_km", river_km);
+            "from MeasurementStation " +
+            "where range.river = :river");
+
+        query.setParameter("river", river);
 
         return query.list();
     }
+
+    public static List<MeasurementStation> getStationsAtKM(
+        River river,
+        Double river_km
+    ) {
+        Session session = SessionHolder.HOLDER.get();
+
+        Query query = session.createQuery(
+            "from MeasurementStation where range.river = :river");
+        query.setParameter("river", river);
+
+        List<MeasurementStation> result = new ArrayList<MeasurementStation>();
+        for (Iterator iter = query.iterate(); iter.hasNext();) {
+            MeasurementStation st = (MeasurementStation)iter.next();
+            Double a = st.getRange().getA().doubleValue();
+            Double b = st.getRange().getB() == null
+                ? null
+                : st.getRange().getB().doubleValue();
+
+            // In case river is km_up, station is at larger value of range
+            if (river.getKmUp() && b != null && b == river_km
+                || !river.getKmUp() && a == river_km
+                || b == null && a == river_km // no end km given
+            ) {
+                result.add(st);
+            }
+        }
+        return result;
+    }
 }

http://dive4elements.wald.intevation.org