Mercurial > dive4elements > river
view flys-backend/src/main/java/de/intevation/flys/model/Gauge.java @ 496:4f2d8980415f
Schema: Dropped constraint which forces discharge tables to have a unique time interval for a given gauge and kind.
flys-backend/trunk@1850 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 08 May 2011 11:20:39 +0000 |
parents | 46bb2b9e0bdc |
children | 5a3109b8475f |
line wrap: on
line source
package de.intevation.flys.model; import java.math.BigDecimal; import java.io.Serializable; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.GeneratedValue; import javax.persistence.Column; 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 de.intevation.flys.backend.SessionHolder; @Entity @Table(name = "gauges") public class Gauge implements Serializable { public static final int DEFAULT_SCALE = 100; private Integer id; private String name; private River river; private BigDecimal station; private BigDecimal aeo; private BigDecimal datum; private Range range; private List<DischargeTable> dischargeTables; public Gauge() { } public Gauge( String name, River river, BigDecimal station, BigDecimal aeo, BigDecimal datum, Range range ) { this.name = name; this.river = river; this.station = station; this.aeo = aeo; this.datum = datum; 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") @Column(name = "id") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @OneToOne @JoinColumn(name = "river_id" ) public River getRiver() { return river; } public void setRiver(River river) { this.river = river; } @Column(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "station") // FIXME: type mapping needed public BigDecimal getStation() { return station; } public void setStation(BigDecimal station) { this.station = station; } @Column(name = "aeo") // FIXME: type mapping needed public BigDecimal getAeo() { return aeo; } public void setAeo(BigDecimal aeo) { this.aeo = aeo; } @Column(name = "datum") // FIXME: type mapping needed public BigDecimal getDatum() { return datum; } public void setDatum(BigDecimal datum) { this.datum = datum; } @OneToOne @JoinColumn(name = "range_id" ) public Range getRange() { return range; } public void setRange(Range range) { this.range = range; } @OneToMany @JoinColumn(name = "gauge_id") public List<DischargeTable> getDischargeTables() { return dischargeTables; } public void setDischargeTables(List<DischargeTable> dischargeTables) { this.dischargeTables = dischargeTables; } /** * Returns min and max W values of this gauge based with a DEFAULT_SCALE. * * @return min and max W value of this gauge [min,max]. */ public double[] determineMinMaxW() { return determineMinMaxW(DEFAULT_SCALE); } /** * Returns min and max W values of this gauge. * * @return the min and max W value of this gauge [min,max]. */ public double[] determineMinMaxW(int scale) { Session session = SessionHolder.HOLDER.get(); List<DischargeTable> tables = getDischargeTables(); DischargeTable dischargeTable = null; for (DischargeTable tmp: tables) { if (tmp.getKind() == 0) { dischargeTable = tmp; break; } } if (dischargeTable == null) { return null; } 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(); Object[] result = (Object[]) results.get(0); return result != null ? new double[] { ((BigDecimal) result[0]).doubleValue() * scale, ((BigDecimal) result[1]).doubleValue() * scale} : null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :