view backend/src/main/java/org/dive4elements/river/model/BedHeight.java @ 8975:a0a0a7f912ab

Added new columns bed_height.comment and sounding_width_info; extended the bed height parser for the new meta data and the min/max_height columns
author mschaefer
date Tue, 03 Apr 2018 10:40:57 +0200
parents 11bf13cf0463
children 4c5eeaff554c
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.model;

import java.io.Serializable;
import java.util.ArrayList;
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.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.dive4elements.river.backend.SessionHolder;
import org.hibernate.Query;
import org.hibernate.Session;


@Entity
@Table(name = "bed_height")
public class BedHeight implements Serializable {

    private Integer id;
    private Integer year;

    private String evaluationBy;
    private String description;

    private River river;

    private BedHeightType  type;

    private LocationSystem locationSystem;

    private ElevationModel curElevationModel;

    private ElevationModel oldElevationModel;

    private Range range;

    private String sounding_width_info;
    private String comment;

    private List<BedHeightValue> values;


    public BedHeight() {
    }


    public BedHeight(final River river, final Integer year, final BedHeightType type, final LocationSystem locationSystem,
            final ElevationModel curElevationModel,
            final Range range) {
        this(river, year, type, locationSystem, curElevationModel, null, range, null, null, null, null);
    }


    public BedHeight(final River river, final Integer year, final BedHeightType type, final LocationSystem locationSystem,
            final ElevationModel curElevationModel,
            final ElevationModel oldElevationModel, final Range range, final String evaluationBy, final String description, final String sounding_width_info,
            final String comment) {
        this.river             = river;
        this.year              = year;
        this.type              = type;
        this.locationSystem    = locationSystem;
        this.curElevationModel = curElevationModel;
        this.oldElevationModel = oldElevationModel;
        this.range             = range;
        this.evaluationBy      = evaluationBy;
        this.description       = description;
        this.sounding_width_info = sounding_width_info;
        this.comment = comment;
    }


    @Id
    @SequenceGenerator(name = "SEQUENCE_BED_HEIGHT_ID_SEQ", sequenceName = "BED_HEIGHT_ID_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE_BED_HEIGHT_ID_SEQ")
    @Column(name = "id")
    public Integer getId() {
        return this.id;
    }

    public void setId(final Integer id) {
        this.id = id;
    }

    @OneToOne
    @JoinColumn(name = "river_id")
    public River getRiver() {
        return this.river;
    }

    public void setRiver(final River river) {
        this.river = river;
    }

    @Column(name = "year")
    public Integer getYear() {
        return this.year;
    }

    public void setYear(final Integer year) {
        this.year = year;
    }

    @OneToOne
    @JoinColumn(name = "type_id")
    public BedHeightType getType() {
        return this.type;
    }

    public void setType(final BedHeightType type) {
        this.type = type;
    }

    @OneToOne
    @JoinColumn(name = "location_system_id")
    public LocationSystem getLocationSystem() {
        return this.locationSystem;
    }

    public void setLocationSystem(final LocationSystem locationSystem) {
        this.locationSystem = locationSystem;
    }

    @OneToOne
    @JoinColumn(name = "cur_elevation_model_id")
    public ElevationModel getCurElevationModel() {
        return this.curElevationModel;
    }

    public void setCurElevationModel(final ElevationModel curElevationModel) {
        this.curElevationModel = curElevationModel;
    }

    @OneToOne
    @JoinColumn(name = "old_elevation_model_id")
    public ElevationModel getOldElevationModel() {
        return this.oldElevationModel;
    }

    public void setOldElevationModel(final ElevationModel oldElevationModel) {
        this.oldElevationModel = oldElevationModel;
    }

    @OneToOne
    @JoinColumn(name = "range_id")
    public Range getRange() {
        return this.range;
    }

    public void setRange(final Range range) {
        this.range = range;
    }

    @Column(name = "evaluation_by")
    public String getEvaluationBy() {
        return this.evaluationBy;
    }

    public void setEvaluationBy(final String evaluationBy) {
        this.evaluationBy = evaluationBy;
    }

    @Column(name = "description")
    public String getDescription() {
        return this.description;
    }

    public void setDescription(final String description) {
        this.description = description;
    }

    @Column(name = "sounding_width_info")
    public String getSoundingWidthInfo() {
        return this.sounding_width_info;
    }

    public void setSoundingWidthInfo(final String sounding_width_info) {
        this.sounding_width_info = sounding_width_info;
    }

    @Column(name = "comment")
    public String getComment() {
        return this.comment;
    }

    public void setComment(final String comment) {
        this.comment = comment;
    }

    @OneToMany
    @JoinColumn(name = "bed_height_id")
    public List<BedHeightValue> getValues() {
        return this.values;
    }

    public void setValues(final List<BedHeightValue> values) {
        this.values = values;
    }


    public static List<BedHeight> getBedHeights(
            final River  river,
            final double kmLo,
            final double kmHi
            ) {
        final Session session = SessionHolder.HOLDER.get();

        final Query query = session.createQuery(
                "from BedHeight where river=:river");

        query.setParameter("river", river);

        // TODO Do km range filtering in SQL statement

        final List<BedHeight> singles = query.list();
        final List<BedHeight> good    = new ArrayList<>();

        for (final BedHeight s: singles) {
            for (final BedHeightValue value: s.getValues()) {
                final double station = value.getStation().doubleValue();

                if (station >= kmLo && station <= kmHi) {
                    good.add(s);
                    break;
                }
            }
        }

        return good;
    }


    public static BedHeight getBedHeightById(final int id) {
        final Session session = SessionHolder.HOLDER.get();

        final Query query = session.createQuery(
                "from BedHeight where id=:id");

        query.setParameter("id", id);

        final List<BedHeight> singles = query.list();

        return singles != null ? singles.get(0) : null;
    }

    public static BedHeight getBedHeightByDescription(final String description) {

        final Session session = SessionHolder.HOLDER.get();

        final Query query = session.createQuery("FROM BedHeight WHERE (trim(description)=:description)");
        query.setParameter("description", description);

        final List<BedHeight> singles = query.list();

        return singles != null ? singles.get(0) : null;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org