comparison 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
comparison
equal deleted inserted replaced
497:75306d856004 498:4080b57dcb52
43 import de.intevation.gnv.state.InputData; 43 import de.intevation.gnv.state.InputData;
44 import de.intevation.gnv.state.OutputStateBase; 44 import de.intevation.gnv.state.OutputStateBase;
45 45
46 import de.intevation.gnv.state.exception.StateException; 46 import de.intevation.gnv.state.exception.StateException;
47 47
48 import de.intevation.gnv.state.timeseries.TimeSeriesOutputState;
49
50 import de.intevation.gnv.utils.FileUtils; 48 import de.intevation.gnv.utils.FileUtils;
51 import de.intevation.gnv.utils.Pair; 49 import de.intevation.gnv.utils.Pair;
50 import de.intevation.gnv.utils.ShapeFileWriter;
52 import de.intevation.gnv.utils.StringUtils; 51 import de.intevation.gnv.utils.StringUtils;
53 import de.intevation.gnv.utils.WKTUtils; 52 import de.intevation.gnv.utils.WKTUtils;
54 53
55 import java.awt.Dimension; 54 import java.awt.Dimension;
56 55
57 import java.io.File; 56 import java.io.File;
58 import java.io.FileOutputStream;
59 import java.io.IOException; 57 import java.io.IOException;
60 import java.io.OutputStream; 58 import java.io.OutputStream;
61 59
62 import java.util.ArrayList; 60 import java.util.ArrayList;
63 import java.util.Collection; 61 import java.util.Collection;
62 import java.util.Date;
64 import java.util.HashMap; 63 import java.util.HashMap;
65 import java.util.List; 64 import java.util.List;
66 import java.util.Map; 65 import java.util.Map;
67 66
68 import org.apache.log4j.Logger; 67 import org.apache.log4j.Logger;
248 ) { 247 ) {
249 File baseDir = shapefileDirectory(callContext); 248 File baseDir = shapefileDirectory(callContext);
250 249
251 File shapeDir = new File(baseDir, uuid); 250 File shapeDir = new File(baseDir, uuid);
252 251
253 int count = 0; 252 boolean success = false;
254 253 boolean createdDir = false;
255 synchronized (shapeFileLock) { 254
256 while (shapeDir.exists()) { 255 try {
257 shapeDir = new File(baseDir, uuid + "-" + count); 256 synchronized (shapeFileLock) {
258 ++count; 257 int count = 0;
259 } 258 while (shapeDir.exists()) {
260 259 shapeDir = new File(baseDir, uuid + "-" + count);
261 if (!shapeDir.mkdirs()) { 260 ++count;
262 log.error("cannot create directory '" 261 }
263 + shapeDir.getAbsolutePath() + "'"); 262
263 if (!shapeDir.mkdirs()) {
264 log.error("cannot create directory '"
265 + shapeDir.getAbsolutePath() + "'");
266 return null;
267 }
268 createdDir = true;
269 }
270
271 Map<Integer, MultiPolygon> polygons = result.getPolygons();
272
273 List<Pair<Object, MultiLineString>> isolines =
274 result.getLineStrings();
275
276 File polygonsFile = new File(shapeDir, "polygons.shp");
277 File isolinesFile = new File(shapeDir, "isolines.shp");
278
279 if (!ShapeFileWriter.writeMultiPolygonsToFile(
280 polygonsFile,
281 (Integer)result.getAttribute("parameter"),
282 (Integer)result.getAttribute("layer"),
283 (Date) result.getAttribute("date"),
284 polygons)
285 ) {
286 log.error("writing polygons failed");
264 return null; 287 return null;
265 } 288 }
266 shapeFilePath = shapeDir.getAbsolutePath(); 289
267 } 290 if (!ShapeFileWriter.writeMultiLineStringsToFile(
268 291 isolinesFile,
269 // TODO: Do the writing 292 (Integer)result.getAttribute("parameter"),
270 293 (Integer)result.getAttribute("layer"),
271 return shapeFilePath; 294 (Date) result.getAttribute("date"),
295 isolines)
296 ) {
297 log.error("writing isolines failed");
298 return null;
299 }
300
301
302 success = true;
303 }
304 finally {
305 if (!success && createdDir) {
306 FileUtils.deleteRecursive(shapeDir);
307
308 }
309 }
310
311 return shapeFilePath = shapeDir.getAbsolutePath();
272 } 312 }
273 313
274 protected AttributedPoint2ds getResult(String uuid, CallContext callContext) 314 protected AttributedPoint2ds getResult(String uuid, CallContext callContext)
275 throws StateException 315 throws StateException
276 { 316 {
369 409
370 int sIdx = -1; 410 int sIdx = -1;
371 int iIdx = -1; 411 int iIdx = -1;
372 int jIdx = -1; 412 int jIdx = -1;
373 int vIdx = -1; 413 int vIdx = -1;
374 int kIdx = -1;
375 414
376 boolean firstWarn = true; 415 boolean firstWarn = true;
377 416
378 for (Result result: results) { 417 for (Result result: results) {
379 418
380 if (sIdx == -1) { 419 if (sIdx == -1) {
381 ResultDescriptor rd = result.getResultDescriptor(); 420 ResultDescriptor rd = result.getResultDescriptor();
382 sIdx = rd.getColumnIndex("SHAPE"); 421 sIdx = rd.getColumnIndex("SHAPE");
383 iIdx = rd.getColumnIndex("IPOSITION"); 422 iIdx = rd.getColumnIndex("IPOSITION");
384 jIdx = rd.getColumnIndex("JPOSITION"); 423 jIdx = rd.getColumnIndex("JPOSITION");
385 kIdx = rd.getColumnIndex("KPOSITION");
386 vIdx = rd.getColumnIndex("YORDINATE"); 424 vIdx = rd.getColumnIndex("YORDINATE");
425 int kIdx = rd.getColumnIndex("KPOSITION");
387 int tIdx = rd.getColumnIndex("TIMEVALUE"); 426 int tIdx = rd.getColumnIndex("TIMEVALUE");
388 int pIdx = rd.getColumnIndex("PARAMETERID"); 427 int pIdx = rd.getColumnIndex("PARAMETERID");
389 428
390 if (sIdx == -1 || iIdx == -1 429 if (sIdx == -1 || iIdx == -1
391 || jIdx == -1 || kIdx == -1 430 || jIdx == -1 || kIdx == -1
396 return null; 435 return null;
397 } 436 }
398 437
399 ap2ds.setAttribute("date", result.getDate(tIdx)); 438 ap2ds.setAttribute("date", result.getDate(tIdx));
400 ap2ds.setAttribute("parameter", result.getInteger(pIdx)); 439 ap2ds.setAttribute("parameter", result.getInteger(pIdx));
440 ap2ds.setAttribute("layer", result.getInteger(kIdx));
401 } 441 }
402 Coordinate coord = WKTUtils.toCoordinate(result.getString(sIdx)); 442 Coordinate coord = WKTUtils.toCoordinate(result.getString(sIdx));
403 if (coord == null) { 443 if (coord == null) {
404 if (firstWarn) { 444 if (firstWarn) {
405 firstWarn = false; 445 firstWarn = false;

http://dive4elements.wald.intevation.org