Mercurial > dive4elements > river
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()); } }