Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java @ 5379:61bf64b102bc mapgenfix
Merge with default branch
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Fri, 22 Mar 2013 11:25:54 +0100 |
parents | 2b24073e80d9 d43ef9f709cd |
children |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Wed Mar 06 14:14:15 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Fri Mar 22 11:25:54 2013 +0100 @@ -17,7 +17,11 @@ import de.intevation.flys.artifacts.model.CalculationMessage; import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.LayerInfo; import de.intevation.flys.artifacts.model.WQKms; +import de.intevation.flys.artifacts.model.map.HWS; +import de.intevation.flys.artifacts.model.map.HWSContainer; +import de.intevation.flys.artifacts.model.map.HWSFactory; import de.intevation.flys.artifacts.model.map.WMSLayerFacet; import de.intevation.flys.artifacts.model.map.WSPLGENCalculation; import de.intevation.flys.artifacts.model.map.WSPLGENJob; @@ -42,16 +46,18 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; +import org.apache.velocity.Template; import org.geotools.feature.FeatureCollection; import org.geotools.feature.FeatureCollections; import org.geotools.feature.simple.SimpleFeatureBuilder; +import org.hibernate.HibernateException; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; - public class FloodMapState extends DefaultState implements FacetTypes @@ -86,6 +92,13 @@ public static final int WSPLGEN_DEFAULT_OUTPUT = 0; + private static final String HWS_LINES_SHAPE = "hws-lines.shp"; + + private static final String I18N_HWS_POINTS = "floodmap.hws.points"; + private static final String I18N_HWS_LINES = "floodmap.hws.lines"; + private static final String HWS_LINES = "hws-lines"; + private static final String HWS_POINT_SHAPE = "hws-points.shp"; + private static final String HWS_POINTS = "hws-points"; /** * @param orig @@ -289,6 +302,7 @@ WSPLGENCalculation calculation ) { logger.debug("FloodMapState.prepareWSPLGENJob"); + String scenario = artifact.getDataAsString("scenario"); WSPLGENJob job = new WSPLGENJob( artifact, @@ -304,15 +318,20 @@ setDelta(artifact, job); 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); + setDgm(artifact, job, context); setArea(artifact, artifactDir, job); setOutFile(artifact, job); setWsp(artifact, context, artifactDir, job); // WSP - + if (scenario.equals("scenario.current")) { + setOfficialHWS(artifact, facetCreator, artifactDir, job); + } + else if (scenario.equals("scenario.scenario")) { + setAdditionalHWS(artifact, facetCreator, artifactDir, job); + setLine(artifact, facetCreator, artifactDir, job); + setUserShape(artifact, facetCreator, artifactDir, job); + } // TODO // setWspTag(artifact, job); @@ -332,6 +351,106 @@ } + private void setAdditionalHWS( + FLYSArtifact artifact, + FacetCreator facetCreator, + File dir, + WSPLGENJob job) { + File line = new File(dir, HWS_LINES_SHAPE); + boolean lines = line.exists(); + logger.debug("shp file exists: " + lines); + if (lines) { + job.addLin(dir + "/" + HWS_LINES_SHAPE); + facetCreator.createShapeFacet(I18N_HWS_LINES, + MapfileGenerator.MS_LAYER_PREFIX + HWS_LINES, + FLOODMAP_LINES, 2); + } + File point = new File(dir, HWS_POINT_SHAPE); + boolean points = point.exists(); + logger.debug("shp file exists: " + points); + if (points) { + facetCreator.createShapeFacet(I18N_HWS_POINTS, + MapfileGenerator.MS_LAYER_PREFIX + HWS_POINTS, + FLOODMAP_FIXPOINTS, 3); + } + } + + + private void setOfficialHWS( + FLYSArtifact artifact, + FacetCreator facetCreator, + File artifactDir, + WSPLGENJob job) { + String river = artifact.getDataAsString("river"); + + HWSContainer hwsLines = HWSFactory.getHWSLines(river); + List<HWS> selectedLines = hwsLines.getOfficialHWS(); + + FeatureCollection collectionLines = FeatureCollections.newCollection(); + SimpleFeatureType lineType = null; + for (HWS h : selectedLines) { + lineType = h.getFeatureType(); + collectionLines.add(h.getFeature()); + } + boolean successLines = false; + if (lineType != null && collectionLines.size() > 0) { + File shapeLines = new File(artifactDir, HWS_LINES_SHAPE); + successLines = GeometryUtils.writeShapefile( + shapeLines, lineType, collectionLines); + } + if (successLines) { + createMapfile( + artifact, + artifactDir, + MapfileGenerator.MS_LAYER_PREFIX + "hws-lines", + HWS_LINES_SHAPE, + "LINE", + "31467", + "hws"); + job.addLin(artifactDir + "/" + HWS_LINES_SHAPE); + facetCreator.createShapeFacet(I18N_HWS_LINES, + MapfileGenerator.MS_LAYER_PREFIX + HWS_LINES, + FLOODMAP_HWS_LINES,2); + } + } + + + private void createMapfile( + FLYSArtifact artifact, + File artifactDir, + String name, + String hwsShapefile, + String type, + String srid, + String group + ) { + LayerInfo info = new LayerInfo(); + info.setName(name + artifact.identifier()); + info.setType(type); + info.setDirectory(artifact.identifier()); + info.setTitle(name); + info.setData(hwsShapefile); + info.setSrid(srid); + info.setGroupTitle(group); + MapfileGenerator generator = new ArtifactMapfileGenerator(); + Template tpl = generator.getTemplateByName(MapfileGenerator.SHP_LAYER_TEMPLATE); + try { + File layer = new File(artifactDir.getCanonicalPath() + "/" + name); + generator.writeLayer(info, layer, tpl); + List<String> layers = new ArrayList<String>(); + layers.add(layer.getAbsolutePath()); + generator.generate(); + } + catch(FileNotFoundException fnfe) { + logger.warn("Could not find mapfile for hws layer"); + } + catch (Exception ioe) { + logger.warn("Could not create mapfile for hws layer"); + logger.warn(Arrays.toString(ioe.getStackTrace())); + } + } + + protected void setOut(FLYSArtifact artifact, WSPLGENJob job) { job.setOut(WSPLGEN_DEFAULT_OUTPUT); } @@ -448,6 +567,14 @@ logger.debug( "Successfully created barrier line shapefile. " + "Write shapefile path into WSPLGEN job."); + createMapfile( + artifact, + dir, + MapfileGenerator.MS_LAYER_PREFIX + "barriers-lines", + WSPLGEN_BARRIERS_LINES, + "LINE", + srid, + "barriers"); if (scenario.equals(WSPLGENJob.GEL_NOSPERRE)) { logger.debug("WSPLGEN will not use barrier features."); @@ -462,10 +589,19 @@ GeometryUtils.buildFeatureType("polygons", srs, Polygon.class, obj), fcs[1]); + if (p) { logger.debug( "Successfully created barrier polygon shapefile. " + "Write shapefile path into WSPLGEN job."); + createMapfile( + artifact, + dir, + MapfileGenerator.MS_LAYER_PREFIX + "barriers-poly", + shapePolys.getAbsolutePath(), + "POLYGON", + srid, + "barriers"); if (scenario.equals(WSPLGENJob.GEL_NOSPERRE)) { logger.debug("WSPLGEN will not use barrier features."); @@ -487,14 +623,17 @@ File dir, WSPLGENJob job ) { - File archive = new File(dir, WSPLGEN_USER_ZIP); + File archive = new File(dir, WSPLGEN_USER_SHAPE); boolean exists = archive.exists(); - logger.debug("Zip file exists: " + exists); + logger.debug("shp file exists: " + exists); if (exists) { FileUtils.extractZipfile(archive, dir); job.addLin(dir + "/" + WSPLGEN_USER_SHAPE); - facetCreator.createUserShapeFacet(); + facetCreator.createShapeFacet(FacetCreator.I18N_USERSHAPE, + MapfileGenerator.MS_LAYER_PREFIX + "user-rgd", + FLOODMAP_USERSHAPE, + 4); } } @@ -606,8 +745,15 @@ String river = artifact.getDataAsString("river"); String srid = FLYSUtils.getRiverDGMSrid(river); String srs = "EPSG:" + srid; -logger.debug("srs: " + srs); - List<RiverAxis> axes = RiverAxis.getRiverAxis(river); + + List<RiverAxis> axes = null; + try { + axes = RiverAxis.getRiverAxis(river); + } + catch (HibernateException iae) { + logger.warn("No valid river axis found for " + river); + return; + } if (axes == null || axes.isEmpty()) { logger.warn("Could not find river axis for: '" + river + "'"); return; @@ -684,7 +830,11 @@ } - protected void setDgm(FLYSArtifact artifact, WSPLGENJob job) { + protected void setDgm( + FLYSArtifact artifact, + WSPLGENJob job, + CallContext context + ) { String dgm_id = artifact.getDataAsString("dgm"); int id = -1; @@ -701,7 +851,15 @@ return; } - job.setDgm(dgm.getPath()); + File dgmPath = new File (dgm.getPath()); + if (dgmPath.isAbsolute()) { + job.setDgm(dgm.getPath()); + } + else { + FLYSContext fc = (FLYSContext)context.globalContext(); + String prefix = (String) fc.get("dgm-path"); + job.setDgm(prefix.trim() + dgm.getPath().trim()); + } }