Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java @ 2639:a78dafdd8590
Issue 657.
Added file upload service to load a user defined shapefile.
User the shapefile for wsplgen calculation and display a new layer.
flys-artifacts/trunk@4292 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Wed, 25 Apr 2012 07:45:00 +0000 |
parents | 8cb679d4ec49 |
children | 6875120af2a2 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Thu Apr 19 11:49:57 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Wed Apr 25 07:45:00 2012 +0000 @@ -82,6 +82,9 @@ public static final String WSPLGEN_FLOODPLAIN = "talaue.shp"; public static final String WSPLGEN_WSP_FILE = "waterlevel.wst"; public static final String WSPLGEN_OUTPUT_FILE = "wsplgen.shp"; + public static final String WSPLGEN_USER_SHAPE = "user-rgd.shp"; + public static final String WSPLGEN_USER_ZIP = "user-rgd.zip"; + public static final String WSPLGEN_USER_FILENAME = "user-rgd"; public static final int WSPLGEN_DEFAULT_OUTPUT = 0; @@ -265,7 +268,6 @@ logger.info("FloodMapState.endOfLife: " + artifact.identifier()); FLYSArtifact flys = (FLYSArtifact) artifact; - removeDirectory(flys); Scheduler scheduler = Scheduler.getInstance(); scheduler.cancelJob(flys.identifier()); @@ -298,6 +300,7 @@ setGel(artifact, job); setDist(artifact, job); setLine(artifact, facetCreator, artifactDir, job); + setUserShape(artifact, facetCreator, artifactDir, job); setAxis(artifact, artifactDir, job); setPro(artifact, artifactDir, job); setDgm(artifact, job); @@ -471,6 +474,31 @@ } + protected void setUserShape( + FLYSArtifact artifact, + FacetCreator facetCreator, + File dir, + WSPLGENJob job + ) { + File archive = new File(dir, WSPLGEN_USER_ZIP); + boolean exists = archive.exists(); + logger.debug("Zip file exists: " + exists); + if (exists) { + try { + File tmpDir = new File(dir, "usr_tmp"); + FileTools.extractArchive(archive, tmpDir); + moveFiles(tmpDir, dir); + } + catch (IOException ioe) { + logger.warn("Zip archive " + dir + "/" + WSPLGEN_USER_ZIP + " could not be extracted."); + return; + } + + job.addLin(dir + "/" + WSPLGEN_USER_SHAPE); + facetCreator.createUserShapeFacet(); + } + } + protected SimpleFeatureType getBarriersFeatureType( String name, String srs, @@ -808,5 +836,42 @@ } } } + + + protected void moveFiles(File source, final File target) + throws IOException + { + if (!source.exists()) { + return; + } + if (!target.exists()) { + target.mkdir(); + } + FileTools.walkTree(source, new FileTools.FileVisitor() { + public boolean visit(File file) { + if (!file.isDirectory()) { + String name = file.getName(); + String suffix = ""; + int pos = name.lastIndexOf('.'); + if (pos > 0 && pos < name.length() - 1) { + suffix = name.substring(pos + 1); + } + else { + return true; + } + try { + FileTools.copyFile(file, new File(target, WSPLGEN_USER_FILENAME + "." + suffix)); + } + catch (IOException ioe) { + logger.warn ("Error while copying file " + file.getName()); + return true; + } + } + return true; + } + }); + + FileTools.deleteRecursive(source); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :