teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5992: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5992: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.model; sascha@167: sascha@167: import java.io.Serializable; ingo@4173: import java.util.Date; ingo@4173: import java.util.List; sascha@167: ingo@4173: import javax.persistence.Column; sascha@171: import javax.persistence.Entity; ingo@4173: import javax.persistence.GeneratedValue; ingo@4173: import javax.persistence.GenerationType; sascha@171: import javax.persistence.Id; ingo@4173: import javax.persistence.JoinColumn; sascha@174: import javax.persistence.OneToMany; sascha@174: import javax.persistence.OneToOne; sascha@2425: import javax.persistence.OrderBy; ingo@4173: import javax.persistence.SequenceGenerator; ingo@4173: import javax.persistence.Table; mschaefer@9159: import javax.persistence.Transient; sascha@171: mschaefer@9159: import org.dive4elements.river.backend.SessionHolder; mschaefer@9159: import org.hibernate.Query; aheinecke@6692: import org.hibernate.Session; aheinecke@6692: sascha@171: @Entity sascha@171: @Table(name = "discharge_tables") sascha@167: public class DischargeTable ingo@4173: implements Serializable, Comparable sascha@167: { sascha@172: private Integer id; sascha@167: private Gauge gauge; sascha@493: private String description; teichmann@4776: private String bfgId; sascha@467: private Integer kind; sascha@167: private TimeInterval timeInterval; sascha@167: sascha@174: private List dischargeTableValues; sascha@174: sascha@167: public DischargeTable() { mschaefer@9159: this.kind = 0; sascha@167: } sascha@167: mschaefer@9159: public DischargeTable(final Gauge gauge) { teichmann@4776: this(gauge, null, null, 0, null); sascha@467: } sascha@467: sascha@493: public DischargeTable( mschaefer@9159: final Gauge gauge, mschaefer@9159: final String description, mschaefer@9159: final String bfgId, mschaefer@9159: final Integer kind, mschaefer@9159: final TimeInterval timeInterval mschaefer@9159: ) { sascha@493: this.gauge = gauge; sascha@493: this.description = description; teichmann@4776: this.bfgId = bfgId; sascha@493: this.kind = kind; sascha@493: this.timeInterval = timeInterval; ingo@198: } ingo@198: sascha@171: @Id sascha@171: @SequenceGenerator( mschaefer@9159: name = "SEQUENCE_DISCHARGE_TABLES_ID_SEQ", mschaefer@9159: sequenceName = "DISCHARGE_TABLES_ID_SEQ", mschaefer@9159: allocationSize = 1) sascha@171: @GeneratedValue( mschaefer@9159: strategy = GenerationType.SEQUENCE, mschaefer@9159: generator = "SEQUENCE_DISCHARGE_TABLES_ID_SEQ") sascha@171: @Column(name = "id") sascha@171: public Integer getId() { mschaefer@9159: return this.id; sascha@171: } sascha@171: mschaefer@9159: public void setId(final Integer id) { sascha@167: this.id = id; sascha@167: } sascha@167: sascha@174: @OneToOne tom@8842: @JoinColumn(name = "gauge_id") sascha@467: public Gauge getGauge() { mschaefer@9159: return this.gauge; sascha@467: } sascha@467: mschaefer@9159: public void setGauge(final Gauge gauge) { sascha@467: this.gauge = gauge; sascha@467: } sascha@467: sascha@493: @Column(name = "description") sascha@493: public String getDescription() { mschaefer@9159: return this.description; sascha@493: } sascha@493: mschaefer@9159: public void setDescription(final String description) { sascha@493: this.description = description; sascha@493: } sascha@493: teichmann@4776: @Column(name = "bfg_id") teichmann@4776: public String getBfgId() { mschaefer@9159: return this.bfgId; teichmann@4776: } teichmann@4776: mschaefer@9159: public void setBfgId(final String bfgId) { teichmann@4776: this.bfgId = bfgId; teichmann@4776: } teichmann@4776: sascha@467: @Column(name = "kind") sascha@467: public Integer getKind() { mschaefer@9159: return this.kind; sascha@467: } sascha@467: mschaefer@9159: public void setKind(final Integer kind) { sascha@467: this.kind = kind; sascha@467: } sascha@467: sascha@467: @OneToOne tom@8842: @JoinColumn(name = "time_interval_id") sascha@174: public TimeInterval getTimeInterval() { mschaefer@9159: return this.timeInterval; sascha@174: } sascha@174: mschaefer@9159: public void setTimeInterval(final TimeInterval timeInterval) { sascha@167: this.timeInterval = timeInterval; sascha@167: } sascha@167: sascha@174: @OneToMany sascha@174: @JoinColumn(name = "table_id") sascha@2425: @OrderBy("q") sascha@174: public List getDischargeTableValues() { mschaefer@9159: return this.dischargeTableValues; sascha@174: } sascha@174: sascha@174: public void setDischargeTableValues( mschaefer@9159: final List dischargeTableValues mschaefer@9159: ) { sascha@174: this.dischargeTableValues = dischargeTableValues; sascha@167: } ingo@4173: mschaefer@9159: @Transient mschaefer@9159: public double[] getWs() { mschaefer@9159: final double[] ws = new double[this.dischargeTableValues.size()]; mschaefer@9159: for (int i=0; i<=this.dischargeTableValues.size()-1; i++) mschaefer@9159: ws[i] = this.dischargeTableValues.get(i).getW().doubleValue(); mschaefer@9159: mschaefer@9159: return ws; mschaefer@9159: } mschaefer@9159: ingo@4173: @Override mschaefer@9159: public int compareTo(final DischargeTable o) { ingo@4173: if (getKind() == 0 && o.getKind() != 0) { ingo@4173: return 1; ingo@4173: } ingo@4173: mschaefer@9159: final TimeInterval other = o.getTimeInterval(); mschaefer@9159: if (other == null && this.timeInterval == null) { ingo@4227: return 1; ingo@4227: } ingo@4227: else if (other == null) { ingo@4227: return -1; ingo@4227: } mschaefer@9159: else if (this.timeInterval == null) { ingo@4227: return 1; ingo@4227: } ingo@4173: mschaefer@9159: final Date otherStartTime = other.getStartTime(); mschaefer@9159: final Date thisStartTime = this.timeInterval.getStartTime(); ingo@4173: ingo@4173: if (otherStartTime == null) { ingo@4173: return -1; ingo@4173: } ingo@4173: else if (thisStartTime == null) { ingo@4173: return 1; ingo@4173: } ingo@4173: mschaefer@9159: final long otherStart = otherStartTime.getTime(); mschaefer@9159: final long thisStart = thisStartTime.getTime(); ingo@4173: ingo@4173: if (otherStart < thisStart) { ingo@4173: return 1; ingo@4173: } ingo@4173: else if (otherStart > thisStart) { ingo@4173: return -1; ingo@4173: } ingo@4173: mschaefer@9159: final Date otherStopTime = other.getStopTime(); mschaefer@9159: final Date thisStopTime = this.timeInterval.getStopTime(); ingo@4173: ingo@4173: if (otherStopTime == null) { ingo@4173: return -1; ingo@4173: } ingo@4173: else if (thisStopTime == null) { ingo@4173: return 1; ingo@4173: } ingo@4173: mschaefer@9159: final long otherEnd = otherStopTime.getTime(); mschaefer@9159: final long thisEnd = thisStopTime.getTime(); ingo@4173: ingo@4173: if (otherEnd < thisEnd) { ingo@4173: return 1; ingo@4173: } ingo@4173: else if (otherEnd > thisEnd) { ingo@4173: return -1; ingo@4173: } ingo@4173: else { ingo@4173: return 0; ingo@4173: } ingo@4173: } aheinecke@6692: mschaefer@9159: public static DischargeTable getDischargeTableById(final int dtId) aheinecke@6692: { mschaefer@9159: final Session session = SessionHolder.HOLDER.get(); mschaefer@9159: final Query query = session.createQuery("from DischargeTable where id =:dtId"); aheinecke@6692: query.setParameter("dtId", dtId); aheinecke@6692: mschaefer@9159: final List list = query.list(); aheinecke@6692: return list.isEmpty() ? null : list.get(0); aheinecke@6692: } mschaefer@9159: mschaefer@9159: /** mschaefer@9159: * Selects from the database the main discharge table of a gauge mschaefer@9159: */ mschaefer@9159: public static DischargeTable getGaugeMainDischargeTable(final Gauge gauge) { mschaefer@9159: final Session session = SessionHolder.HOLDER.get(); mschaefer@9159: final Query query = session.createQuery("FROM DischargeTable WHERE gauge_id=:gaugeid AND kind=0"); mschaefer@9159: query.setParameter("gaugeid", gauge.getId()); mschaefer@9159: final List list = query.list(); mschaefer@9159: return list.isEmpty() ? null : list.get(0); mschaefer@9159: } mschaefer@9159: mschaefer@9159: /** mschaefer@9159: * Selects from the database the values of a discharge table sorted by W mschaefer@9159: */ mschaefer@9159: public static List getValuesSortedByW(final DischargeTable dischargeTable) { mschaefer@9159: final Session session = SessionHolder.HOLDER.get(); mschaefer@9159: final Query query = session.createQuery("FROM DischargeTableValue WHERE table_id=:parentid ORDER BY w"); mschaefer@9159: query.setParameter("parentid", dischargeTable.getId()); mschaefer@9159: return query.list(); mschaefer@9159: } sascha@167: } sascha@167: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :