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; ingo@2360: ingo@2360: import java.io.Serializable; ingo@2360: import java.math.BigDecimal; gernotbelger@9563: import java.util.Collections; ingo@2360: import java.util.List; ingo@2360: ingo@2360: import javax.persistence.Column; ingo@2360: import javax.persistence.Entity; ingo@2360: import javax.persistence.Id; ingo@2360: import javax.persistence.JoinColumn; ingo@2360: import javax.persistence.OneToOne; ingo@2360: import javax.persistence.Table; ingo@2360: gernotbelger@9563: import org.dive4elements.river.backend.SessionHolder; gernotbelger@9563: import org.hibernate.Query; ingo@2360: import org.hibernate.Session; ingo@2360: import org.hibernate.annotations.Type; ingo@2360: ingo@2360: import com.vividsolutions.jts.geom.Point; ingo@2360: ingo@2360: @Entity ingo@2360: @Table(name = "river_axes_km") gernotbelger@9563: public class RiverAxisKm implements Serializable { gernotbelger@9563: gernotbelger@9563: private static final long serialVersionUID = 1L; gernotbelger@9563: gernotbelger@9563: private Integer id; gernotbelger@9563: private River river; ingo@2360: private BigDecimal km; gernotbelger@9563: private Point geom; ingo@2360: ingo@2360: public RiverAxisKm() { ingo@2360: } ingo@2360: ingo@2360: @Id ingo@2360: @Column(name = "id") ingo@2360: public Integer getId() { gernotbelger@9563: return this.id; ingo@2360: } ingo@2360: gernotbelger@9563: public void setId(final Integer id) { ingo@2360: this.id = id; ingo@2360: } ingo@2360: ingo@2360: @OneToOne ingo@2360: @JoinColumn(name = "river_id") ingo@2360: public River getRiver() { gernotbelger@9563: return this.river; ingo@2360: } ingo@2360: gernotbelger@9563: public void setRiver(final River river) { ingo@2360: this.river = river; ingo@2360: } ingo@2360: ingo@2360: @Column(name = "km") ingo@2360: public BigDecimal getKm() { gernotbelger@9563: return this.km; ingo@2360: } ingo@2360: gernotbelger@9563: public void setKm(final BigDecimal km) { ingo@2360: this.km = km; ingo@2360: } ingo@2360: ingo@2360: @Column(name = "geom") ingo@2360: @Type(type = "org.hibernatespatial.GeometryUserType") ingo@2360: public Point getGeom() { gernotbelger@9563: return this.geom; ingo@2360: } ingo@2360: gernotbelger@9563: public void setGeom(final Point geom) { ingo@2360: this.geom = geom; ingo@2360: } ingo@2360: ingo@2360: /** ingo@2360: * Returns a list of RiverAxisKm objects for a given river. ingo@2360: * gernotbelger@9563: * @param riverid gernotbelger@9563: * The ID of a river in the database. ingo@2360: * ingo@2360: * @return a list of RiverAxisKm objects. ingo@2360: */ gernotbelger@9563: public static List getRiverAxisKms(final int riverid) { gernotbelger@9563: final Session session = SessionHolder.HOLDER.get(); ingo@2360: gernotbelger@9563: final Query query = session.createQuery("from RiverAxisKm where river.id =:riverid"); ingo@2360: query.setParameter("riverid", riverid); ingo@2360: gernotbelger@9563: final List list = query.list(); ingo@2360: ingo@2360: return list; ingo@2360: } gernotbelger@9563: gernotbelger@9563: public static List getRiverAxisKms(final int riverId, final double lowerKm, final double upperKm) { gernotbelger@9563: final Session session = SessionHolder.HOLDER.get(); gernotbelger@9563: gernotbelger@9563: assert lowerKm <= upperKm; gernotbelger@9563: gernotbelger@9563: if (Double.isNaN(lowerKm) || Double.isInfinite(lowerKm)) gernotbelger@9563: return Collections.emptyList(); gernotbelger@9563: if (Double.isNaN(upperKm) || Double.isInfinite(upperKm)) gernotbelger@9563: return Collections.emptyList(); gernotbelger@9563: gernotbelger@9563: final BigDecimal fromKm = BigDecimal.valueOf(lowerKm); gernotbelger@9563: final BigDecimal toKm = BigDecimal.valueOf(upperKm); gernotbelger@9563: gernotbelger@9563: final Query query = session.createQuery("from RiverAxisKm where river.id =:riverid AND km >= :fromKm AND km <= :toKm"); gernotbelger@9563: query.setParameter("riverid", riverId); gernotbelger@9563: query.setParameter("fromKm", fromKm); gernotbelger@9563: query.setParameter("toKm", toKm); gernotbelger@9563: gernotbelger@9563: final List list = query.list(); gernotbelger@9563: gernotbelger@9563: return list; gernotbelger@9563: } gernotbelger@9563: }