diff gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java @ 498:4080b57dcb52

Upgraded to Geotools 2.5.8. Write polygons and line strings to shape files. gnv-artifacts/trunk@578 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 19 Jan 2010 21:23:28 +0000
parents 6e8364e766fa
children e065a72f6b62
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java	Tue Jan 19 17:55:08 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java	Tue Jan 19 21:23:28 2010 +0000
@@ -45,22 +45,21 @@
 
 import de.intevation.gnv.state.exception.StateException;
 
-import de.intevation.gnv.state.timeseries.TimeSeriesOutputState;
-
 import de.intevation.gnv.utils.FileUtils;
 import de.intevation.gnv.utils.Pair;
+import de.intevation.gnv.utils.ShapeFileWriter;
 import de.intevation.gnv.utils.StringUtils;
 import de.intevation.gnv.utils.WKTUtils;
 
 import java.awt.Dimension;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -250,25 +249,66 @@
 
         File shapeDir = new File(baseDir, uuid);
 
-        int count = 0;
+        boolean success    = false;
+        boolean createdDir = false;
 
-        synchronized (shapeFileLock) {
-            while (shapeDir.exists()) {
-                shapeDir = new File(baseDir, uuid + "-" + count);
-                ++count;
+        try {
+            synchronized (shapeFileLock) {
+                int count = 0;
+                while (shapeDir.exists()) {
+                    shapeDir = new File(baseDir, uuid + "-" + count);
+                    ++count;
+                }
+
+                if (!shapeDir.mkdirs()) {
+                    log.error("cannot create directory '" 
+                        + shapeDir.getAbsolutePath() + "'");
+                    return null;
+                }
+                createdDir = true;
             }
 
-            if (!shapeDir.mkdirs()) {
-                log.error("cannot create directory '" 
-                    + shapeDir.getAbsolutePath() + "'");
+            Map<Integer, MultiPolygon> polygons = result.getPolygons();
+
+            List<Pair<Object, MultiLineString>> isolines =
+                result.getLineStrings();
+
+            File polygonsFile = new File(shapeDir, "polygons.shp");
+            File isolinesFile = new File(shapeDir, "isolines.shp");
+
+            if (!ShapeFileWriter.writeMultiPolygonsToFile(
+                polygonsFile,
+                (Integer)result.getAttribute("parameter"),
+                (Integer)result.getAttribute("layer"),
+                (Date)   result.getAttribute("date"),
+                polygons)
+            ) {
+                log.error("writing polygons failed");
                 return null;
             }
-            shapeFilePath = shapeDir.getAbsolutePath();
+
+            if (!ShapeFileWriter.writeMultiLineStringsToFile(
+                isolinesFile,
+                (Integer)result.getAttribute("parameter"),
+                (Integer)result.getAttribute("layer"),
+                (Date)   result.getAttribute("date"),
+                isolines)
+            ) {
+                log.error("writing isolines failed");
+                return null;
+            }
+                
+
+            success = true;
+        }
+        finally {
+            if (!success && createdDir) {
+                FileUtils.deleteRecursive(shapeDir);
+
+            }
         }
 
-        // TODO: Do the writing
-
-        return shapeFilePath;
+        return shapeFilePath = shapeDir.getAbsolutePath();
     }
 
     protected AttributedPoint2ds getResult(String uuid, CallContext callContext)
@@ -371,7 +411,6 @@
         int iIdx = -1;
         int jIdx = -1;
         int vIdx = -1;
-        int kIdx = -1;
 
         boolean firstWarn = true;
 
@@ -382,8 +421,8 @@
                 sIdx     = rd.getColumnIndex("SHAPE");
                 iIdx     = rd.getColumnIndex("IPOSITION");
                 jIdx     = rd.getColumnIndex("JPOSITION");
-                kIdx     = rd.getColumnIndex("KPOSITION");
                 vIdx     = rd.getColumnIndex("YORDINATE");
+                int kIdx = rd.getColumnIndex("KPOSITION");
                 int tIdx = rd.getColumnIndex("TIMEVALUE");
                 int pIdx = rd.getColumnIndex("PARAMETERID");
 
@@ -398,6 +437,7 @@
 
                 ap2ds.setAttribute("date",      result.getDate(tIdx));
                 ap2ds.setAttribute("parameter", result.getInteger(pIdx));
+                ap2ds.setAttribute("layer",     result.getInteger(kIdx));
             }
             Coordinate coord = WKTUtils.toCoordinate(result.getString(sIdx));
             if (coord == null) {

http://dive4elements.wald.intevation.org