diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java @ 5477:ae60bb7b8085

Add proper handling of multiple river_axes for datacage and rivermapfile
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 27 Mar 2013 18:31:31 +0100
parents ffa5eaad3a7b
children
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java	Wed Mar 27 17:49:46 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java	Wed Mar 27 18:31:31 2013 +0100
@@ -11,6 +11,7 @@
 import de.intevation.flys.artifacts.model.FacetTypes;
 import de.intevation.flys.artifacts.model.RiverFactory;
 import de.intevation.flys.model.River;
+import de.intevation.flys.model.RiverAxis;
 import de.intevation.flys.utils.FLYSUtils;
 import de.intevation.flys.utils.GeometryUtils;
 
@@ -80,23 +81,6 @@
 
         public RiverAxisState(FLYSArtifact artifact) {
             super(artifact);
-            riverId = 0;
-        }
-
-        @Override
-        public int getRiverId() {
-            if (riverId == 0) {
-                String ids = artifact.getDataAsString("ids");
-
-                try {
-                    riverId = Integer.parseInt(ids);
-                }
-                catch (NumberFormatException nfe) {
-                    logger.error("Cannot parse river id from '" + ids + "'");
-                }
-            }
-
-            return riverId;
         }
 
         @Override
@@ -123,23 +107,63 @@
         @Override
         protected Envelope getExtent(boolean reproject) {
             River river = RiverFactory.getRiver(getRiverId());
+            List<RiverAxis> axes;
 
-            if (reproject) {
-                logger.debug("Query extent for RiverAxis with Srid: " + getSrid());
-                return GeometryUtils.transform(
-                    GeometryUtils.getRiverBoundary(river.getName()),
-                    getSrid());
+            String kind = getIdPart(2);
+
+            if (kind != null && kind.equals("1")) {
+                axes = RiverAxis.getRiverAxis(river.getName(),
+                        Integer.parseInt(kind));
+            } else if (kind != null) {
+                axes = RiverAxis.getRiverAxis(river.getName(),
+                        getName(), Integer.parseInt(kind));
+            } else {
+                if (reproject) {
+                    logger.debug("Query extent for RiverAxis with Srid: " + getSrid());
+                    return GeometryUtils.transform(
+                            GeometryUtils.getRiverBoundary(river.getName()),
+                            getSrid());
+                } else {
+                    return GeometryUtils.transform(
+                            GeometryUtils.getRiverBoundary(river.getName()),
+                            "31467");
+                }
             }
-            else {
-                return GeometryUtils.transform(
-                    GeometryUtils.getRiverBoundary(river.getName()),
-                    "31467");
+
+            Envelope max = null;
+
+            for (RiverAxis ax: axes) {
+                Envelope env = ax.getGeom().getEnvelopeInternal();
+
+                if (max == null) {
+                    max = env;
+                    continue;
+                }
+
+                max.expandToInclude(env);
             }
+
+            return max != null && reproject
+                ? GeometryUtils.transform(max, getSrid())
+                : max;
         }
 
         @Override
         protected String getFilter() {
-            return "river_id=" + String.valueOf(getRiverId());
+            String kind = getIdPart(2);
+            if (kind != null && kind.equals("1")) {
+                return "river_id=" + String.valueOf(getRiverId()) +
+                    " AND kind_id=" + kind;
+            } else if (kind != null) {
+                return "river_id=" + String.valueOf(getRiverId()) +
+                    " AND kind_id=" + kind +
+                    " AND name='" + getName() + "'";
+            } else if (getIdPart(1) != null) {
+                return "river_id=" + String.valueOf(getRiverId()) +
+                    " AND name='" + getName() + "'";
+            }
+            return "river_id=" + String.valueOf(getRiverId()) +
+                " AND kind_id=" + kind;
         }
 
         @Override

http://dive4elements.wald.intevation.org