diff backend/src/main/java/org/dive4elements/river/model/Gauge.java @ 9404:bc9a45d2b1fa

common time range for gauges incl. error messages
author gernotbelger
date Wed, 15 Aug 2018 13:59:09 +0200
parents 5e38e2924c07
children b0520a85739d
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/Gauge.java	Wed Aug 15 13:22:00 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/Gauge.java	Wed Aug 15 13:59:09 2018 +0200
@@ -8,48 +8,42 @@
 
 package org.dive4elements.river.model;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
-
-import java.io.Serializable;
-
 import java.util.List;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Column;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
 import javax.persistence.SequenceGenerator;
-import javax.persistence.GenerationType;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.OneToMany;
-
-import org.hibernate.Session;
-import org.hibernate.Query;
+import javax.persistence.Table;
 
 import org.apache.log4j.Logger;
-
 import org.dive4elements.river.backend.SessionHolder;
+import org.hibernate.Query;
+import org.hibernate.Session;
 
 /** Database-mapped Gauge with all info about it. */
 @Entity
 @Table(name = "gauges")
-public class Gauge
-implements   Serializable, Comparable<Gauge>
-{
+public class Gauge implements Serializable, Comparable<Gauge> {
     private static final Logger log = Logger.getLogger(Gauge.class);
 
     public static final int MASTER_DISCHARGE_TABLE = 0;
 
-    private Integer    id;
-    private String     name;
-    private River      river;
+    private Integer id;
+    private String name;
+    private River river;
     private BigDecimal station;
     private BigDecimal aeo;
     private BigDecimal datum;
-    private Long       officialNumber;
-    private Range      range;
+    private Long officialNumber;
+    private Range range;
 
     private List<DischargeTable> dischargeTables;
 
@@ -59,247 +53,226 @@
     public Gauge() {
     }
 
-    public Gauge(
-        String     name,
-        River      river,
-        BigDecimal station,
-        BigDecimal aeo,
-        BigDecimal datum,
-        Long       officialNumber,
-        Range      range
-    ) {
-        this.name            = name;
-        this.river           = river;
-        this.station         = station;
-        this.aeo             = aeo;
-        this.datum           = datum;
-        this.officialNumber  = officialNumber;
-        this.range           = range;
+    public Gauge(final String name, final River river, final BigDecimal station, final BigDecimal aeo, final BigDecimal datum, final Long officialNumber,
+            final Range range) {
+        this.name = name;
+        this.river = river;
+        this.station = station;
+        this.aeo = aeo;
+        this.datum = datum;
+        this.officialNumber = officialNumber;
+        this.range = range;
     }
 
     @Id
-    @SequenceGenerator(
-        name           = "SEQUENCE_GAUGES_ID_SEQ",
-        sequenceName   = "GAUGES_ID_SEQ",
-        allocationSize = 1)
-    @GeneratedValue(
-        strategy  = GenerationType.SEQUENCE,
-        generator = "SEQUENCE_GAUGES_ID_SEQ")
+    @SequenceGenerator(name = "SEQUENCE_GAUGES_ID_SEQ", sequenceName = "GAUGES_ID_SEQ", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE_GAUGES_ID_SEQ")
     @Column(name = "id")
     public Integer getId() {
-        return id;
+        return this.id;
     }
 
-    public void setId(Integer id) {
+    public void setId(final Integer id) {
         this.id = id;
     }
 
     @OneToOne
-    @JoinColumn(name = "river_id" )
+    @JoinColumn(name = "river_id")
     public River getRiver() {
-        return river;
+        return this.river;
     }
 
-    public void setRiver(River river) {
+    public void setRiver(final River river) {
         this.river = river;
     }
 
     @Column(name = "name")
     public String getName() {
-        return name;
+        return this.name;
     }
 
-    public void setName(String name) {
+    public void setName(final String name) {
         this.name = name;
     }
 
     @Column(name = "station") // FIXME: type mapping needed
     public BigDecimal getStation() {
-        return station;
+        return this.station;
     }
 
-    public void setStation(BigDecimal station) {
+    public void setStation(final BigDecimal station) {
         this.station = station;
     }
 
     @Column(name = "aeo") // FIXME: type mapping needed
     public BigDecimal getAeo() {
-        return aeo;
+        return this.aeo;
     }
 
-    public void setAeo(BigDecimal aeo) {
+    public void setAeo(final BigDecimal aeo) {
         this.aeo = aeo;
     }
 
     @Column(name = "datum") // FIXME: type mapping needed
     public BigDecimal getDatum() {
-        return datum;
+        return this.datum;
     }
 
-    public void setDatum(BigDecimal datum) {
+    public void setDatum(final BigDecimal datum) {
         this.datum = datum;
     }
 
     @Column(name = "official_number")
     public Long getOfficialNumber() {
-        return officialNumber;
+        return this.officialNumber;
     }
 
-    public void setOfficialNumber(Long officialNumber) {
+    public void setOfficialNumber(final Long officialNumber) {
         this.officialNumber = officialNumber;
     }
 
     @OneToOne
-    @JoinColumn(name = "range_id" )
+    @JoinColumn(name = "range_id")
     public Range getRange() {
-        return range;
+        return this.range;
     }
 
-    public void setRange(Range range) {
+    public void setRange(final Range range) {
         this.range = range;
     }
 
     @OneToMany
     @JoinColumn(name = "gauge_id")
     public List<DischargeTable> getDischargeTables() {
-        return dischargeTables;
+        return this.dischargeTables;
     }
 
-    public void setDischargeTables(List<DischargeTable> dischargeTables) {
+    public void setDischargeTables(final List<DischargeTable> dischargeTables) {
         this.dischargeTables = dischargeTables;
     }
 
-
     /**
      * Returns min and max W values of this gauge.
      *
      * @return the min and max W value of this gauge [min,max].
      */
     public double[] determineMinMaxW() {
-        Session session = SessionHolder.HOLDER.get();
+        final Session session = SessionHolder.HOLDER.get();
 
-        DischargeTable dischargeTable = fetchMasterDischargeTable();
+        final DischargeTable dischargeTable = fetchMasterDischargeTable();
 
         if (dischargeTable == null) {
             return null;
         }
 
-        Query query  = session.createQuery(
-            "select min(w) as min, max(w) as max from DischargeTableValue " +
-            "where table_id =:table");
+        final Query query = session.createQuery("select min(w) as min, max(w) as max from DischargeTableValue " + "where table_id =:table");
         query.setParameter("table", dischargeTable.getId());
 
-        List<?> results = query.list();
+        final List<?> results = query.list();
         if (results.isEmpty()) {
             log.error("No values in discharge table found.");
             return null;
         }
 
-        Object[] result  = (Object[])results.get(0);
+        final Object[] result = (Object[]) results.get(0);
 
-        BigDecimal a = (BigDecimal)result[0];
-        BigDecimal b = (BigDecimal)result[1];
+        final BigDecimal a = (BigDecimal) result[0];
+        final BigDecimal b = (BigDecimal) result[1];
 
-        return a != null && b != null
-            ? new double [] { a.doubleValue(), b.doubleValue() }
-            : null;
+        return a != null && b != null ? new double[] { a.doubleValue(), b.doubleValue() } : null;
     }
 
     @OneToMany
     @JoinColumn(name = "gauge_id")
     public List<MainValue> getMainValues() {
-        return mainValues;
+        return this.mainValues;
     }
 
-    public void setMainValues(List<MainValue> mainValues) {
+    public void setMainValues(final List<MainValue> mainValues) {
         this.mainValues = mainValues;
     }
 
-    public static Gauge getGaugeByOfficialNumber(long number) {
-        Session session = SessionHolder.HOLDER.get();
+    public static Gauge getGaugeByOfficialNumber(final long number) {
+        final Session session = SessionHolder.HOLDER.get();
 
-        Query query = session.createQuery(
-            "from Gauge where officialNumber=:number");
+        final Query query = session.createQuery("from Gauge where officialNumber=:number");
 
         query.setParameter("number", number);
 
-        List<Gauge> results = query.list();
+        final List<Gauge> results = query.list();
 
         return results.isEmpty() ? null : results.get(0);
     }
 
-    public static Gauge getGaugeByOfficialNumber(
-        long number,
-        String river_name
-    ) {
-        Session session = SessionHolder.HOLDER.get();
+    public static Gauge getGaugeByOfficialNumber(final long number, final String river_name) {
+        final Session session = SessionHolder.HOLDER.get();
 
-        Query query = session.createQuery(
-            "from Gauge as gau " +
-            "where gau.officialNumber=:number and gau.river.name=:river_name");
+        final Query query = session.createQuery("from Gauge as gau " + "where gau.officialNumber=:number and gau.river.name=:river_name");
 
         query.setParameter("number", number);
         query.setParameter("river_name", river_name);
 
-        List<Gauge> results = query.list();
+        final List<Gauge> results = query.list();
 
         return results.isEmpty() ? null : results.get(0);
     }
 
+    public static Gauge getGaugeByNameAndRiver(final String gauge_name, final River river) {
+        final Session session = SessionHolder.HOLDER.get();
+
+        final Query query = session.createQuery("from Gauge as gau " + "where gau.name=:name and gau.river=:river");
+
+        query.setParameter("name", gauge_name);
+        query.setParameter("river", river);
+
+        final List<Gauge> results = query.list();
+
+        return results.isEmpty() ? null : results.get(0);
+    }
 
     public DischargeTable fetchMasterDischargeTable() {
-        Session session = SessionHolder.HOLDER.get();
+        final Session session = SessionHolder.HOLDER.get();
 
-        Query query = session.createQuery(
-            "from DischargeTable " +
-            "where kind = 0 " +
-            "and gauge = :gauge");
+        final Query query = session.createQuery("from DischargeTable " + "where kind = 0 " + "and gauge = :gauge");
 
         query.setParameter("gauge", this);
 
-        List<Object> results = query.list();
+        final List<Object> results = query.list();
 
-        return results.isEmpty()
-            ? null
-            : (DischargeTable)results.get(0);
+        return results.isEmpty() ? null : (DischargeTable) results.get(0);
     }
 
     /**
      * Returns an array of [days, qs] necessary to create duration curves.
      *
      * @return a 2dim array of [days, qs] where days is an int[] and qs is
-     * an double[].
+     *         an double[].
      */
     public Object[] fetchDurationCurveData() {
-        Session session = SessionHolder.HOLDER.get();
+        final Session session = SessionHolder.HOLDER.get();
 
-        Query query = session.createQuery(
-            "select cast(nmv.name as integer) as days, mv.value as q " +
-            "from MainValue as mv " +
-            "join mv.mainValue as nmv " +
-            "join nmv.type mvt " +
-            "where mvt.name = 'D' and mv.gauge.id = :gauge_id " +
-            "order by days");
+        final Query query = session.createQuery("select cast(nmv.name as integer) as days, mv.value as q " + "from MainValue as mv "
+                + "join mv.mainValue as nmv " + "join nmv.type mvt " + "where mvt.name = 'D' and mv.gauge.id = :gauge_id " + "order by days");
 
         query.setParameter("gauge_id", getId());
 
-        List<Object> results = query.list();
-        int[]        days    = new int[results.size()];
-        double[]     qs      = new double[results.size()];
+        final List<Object> results = query.list();
+        final int[] days = new int[results.size()];
+        final double[] qs = new double[results.size()];
 
         int idx = 0;
 
-        for (Object obj: results) {
-            Object[] arr = (Object[]) obj;
+        for (final Object obj : results) {
+            final Object[] arr = (Object[]) obj;
 
             try {
-                int  day = ((Integer)    arr[0]).intValue();
-                double q = ((BigDecimal) arr[1]).doubleValue();
+                final int day = ((Integer) arr[0]).intValue();
+                final double q = ((BigDecimal) arr[1]).doubleValue();
 
                 days[idx] = day;
                 qs[idx++] = q;
             }
-            catch (NumberFormatException nfe) {
+            catch (final NumberFormatException nfe) {
             }
         }
 
@@ -312,44 +285,36 @@
      * @return the MaxMinWQ object representing the calculated values
      */
     public MinMaxWQ fetchMaxMinWQ() {
-        Session session = SessionHolder.HOLDER.get();
+        final Session session = SessionHolder.HOLDER.get();
 
-        Query query = session.createQuery(
-            "select max(mv.value) as max, min(mv.value) as min " +
-            "from MainValue as mv " +
-            "join mv.mainValue as nmv " +
-            "join nmv.type mvt " +
-            "where mvt.name in ('W', 'Q') " +
-            "and mv.gauge.id = :gauge_id " +
-            "group by mvt.name order by mvt.name"
-            );
+        final Query query = session.createQuery("select max(mv.value) as max, min(mv.value) as min " + "from MainValue as mv " + "join mv.mainValue as nmv "
+                + "join nmv.type mvt " + "where mvt.name in ('W', 'Q') " + "and mv.gauge.id = :gauge_id " + "group by mvt.name order by mvt.name");
 
         query.setParameter("gauge_id", getId());
 
-        List<Object> results = query.list();
+        final List<Object> results = query.list();
         if (results.isEmpty()) {
             // No values found
             return new MinMaxWQ();
         }
 
         Object[] arr = (Object[]) results.get(0);
-        BigDecimal maxw = (BigDecimal)arr[0];
-        BigDecimal minw = (BigDecimal)arr[1];
+        final BigDecimal maxw = (BigDecimal) arr[0];
+        final BigDecimal minw = (BigDecimal) arr[1];
         BigDecimal maxq = null;
         BigDecimal minq = null;
 
-
         if (results.size() > 1) {
             arr = (Object[]) results.get(1);
-            maxq = (BigDecimal)arr[0];
-            minq = (BigDecimal)arr[1];
+            maxq = (BigDecimal) arr[0];
+            minq = (BigDecimal) arr[1];
         }
 
         return new MinMaxWQ(minw, maxw, minq, maxq);
     }
 
     @Override
-    public int compareTo(Gauge o) {
+    public int compareTo(final Gauge o) {
         return getName().compareTo(o.getName());
     }
 }

http://dive4elements.wald.intevation.org