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@189: sascha@189: import java.io.Serializable; mschaefer@9159: import java.math.BigDecimal; mschaefer@9159: import java.util.List; sascha@189: sascha@189: import javax.persistence.Column; mschaefer@9159: import javax.persistence.Entity; mschaefer@9159: import javax.persistence.GeneratedValue; mschaefer@9159: import javax.persistence.GenerationType; mschaefer@9159: import javax.persistence.Id; sascha@189: import javax.persistence.JoinColumn; mschaefer@9159: import javax.persistence.OneToOne; mschaefer@9159: import javax.persistence.SequenceGenerator; mschaefer@9159: import javax.persistence.Table; sascha@189: mschaefer@9159: import org.dive4elements.river.backend.SessionHolder; mschaefer@9159: import org.dive4elements.river.model.MainValueType.MainValueTypeKey; mschaefer@9159: import org.hibernate.Query; mschaefer@9159: import org.hibernate.Session; sascha@189: felix@5375: felix@5375: /** A Main or Extreme value of a rivers gauge. */ sascha@189: @Entity sascha@189: @Table(name = "main_values") sascha@189: public class MainValue sascha@189: implements Serializable sascha@189: { sascha@189: private Integer id; sascha@189: sascha@189: private Gauge gauge; sascha@189: sascha@189: private NamedMainValue mainValue; sascha@189: sascha@189: private BigDecimal value; sascha@189: sascha@189: private TimeInterval timeInterval; sascha@189: sascha@189: public MainValue() { sascha@189: } sascha@189: sascha@195: public MainValue( mschaefer@9159: final Gauge gauge, mschaefer@9159: final NamedMainValue mainValue, mschaefer@9159: final BigDecimal value, mschaefer@9159: final TimeInterval timeInterval mschaefer@9159: ) { sascha@195: this.gauge = gauge; sascha@195: this.mainValue = mainValue; sascha@195: this.value = value; sascha@195: this.timeInterval = timeInterval; sascha@195: } sascha@195: sascha@189: @Id sascha@189: @SequenceGenerator( mschaefer@9159: name = "SEQUENCE_MAIN_VALUES_ID_SEQ", mschaefer@9159: sequenceName = "MAIN_VALUES_ID_SEQ", mschaefer@9159: allocationSize = 1) sascha@189: @GeneratedValue( mschaefer@9159: strategy = GenerationType.SEQUENCE, mschaefer@9159: generator = "SEQUENCE_MAIN_VALUES_ID_SEQ") sascha@189: @Column(name = "id") sascha@189: public Integer getId() { mschaefer@9159: return this.id; sascha@189: } sascha@189: mschaefer@9159: public void setId(final Integer id) { sascha@189: this.id = id; sascha@189: } sascha@189: sascha@189: @OneToOne sascha@189: @JoinColumn(name = "gauge_id") sascha@189: public Gauge getGauge() { mschaefer@9159: return this.gauge; sascha@189: } sascha@189: mschaefer@9159: public void setGauge(final Gauge gauge) { sascha@189: this.gauge = gauge; sascha@189: } sascha@189: sascha@189: @OneToOne sascha@189: @JoinColumn(name = "named_value_id") sascha@189: public NamedMainValue getMainValue() { mschaefer@9159: return this.mainValue; sascha@189: } sascha@189: mschaefer@9159: public void setMainValue(final NamedMainValue mainValue) { sascha@189: this.mainValue = mainValue; sascha@189: } sascha@189: sascha@189: @Column(name = "value") // FIXME: type mapping needed? sascha@189: public BigDecimal getValue() { mschaefer@9159: return this.value; sascha@189: } sascha@189: mschaefer@9159: public void setValue(final BigDecimal value) { sascha@189: this.value = value; sascha@189: } sascha@189: sascha@189: @OneToOne sascha@189: @JoinColumn(name = "time_interval_id") sascha@189: public TimeInterval getTimeInterval() { mschaefer@9159: return this.timeInterval; sascha@189: } sascha@189: mschaefer@9159: public void setTimeInterval(final TimeInterval timeInterval) { sascha@189: this.timeInterval = timeInterval; sascha@189: } mschaefer@9159: mschaefer@9159: /** mschaefer@9159: * Selects from the database the main values of a gauge and a type, in ascending value order mschaefer@9159: */ mschaefer@9159: public static List getValuesOfGaugeAndType(final Gauge gauge, final MainValueTypeKey typekey) { mschaefer@9159: final Session session = SessionHolder.HOLDER.get(); mschaefer@9159: final Query query = session.createQuery("SELECT mv" mschaefer@9159: + " FROM MainValue AS mv JOIN mv.mainValue AS nmv" mschaefer@9159: + " WHERE mv.gauge.id=:gaugeid AND nmv.type.id=:typeid" mschaefer@9159: + " ORDER BY value"); mschaefer@9159: query.setParameter("gaugeid", gauge.getId()); mschaefer@9159: query.setParameter("typeid", typekey.getId()); mschaefer@9159: return query.list(); mschaefer@9159: } mschaefer@9176: mschaefer@9176: /** mschaefer@9176: * Selects from the database the discharge-duration main values of a gauge sorted by duration mschaefer@9176: */ mschaefer@9176: public static List getDurationDischargesOfGauge(final Gauge gauge) { mschaefer@9176: final Session session = SessionHolder.HOLDER.get(); mschaefer@9176: final Query query = session.createQuery("SELECT mv" mschaefer@9176: + " FROM MainValue AS mv JOIN mv.mainValue AS nmv" mschaefer@9176: + " WHERE mv.gauge.id=:gaugeid AND nmv.type.id=:typeid" mschaefer@9176: + " ORDER BY CAST(nmv.name AS int)"); mschaefer@9176: query.setParameter("gaugeid", gauge.getId()); mschaefer@9176: query.setParameter("typeid", MainValueTypeKey.DURATION.getId()); mschaefer@9176: return query.list(); mschaefer@9176: } sascha@189: } sascha@189: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :