changeset 5515:87dab419b924

Properly handle hydr_boundaries and hydr_boundaries_poly in datacage This also fixes hydr_boundaries_poly which refered to the wrong table
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 28 Mar 2013 17:13:53 +0100
parents 4c4fed23693f
children 56d18ecc7d41
files flys-artifacts/doc/conf/meta-data.xml flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSHydrBoundaryArtifact.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSHydrBoundaryPolyArtifact.java flys-backend/src/main/java/de/intevation/flys/model/HydrBoundary.java flys-backend/src/main/java/de/intevation/flys/model/HydrBoundaryPoly.java flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties
diffstat 8 files changed, 215 insertions(+), 82 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/doc/conf/meta-data.xml	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-artifacts/doc/conf/meta-data.xml	Thu Mar 28 17:13:53 2013 +0100
@@ -1238,85 +1238,109 @@
                 </dc:if>
               </dc:context>
             </dc:macro>
-            <dc:macro name="flood-map-hydr-boundaries">
-              <hydr_boundaries_lines>
-                <dc:call-macro name="flood-map-hydr-boundaries-lines"/>
-              </hydr_boundaries_lines>
-              <hydr_boundaries_polygons>
-                <dc:call-macro name="flood-map-hydr-boundaries-poly"/>
-              </hydr_boundaries_polygons>
+            <dc:macro name="flood-map-hydr-boundaries-state">
+              <dc:context>
+                <dc:statement>
+                  SELECT DISTINCT
+                  name
+                  FROM hydr_boundaries
+                  WHERE river_id = ${river_id}
+                  AND kind = 2
+                </dc:statement>
+                <dc:elements>
+                  <line factory="wmshydrboundariesfactory"
+                    ids="{$river_id};{$name};2"
+                    name="{$name}"/>
+                </dc:elements>
+              </dc:context>
+              <dc:context>
+                <dc:statement>
+                  SELECT DISTINCT
+                  name
+                  FROM hydr_boundaries_poly
+                  WHERE river_id = ${river_id}
+                  AND kind = 2
+                </dc:statement>
+                <dc:elements>
+                  <line factory="wmshydrboundariespolyfactory"
+                    ids="{$river_id};{$name};2"
+                    name="{$name}"/>
+                </dc:elements>
+              </dc:context>
             </dc:macro>
             <dc:macro name="flood-map-hydr-boundaries-lines">
-              <bfg>
-                <dc:context>
-                  <dc:statement>
-                    SELECT count(*) as km_exists, name as name
-                    FROM hydr_boundaries WHERE river_id = ${river_id} AND kind = 1 GROUP BY name
-                  </dc:statement>
-                   <dc:elements>
-                    <dc:if test="$km_exists>0">
-                      <hydrboundary>
-                        <dc:attribute name="factory" value="wmshydrboundariesfactory"/>
-                        <dc:attribute name="ids" value="${river_id};${name}"/>
-                        <dc:attribute name="name" value="${name}"/>
-                      </hydrboundary>
-                    </dc:if>
-                  </dc:elements>
-                </dc:context>
-              </bfg>
-              <land>
-                <dc:context>
-                  <dc:statement>
-                    SELECT count(*) as km_exists, name as name
-                    FROM hydr_boundaries WHERE river_id = ${river_id} AND kind = 2 GROUP BY name
-                  </dc:statement>
-                   <dc:elements>
-                    <dc:if test="$km_exists>0">
-                      <hydrboundary>
-                        <dc:attribute name="factory" value="wmshydrboundariesfactory"/>
-                        <dc:attribute name="ids" value="${river_id};${name}"/>
-                        <dc:attribute name="name" value="${name}"/>
-                      </hydrboundary>
-                    </dc:if>
-                  </dc:elements>
-                </dc:context>
-              </land>
+              <dc:context>
+                <dc:statement>
+                  SELECT DISTINCT
+                  name
+                  FROM hydr_boundaries
+                  WHERE river_id = ${river_id}
+                  AND kind = 1
+                </dc:statement>
+                <dc:comment> What about all other line kinds?</dc:comment>
+                <dc:if test="dc:has-result()">
+                  <lines>
+                    <dc:elements>
+                      <line factory="wmshydrboundariesfactory"
+                        ids="{$river_id};{$name};1"
+                        name="{$name}"/>
+                    </dc:elements>
+                  </lines>
+                </dc:if>
+              </dc:context>
             </dc:macro>
             <dc:macro name="flood-map-hydr-boundaries-poly">
-              <bfg>
-                <dc:context>
-                  <dc:statement>
-                    SELECT count(*) as km_exists, name as name
-                    FROM hydr_boundaries_poly WHERE river_id = ${river_id} AND kind = 1 GROUP BY name
-                  </dc:statement>
-                   <dc:elements>
-                    <dc:if test="$km_exists>0">
-                      <hws>
-                        <dc:attribute name="factory" value="wmshydrboundariespolyfactory"/>
-                        <dc:attribute name="ids" value="${river_id};${name}"/>
-                        <dc:attribute name="name" value="${name}"/>
-                      </hws>
-                    </dc:if>
-                  </dc:elements>
-                </dc:context>
-              </bfg>
-              <land>
-                <dc:context>
-                  <dc:statement>
-                    SELECT count(*) as km_exists, name as name
-                    FROM hydr_boundaries_poly WHERE river_id = ${river_id} AND kind = 2 GROUP BY name
-                  </dc:statement>
-                   <dc:elements>
-                    <dc:if test="$km_exists>0">
-                      <hws>
-                        <dc:attribute name="factory" value="wmshydrboundariespolyfactory"/>
-                        <dc:attribute name="ids" value="${river_id};${name}"/>
-                        <dc:attribute name="name" value="${name}"/>
-                      </hws>
-                    </dc:if>
-                  </dc:elements>
-                </dc:context>
-              </land>
+              <dc:context>
+                <dc:statement>
+                  SELECT DISTINCT
+                  b.sectie AS sectie_id,
+                  sk.name AS sectie
+                  FROM hydr_boundaries_poly b
+                  JOIN sectie_kinds sk ON b.sectie = sk.id
+                  WHERE b.river_id = ${river_id}
+                  AND b.kind = 1
+                </dc:statement>
+                <dc:if test="dc:has-result()">
+                  <sobek_areas>
+                    <dc:elements>
+                      <boundary name="{$sectie}"
+                        factory="wmshydrboundariespolyfactory"
+                        ids="{$river_id};{$sectie};1;{$sectie_id};-1"/>
+                    </dc:elements>
+                  </sobek_areas>
+                </dc:if>
+              </dc:context>
+              <dc:context>
+                <dc:statement>
+                  SELECT DISTINCT
+                  b.sobek AS sobek_id,
+                  sk.name AS sobek
+                  FROM hydr_boundaries_poly b
+                  JOIN sobek_kinds sk ON b.sobek = sk.id
+                  WHERE b.river_id = ${river_id}
+                  AND b.kind = 1
+                </dc:statement>
+                <dc:if test="dc:has-result()">
+                  <sobek_flooded>
+                    <dc:elements>
+                      <boundary name="{$sobek}"
+                        factory="wmshydrboundariespolyfactory"
+                        ids="{$river_id};{$sobek};1;-1;{$sobek_id}"/>
+                    </dc:elements>
+                  </sobek_flooded>
+                </dc:if>
+              </dc:context>
+            </dc:macro>
+            <dc:macro name="flood-map-hydr-boundaries">
+              <bfg_model>
+                <areas>
+                  <dc:call-macro name="flood-map-hydr-boundaries-poly"/>
+                </areas>
+                <dc:call-macro name="flood-map-hydr-boundaries-lines"/>
+              </bfg_model>
+              <federal>
+                <dc:call-macro name="flood-map-hydr-boundaries-state"/>
+              </federal>
             </dc:macro>
             <dc:macro name="flood-map-floodplain">
               <dc:context>
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSHydrBoundaryArtifact.java	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSHydrBoundaryArtifact.java	Thu Mar 28 17:13:53 2013 +0100
@@ -102,8 +102,14 @@
 
         @Override
         protected Envelope getExtent(boolean reproject) {
-            List<HydrBoundary> boundaries = HydrBoundary.getHydrBoundaries(
-                getRiverId(), getName());
+            List<HydrBoundary> boundaries;
+            String kind = getIdPart(2);
+            if (kind != null) {
+                boundaries = HydrBoundary.getHydrBoundaries(getRiverId(),
+                        getName(), Integer.parseInt(kind));
+            } else {
+                boundaries = HydrBoundary.getHydrBoundaries(getRiverId(), getName());
+            }
 
             Envelope max = null;
 
@@ -125,6 +131,12 @@
 
         @Override
         protected String getFilter() {
+            String kind = getIdPart(2);
+            if (kind != null) {
+                return "river_id=" + String.valueOf(getRiverId())
+                    + " AND name='" + getName() + "'"
+                    + " AND kind = " + kind;
+            }
             return "river_id=" + String.valueOf(getRiverId())
                 + " AND name='" + getName() + "'";
         }
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSHydrBoundaryPolyArtifact.java	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSHydrBoundaryPolyArtifact.java	Thu Mar 28 17:13:53 2013 +0100
@@ -102,8 +102,31 @@
 
         @Override
         protected Envelope getExtent(boolean reproject) {
-            List<HydrBoundaryPoly> boundaries = HydrBoundaryPoly.getHydrBoundaries(
-                getRiverId(), getName());
+            String kind = getIdPart(2);
+            String sectie = getIdPart(3);
+            String sobek = getIdPart(4);
+            int kindId = -1;
+            int sectieId = -1;
+            int sobekId = -1;
+
+            if (kind != null) {
+                kindId = Integer.parseInt(kind);
+            }
+            if (sectie != null && !sectie.equals("-1")) {
+                sectieId = Integer.parseInt(sectie);
+            }
+            if (sobek != null && !sobek.equals("-1")) {
+                sobekId = Integer.parseInt(sobek);
+            }
+
+            List<HydrBoundaryPoly> boundaries;
+            if (kindId == -1 && sobekId == -1 && sectieId == -1) {
+                boundaries = HydrBoundaryPoly.getHydrBoundaries(
+                        getRiverId(), getName());
+            } else {
+                boundaries = HydrBoundaryPoly.getHydrBoundaries(
+                        getRiverId(), kindId, sectieId, sobekId);
+            }
 
             Envelope max = null;
 
@@ -125,8 +148,29 @@
 
         @Override
         protected String getFilter() {
+            // Expected id string:
+            // river_id;layer_name;kind;sectie;sobek
+            String kind = getIdPart(2);
+            String sectie = getIdPart(3);
+            String sobek = getIdPart(4);
+
+            String filter = "";
+            if (kind != null && !kind.equals("-1")) {
+                filter += " AND kind = " + kind;
+            }
+            if (sectie != null && !sectie.equals("-1")) {
+                filter += " AND sectie = " + sectie;
+            }
+            if (sobek != null && !sobek.equals("-1")) {
+                filter += " AND sobek = " + sobek;
+            }
+
+            if (filter.isEmpty()) {
+                filter = " AND name='" + getName() + "'";
+            }
+
             return "river_id=" + String.valueOf(getRiverId())
-                + " AND name='" + getName() + "'";
+                + filter;
         }
 
         @Override
@@ -134,10 +178,10 @@
             String srid = getSrid();
 
             if (FLYSUtils.isUsingOracle()) {
-                return "geom FROM hydr_boundaries USING SRID " + srid;
+                return "geom FROM hydr_boundaries_poly USING SRID " + srid;
             }
             else {
-                return "geom FROM hydr_boundaries USING UNIQUE id USING SRID " + srid;
+                return "geom FROM hydr_boundaries_poly USING UNIQUE id USING SRID " + srid;
             }
         }
 
--- a/flys-backend/src/main/java/de/intevation/flys/model/HydrBoundary.java	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-backend/src/main/java/de/intevation/flys/model/HydrBoundary.java	Thu Mar 28 17:13:53 2013 +0100
@@ -91,6 +91,18 @@
         this.geom = geom;
     }
 
+    public static List<HydrBoundary> getHydrBoundaries(int riverId, String name, int kindId) {
+        Session session = SessionHolder.HOLDER.get();
+
+        Query query = session.createQuery(
+            "from HydrBoundary where river.id =:river_id and name=:name" + 
+            " and kind.id=:kind_id");
+        query.setParameter("river_id", riverId);
+        query.setParameter("name", name);
+        query.setParameter("kind_id", kindId);
+
+        return query.list();
+    }
 
     public static List<HydrBoundary> getHydrBoundaries(int riverId, String name) {
         Session session = SessionHolder.HOLDER.get();
--- a/flys-backend/src/main/java/de/intevation/flys/model/HydrBoundaryPoly.java	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-backend/src/main/java/de/intevation/flys/model/HydrBoundaryPoly.java	Thu Mar 28 17:13:53 2013 +0100
@@ -104,6 +104,27 @@
         return query.list();
     }
 
+    public static List<HydrBoundaryPoly> getHydrBoundaries(int riverId,
+            int kind, int sectie, int sobek) {
+        Session session = SessionHolder.HOLDER.get();
+
+        String filter = " where river.id =:river_id";
+
+        if (kind != -1) {
+            filter += " and kind = " + kind;
+        }
+        if (sectie != -1) {
+            filter += " and sectie = " + sectie;
+        }
+        if (sobek != -1){
+            filter += " and sobek = " + sobek;
+        }
+
+        Query query = session.createQuery("from HydrBoundaryPoly" + filter);
+        query.setParameter("river_id", riverId);
+        return query.list();
+    }
+
     /**
      * Get sectie.
      *
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java	Thu Mar 28 17:13:53 2013 +0100
@@ -1174,5 +1174,15 @@
 
     String axis();
 
+    String bfg_model();
+
+    String federal();
+
+    String areas();
+
+    String sobek_areas();
+
+    String sobek_flooded();
+
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties	Thu Mar 28 17:13:53 2013 +0100
@@ -466,6 +466,11 @@
 route_data = Route Data
 other = Other
 axis = Axis
+bfg_model = BfG-Model
+federal = Federal States
+areas = Areas
+sobek_flooded = SOBEK-Boundary flooded / not flooded
+sobek_areas = SOBEK-Areas
 
 startcolor = Colorrange start color
 endcolor = Colorrange end color
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties	Thu Mar 28 15:56:24 2013 +0100
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties	Thu Mar 28 17:13:53 2013 +0100
@@ -467,6 +467,11 @@
 route_data = Streckendaten
 other = Sonstige
 axis = Achse
+bfg_model = BfG-Modell
+federal = Bundesländer
+areas = Flächen
+sobek_flooded = SOBEK-Grenzlinie durchflutet / nicht durchflutet
+sobek_areas = SOBEK-Bereiche
 
 startcolor = Farbverlauf Startfarbe
 endcolor = Farbverlauf Endfarbe

http://dive4elements.wald.intevation.org