# HG changeset patch # User Andre Heinecke # Date 1414518755 -3600 # Node ID b9a8463ac636e98f58dd80e89f9c4b17d63e6be2 # Parent e3e5d6bb4902253eea9524982584c3c9d9bb8239 (issue1732) When duplication wsplgen artificats fix shapefile layers The shapefile layers are copied but still contained the old names and paths and the wms layer refered to layers from the old artifact. This was broken. Now the old artificat id is replaced by the new artifact id in the mapfiles. Duplication most wsplgen artifacts should now work. diff -r e3e5d6bb4902 -r b9a8463ac636 artifacts/pom.xml --- a/artifacts/pom.xml Tue Oct 28 16:10:42 2014 +0100 +++ b/artifacts/pom.xml Tue Oct 28 18:52:35 2014 +0100 @@ -110,6 +110,11 @@ 1.4 + commons-io + commons-io + 2.4 + + org.geotools gt-shapefile 2.7.2 diff -r e3e5d6bb4902 -r b9a8463ac636 artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodMapState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodMapState.java Tue Oct 28 16:10:42 2014 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodMapState.java Tue Oct 28 18:52:35 2014 +0100 @@ -23,6 +23,7 @@ import org.apache.log4j.Logger; import org.apache.velocity.Template; +import org.apache.commons.io.FileUtils; import org.dive4elements.artifactdatabase.state.Facet; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; @@ -109,6 +110,16 @@ private static final String HWS_POINT_SHAPE = "hws-points.shp"; private static final String HWS_POINTS = "hws-points"; + + /* List of possible map files this state handles . */ + private static final String[] POSSIBLE_ADDITIONAL_MAPFILES = {HWS_LINES, + HWS_POINTS, + WSPLGEN_USER_RGD, + "barriers-lines", + "barriers-poly"}; + + + /** * @param orig * @param owner @@ -124,7 +135,7 @@ ) { log.info("Initialize State with Artifact: " + orig.identifier()); - copyShapeDir(orig, owner); + copyAndFixShapeDir(orig, owner); modifyFacets(orig, owner, context, callMeta); ArtifactMapfileGenerator amfg = new ArtifactMapfileGenerator(); @@ -137,11 +148,28 @@ } - protected void copyShapeDir(Artifact orig, Artifact owner) { + protected void copyAndFixShapeDir(Artifact orig, Artifact owner) { + /* We have a lot of generated mapfiles in here possibly. + * They use the orig artificact identifier. That has to + * be fixed.*/ File origDir = getDirectory((D4EArtifact) orig); File thisDir = getDirectory((D4EArtifact) owner); FileTools.copyDirectory(origDir, thisDir); + + for (String candidate: POSSIBLE_ADDITIONAL_MAPFILES) { + File f = new File(thisDir, MapfileGenerator.MS_LAYER_PREFIX + candidate); + if (f.exists()) { + log.debug("Fixing artifiact id's in: " + f); + try { + String content = FileUtils.readFileToString(f); + FileUtils.writeStringToFile(f, + content.replaceAll(orig.identifier(), owner.identifier())); + } catch (IOException e) { + log.debug("failed."); + } + } + } } @@ -165,11 +193,11 @@ List layers = wms.getLayers(); for (String layer: layers) { - if (layer.startsWith(MapfileGenerator.MS_WSPLGEN_PREFIX)) { + log.debug("Have layer: " + layer); + if (layer.contains(orig.identifier())) { wms.removeLayer(layer); - String newLayer = MapfileGenerator.MS_WSPLGEN_PREFIX + - owner.identifier(); + String newLayer = layer.replace(orig.identifier(), owner.identifier()); wms.addLayer(newLayer);