diff backend/src/main/java/org/dive4elements/river/model/sinfo/InfrastructureValue.java @ 9176:1614cb14308f

Work on calculations for S-Info flood duration workflow
author mschaefer
date Mon, 25 Jun 2018 19:21:11 +0200
parents a165cd63099f
children d889ffe2fb05
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/sinfo/InfrastructureValue.java	Mon Jun 25 17:58:11 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/sinfo/InfrastructureValue.java	Mon Jun 25 19:21:11 2018 +0200
@@ -22,9 +22,12 @@
 import javax.persistence.OneToOne;
 import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
+import javax.persistence.Transient;
 
 import org.dive4elements.river.backend.SessionHolder;
 import org.dive4elements.river.model.Attribute;
+import org.dive4elements.river.model.Attribute.AttributeKey;
+import org.dive4elements.river.model.River;
 import org.hibernate.Query;
 import org.hibernate.Session;
 
@@ -117,6 +120,11 @@
         this.attribute = attribute;
     }
 
+    @Transient
+    public AttributeKey getAttributeKey() {
+        return this.getAttribute().getKey();
+    }
+
     @Column(name = "height")
     public Double getHeight() {
         return this.height;
@@ -127,7 +135,7 @@
     }
 
     /**
-     * Selects the infrastructure values of a data series in a km range from the database
+     * Selects from the database the infrastructure values of a data series in a km range
      */
     public static List<InfrastructureValue> getValues(final Infrastructure parent, final double kmLo, final double kmHi) {
         final Session session = SessionHolder.HOLDER.get();
@@ -138,4 +146,25 @@
         query.setParameter("kmHi", new Double(kmHi));
         return query.list();
     }
+
+    /**
+     * Selects from the database the infrastructure values of a km range of a river and a river side
+     */
+    public static List<InfrastructureValue> getValues(final River river, final double kmLo, final double kmHi, final AttributeKey riverside) {
+        final Session session = SessionHolder.HOLDER.get();
+        String riversideClause = "";
+        if ((riverside == AttributeKey.LEFT) || (riverside == AttributeKey.RIGHT))
+            riversideClause = " AND (v.attribute.id=:attr_id)";
+        final Query query = session.createQuery("FROM InfrastructureValue v"
+                + " WHERE (v.infrastructure.river=:river)"
+                + " AND (v.station BETWEEN :kmLo - 0.0001 AND :kmHi + 0.0001)"
+                + riversideClause
+                + " ORDER BY v.station, v.attribute.id");
+        query.setParameter("river", river);
+        query.setParameter("kmLo", new Double(kmLo));
+        query.setParameter("kmHi", new Double(kmHi));
+        if (!riversideClause.isEmpty())
+            query.setParameter("attr_id", riverside.getId());
+        return query.list();
+    }
 }

http://dive4elements.wald.intevation.org