diff backend/src/main/java/org/dive4elements/river/model/BedHeight.java @ 9706:299c1c61d8ef

zu 1.1. Sohlhöhen-Überlappung
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Fri, 22 Jan 2021 12:28:58 +0100
parents 3f4215ddd6b4
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/BedHeight.java	Thu Jan 21 15:05:24 2021 +0100
+++ b/backend/src/main/java/org/dive4elements/river/model/BedHeight.java	Fri Jan 22 12:28:58 2021 +0100
@@ -27,310 +27,337 @@
 import org.hibernate.Query;
 import org.hibernate.Session;
 
+import com.vividsolutions.jts.util.Assert;
+
 @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 notes;
-
-    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 notes) {
-        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.notes = notes;
-    }
-
-    @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;
-    }
+	private Integer id;
+	private Integer year;
 
-    public void setSoundingWidthInfo(final String sounding_width_info) {
-        this.sounding_width_info = sounding_width_info;
-    }
-
-    @Column(name = "notes")
-    public String getNotes() {
-        return this.notes;
-    }
-
-    public void setNotes(final String notes) {
-        this.notes = notes;
-    }
-
-    @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) {
-        return getBedHeights(river, kmLo, kmHi, false);
-    }
-
-    /**
-     * Fetch the soundings with values in a river km range, optionally only those that also have field 01 etc. values
-     */
-    public static List<BedHeight> getBedHeights(final River river, final double startKm, final double endKm, final boolean withHeightFieldsOnly) {
-
-        final Session session = SessionHolder.HOLDER.get();
-
-        final String fieldsClause = withHeightFieldsOnly ? " AND (height01 IS NOT NULL)" : "";
-        final Query query = session.createQuery("FROM BedHeight"
-                + " WHERE (river=:river)"
-                + " AND (id IN (SELECT bedHeight.id FROM BedHeightValue"
-                + " WHERE (station BETWEEN :kmfrom - 0.0001 AND :kmto + 0.0001)"
-                + fieldsClause
-                + " GROUP BY bed_height_id))");
-        query.setParameter("river", river);
-        query.setParameter("kmfrom", startKm);
-        query.setParameter("kmto", endKm);
-
-        final List<BedHeight> singles = query.list();
-
-        return ((singles != null) && !singles.isEmpty()) ? singles : null;
-    }
-
-    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.isEmpty()) ? singles.get(0) : null;
-    }
-
-    public static BedHeight getBedHeightByDescription(final River river, final String description, final double startKm, final double endKm) {
-
-        final Session session = SessionHolder.HOLDER.get();
-
-        final Query query = session.createQuery("FROM BedHeight" + " WHERE (TRIM(description)=:description) AND river=:river"
-                + " AND id IN (SELECT bedHeight.id FROM BedHeightValue" + " WHERE station BETWEEN :kmfrom AND :kmto" + " GROUP BY bedHeight.id)");
-        query.setParameter("river", river);
-        query.setParameter("description", description);
-        query.setParameter("kmfrom", startKm);
-        query.setParameter("kmto", endKm);
-
-        final List<BedHeight> singles = query.list();
+	private String evaluationBy;
+	private String description;
 
-        return ((singles != null) && !singles.isEmpty()) ? singles.get(0) : null;
-    }
-
-    public static List<BedHeight> getBedHeightEpochs(final River river, final double startKm, final double endKm) {
-
-        final Session session = SessionHolder.HOLDER.get();
-        final String description = "epoch";
-        final Query query = session.createQuery("FROM BedHeight" + " WHERE lower(description) LIKE :description AND " + "river=:river"
-                + " AND id IN (SELECT bedHeight.id FROM BedHeightValue" + " WHERE station BETWEEN :kmfrom AND :kmto" + " GROUP BY bedHeight.id)");
-        query.setParameter("river", river);
-        query.setParameter("description", "%" + description + "%");
-        query.setParameter("kmfrom", startKm);
-        query.setParameter("kmto", endKm);
-
-        final List<BedHeight> singles = query.list();
-
-        return ((singles != null) && !singles.isEmpty()) ? singles : null;
-    }
-
-    public static List<BedHeight> getBedHeightYear(final River river, final double startKm, final double endKm) {
-
-        final Session session = SessionHolder.HOLDER.get();
-        final String description = "epoch";
-        final Query query = session.createQuery("FROM BedHeight" + " WHERE lower(description) NOT LIKE :description AND " + "river=:river"
-                + " AND id IN (SELECT bedHeight.id FROM BedHeightValue" + " WHERE station BETWEEN :kmfrom AND :kmto" + " GROUP BY bedHeight.id)");
-        query.setParameter("river", river);
-        query.setParameter("description", "%" + description + "%");
-        query.setParameter("kmfrom", startKm);
-        query.setParameter("kmto", endKm);
-
-        final List<BedHeight> singles = query.list();
-
-        return ((singles != null) && !singles.isEmpty()) ? singles : null;
-    }
-
-    public static Range getRangeFromBedHeights(final BedHeight bh) {
-        final List<Range> ranges = new ArrayList<>();
+	private River river;
 
-        final Session session = SessionHolder.HOLDER.get();
-
-        final Query query = session.createQuery("FROM Range" + " WHERE id=:range_id)");
-        query.setParameter("range_id", bh.getRange().getId());
-
-        final List<Range> singles = query.list();
-
-        return ((singles != null) && !singles.isEmpty()) ? singles.get(0) : null;
-    }
-
-    public static List<BedHeight> getBedHeightYearEpoch(final boolean isEpoch, final Integer year, final River river, final double lowerKm,
-            final double upperKm) {
-
-        final Session session = SessionHolder.HOLDER.get();
-        final String description = "epoch";
+	private BedHeightType type;
 
-        final StringBuilder builder = new StringBuilder();
-        builder.append("FROM BedHeight");
-        if (isEpoch) {
-            builder.append(" WHERE lower(description) LIKE :description ");
-        } else {
-            builder.append(" WHERE lower(description) NOT LIKE :description ");
-        }
-        builder.append(" AND year =:year");
+	private LocationSystem locationSystem;
 
-        builder.append(
-                " AND river=:river  AND id IN (SELECT bedHeight.id FROM BedHeightValue   WHERE station BETWEEN :kmfrom AND :kmto  GROUP BY bedHeight.id )");
-        final Query query = session.createQuery(builder.toString());
-        query.setParameter("river", river);
-        query.setParameter("year", year);
-        query.setParameter("description", "%" + description + "%");
-        query.setParameter("kmfrom", lowerKm);
-        query.setParameter("kmto", upperKm);
+	private ElevationModel curElevationModel;
 
-        final List<BedHeight> singles = query.list();
+	private ElevationModel oldElevationModel;
 
-        return ((singles != null) && !singles.isEmpty()) ? singles : null;
-    }
+	private Range range;
+
+	private String sounding_width_info;
+	private String notes;
+
+	private List<BedHeightValue> values;
+
+	public static BedHeight copyPojoFrom(BedHeight b, double from, double to) {
+		List<BedHeightValue> values2 = b.getValues();
+		List<BedHeightValue> copyValueList = new ArrayList<>();
+
+		BedHeight copy = new BedHeight(b.getRiver(), b.getYear(), b.getType(), b.getLocationSystem(),
+				b.getCurElevationModel(), b.getOldElevationModel(), new Range(from, to, b.getRange().getRiver()),
+				b.getEvaluationBy(), b.getDescription(), b.getSoundingWidthInfo(), b.getNotes());
+
+		for (BedHeightValue val : values2) {
+			Double station = val.getStation();
+			if (station >= from && station <= to)
+				copyValueList.add(val);
+		}
+
+		copy.setValues(copyValueList);
+		return copy;
+	}
+
+	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 notes) {
+		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.notes = notes;
+	}
+
+	@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 = "notes")
+	public String getNotes() {
+		return this.notes;
+	}
+
+	public void setNotes(final String notes) {
+		this.notes = notes;
+	}
+
+	@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) {
+		return getBedHeights(river, kmLo, kmHi, false);
+	}
+
+	/**
+	 * Fetch the soundings with values in a river km range, optionally only those
+	 * that also have field 01 etc. values
+	 */
+	public static List<BedHeight> getBedHeights(final River river, final double startKm, final double endKm,
+			final boolean withHeightFieldsOnly) {
+
+		final Session session = SessionHolder.HOLDER.get();
+
+		final String fieldsClause = withHeightFieldsOnly ? " AND (height01 IS NOT NULL)" : "";
+		final Query query = session.createQuery(
+				"FROM BedHeight" + " WHERE (river=:river)" + " AND (id IN (SELECT bedHeight.id FROM BedHeightValue"
+						+ " WHERE (station BETWEEN :kmfrom - 0.0001 AND :kmto + 0.0001)" + fieldsClause
+						+ " GROUP BY bed_height_id))");
+		query.setParameter("river", river);
+		query.setParameter("kmfrom", startKm);
+		query.setParameter("kmto", endKm);
+
+		final List<BedHeight> singles = query.list();
+
+		return ((singles != null) && !singles.isEmpty()) ? singles : null;
+	}
+
+	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.isEmpty()) ? singles.get(0) : null;
+	}
+
+	public static BedHeight getBedHeightByDescription(final River river, final String description, final double startKm,
+			final double endKm) {
+
+		final Session session = SessionHolder.HOLDER.get();
+
+		final Query query = session
+				.createQuery("FROM BedHeight" + " WHERE (TRIM(description)=:description) AND river=:river"
+						+ " AND id IN (SELECT bedHeight.id FROM BedHeightValue"
+						+ " WHERE station BETWEEN :kmfrom AND :kmto" + " GROUP BY bedHeight.id)");
+		query.setParameter("river", river);
+		query.setParameter("description", description);
+		query.setParameter("kmfrom", startKm);
+		query.setParameter("kmto", endKm);
+
+		final List<BedHeight> singles = query.list();
+
+		return ((singles != null) && !singles.isEmpty()) ? singles.get(0) : null;
+	}
+
+	public static List<BedHeight> getBedHeightEpochs(final River river, final double startKm, final double endKm) {
+
+		final Session session = SessionHolder.HOLDER.get();
+		final String description = "epoch";
+		final Query query = session.createQuery("FROM BedHeight" + " WHERE lower(description) LIKE :description AND "
+				+ "river=:river" + " AND id IN (SELECT bedHeight.id FROM BedHeightValue"
+				+ " WHERE station BETWEEN :kmfrom AND :kmto" + " GROUP BY bedHeight.id)");
+		query.setParameter("river", river);
+		query.setParameter("description", "%" + description + "%");
+		query.setParameter("kmfrom", startKm);
+		query.setParameter("kmto", endKm);
+
+		final List<BedHeight> singles = query.list();
+
+		return ((singles != null) && !singles.isEmpty()) ? singles : null;
+	}
+
+	public static List<BedHeight> getBedHeightYear(final River river, final double startKm, final double endKm) {
+
+		final Session session = SessionHolder.HOLDER.get();
+		final String description = "epoch";
+		final Query query = session
+				.createQuery("FROM BedHeight" + " WHERE lower(description) NOT LIKE :description AND " + "river=:river"
+						+ " AND id IN (SELECT bedHeight.id FROM BedHeightValue"
+						+ " WHERE station BETWEEN :kmfrom AND :kmto" + " GROUP BY bedHeight.id)");
+		query.setParameter("river", river);
+		query.setParameter("description", "%" + description + "%");
+		query.setParameter("kmfrom", startKm);
+		query.setParameter("kmto", endKm);
+
+		final List<BedHeight> singles = query.list();
+
+		return ((singles != null) && !singles.isEmpty()) ? singles : null;
+	}
+
+	public static Range getRangeFromBedHeights(final BedHeight bh) {
+		final List<Range> ranges = new ArrayList<>();
+
+		final Session session = SessionHolder.HOLDER.get();
+
+		final Query query = session.createQuery("FROM Range" + " WHERE id=:range_id)");
+		query.setParameter("range_id", bh.getRange().getId());
+
+		final List<Range> singles = query.list();
+
+		return ((singles != null) && !singles.isEmpty()) ? singles.get(0) : null;
+	}
+
+	public static List<BedHeight> getBedHeightYearEpoch(final boolean isEpoch, final Integer year, final River river,
+			final double lowerKm, final double upperKm) {
+
+		final Session session = SessionHolder.HOLDER.get();
+		final String description = "epoch";
+
+		final StringBuilder builder = new StringBuilder();
+		builder.append("FROM BedHeight");
+		if (isEpoch) {
+			builder.append(" WHERE lower(description) LIKE :description ");
+		} else {
+			builder.append(" WHERE lower(description) NOT LIKE :description ");
+		}
+		builder.append(" AND year =:year");
+
+		builder.append(
+				" AND river=:river  AND id IN (SELECT bedHeight.id FROM BedHeightValue   WHERE station BETWEEN :kmfrom AND :kmto  GROUP BY bedHeight.id )");
+		final Query query = session.createQuery(builder.toString());
+		query.setParameter("river", river);
+		query.setParameter("year", year);
+		query.setParameter("description", "%" + description + "%");
+		query.setParameter("kmfrom", lowerKm);
+		query.setParameter("kmto", upperKm);
+
+		final List<BedHeight> singles = query.list();
+
+		return ((singles != null) && !singles.isEmpty()) ? singles : null;
+	}
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org