# HG changeset patch # User Tom Gottfried # Date 1665481329 -7200 # Node ID 308a0d822d1867ce9b3af137e429e8e5aa5c6183 # Parent 432934cda171f4a53ac589920d088c3ef7b0c14c Keep configuration and data in distinct directories This allows having distinct volumes for configuration and data (artifact database, generated mapfiles and shapefiles, etc.). While at it, cleanup MapServer configuration a little bit. diff -r 432934cda171 -r 308a0d822d18 artifacts/doc/conf/artifact-db.xml --- a/artifacts/doc/conf/artifact-db.xml Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/doc/conf/artifact-db.xml Tue Oct 11 11:42:09 2022 +0200 @@ -6,5 +6,5 @@ - jdbc:h2:${artifacts.config.dir}/../artifactsdb/artifacts + jdbc:h2:${artifacts.config.dir}/../artifacts-data/artifactsdb/artifacts diff -r 432934cda171 -r 308a0d822d18 artifacts/doc/conf/conf.xml --- a/artifacts/doc/conf/conf.xml Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/doc/conf/conf.xml Tue Oct 11 11:42:09 2022 +0200 @@ -319,6 +319,13 @@ + + + + + + + &floodmap; &rivermap; diff -r 432934cda171 -r 308a0d822d18 artifacts/doc/conf/datacage-db.xml --- a/artifacts/doc/conf/datacage-db.xml Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/doc/conf/datacage-db.xml Tue Oct 11 11:42:09 2022 +0200 @@ -3,5 +3,5 @@ SA org.h2.Driver - jdbc:h2:${artifacts.config.dir}/../datacagedb/datacage + jdbc:h2:${artifacts.config.dir}/../artifacts-data/datacagedb/datacage diff -r 432934cda171 -r 308a0d822d18 artifacts/doc/conf/floodmap.xml --- a/artifacts/doc/conf/floodmap.xml Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/doc/conf/floodmap.xml Tue Oct 11 11:42:09 2022 +0200 @@ -1,12 +1,7 @@ - - - - - - - + + diff -r 432934cda171 -r 308a0d822d18 artifacts/doc/conf/rivermap.xml --- a/artifacts/doc/conf/rivermap.xml Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/doc/conf/rivermap.xml Tue Oct 11 11:42:09 2022 +0200 @@ -1,12 +1,8 @@ - - - - - - + + diff -r 432934cda171 -r 308a0d822d18 artifacts/src/assembly/assembly.xml --- a/artifacts/src/assembly/assembly.xml Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/assembly/assembly.xml Tue Oct 11 11:42:09 2022 +0200 @@ -19,12 +19,12 @@ ${project.basedir}/artifactsdb - /artifactsdb + /artifacts-data/artifactsdb ${project.basedir}/datacagedb - /datacagedb + /artifacts-data/datacagedb ${project.basedir}/../backend/doc/schema diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/artifacts/WMSDBArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/WMSDBArtifact.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/WMSDBArtifact.java Tue Oct 11 11:42:09 2022 +0200 @@ -241,7 +241,7 @@ log.info("Destroy WMSDBState: " + getID()); String p = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File dir = new File(p, owner.identifier()); if (dir != null && dir.exists()) { diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/ShapeFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/ShapeFacet.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/ShapeFacet.java Tue Oct 11 11:42:09 2022 +0200 @@ -15,8 +15,8 @@ import org.dive4elements.artifactdatabase.state.DefaultFacet; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; -import org.dive4elements.artifacts.common.utils.Config; import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.utils.RiverUtils; public class ShapeFacet @@ -24,9 +24,6 @@ { private static Logger log = LogManager.getLogger(ShapeFacet.class); - private static final String BASE_DIR = - "/artifact-database/floodmap/shapefile-path/@value"; - /** * Defaults to ADVANCE Compute type. * @param name Name of the facet. @@ -42,8 +39,8 @@ @Override public Object getData(Artifact artifact, CallContext context) { D4EArtifact flys = (D4EArtifact)artifact; - String tmp = Config.getStringXPath(BASE_DIR); - String baseDir = Config.replaceConfigDir(tmp); + String baseDir = RiverUtils.getXPathString( + RiverUtils.XPATH_MAPFILES_PATH); baseDir += "/" + flys.identifier(); File shapeDir = new File(baseDir); if (shapeDir.exists()) { @@ -51,5 +48,4 @@ } return null; } - } diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/artifacts/services/FileUploadService.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/services/FileUploadService.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/services/FileUploadService.java Tue Oct 11 11:42:09 2022 +0200 @@ -66,7 +66,7 @@ if (fileData != null) { try { String shapePath = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File artifactDir = FileTools.getDirectory(shapePath, uuid); FileOutputStream fos = diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodMapState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodMapState.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/FloodMapState.java Tue Oct 11 11:42:09 2022 +0200 @@ -296,7 +296,7 @@ */ protected File getDirectory(D4EArtifact artifact) { String shapePath = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File artifactDir = FileTools.getDirectory( shapePath, artifact.identifier()); @@ -311,7 +311,7 @@ */ protected void removeDirectory(D4EArtifact artifact) { String shapePath = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File artifactDir = new File(shapePath, artifact.identifier()); diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/artifacts/states/HWSBarriersState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/HWSBarriersState.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/HWSBarriersState.java Tue Oct 11 11:42:09 2022 +0200 @@ -278,7 +278,7 @@ // FIXME: I've seen this code somewhere else... protected void removeDirectory(D4EArtifact artifact) { String shapePath = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File artifactDir = new File(shapePath, artifact.identifier()); @@ -304,7 +304,7 @@ */ protected File getDirectory(D4EArtifact artifact) { String shapePath = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File artifactDir = FileTools.getDirectory( shapePath, artifact.identifier()); diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/artifacts/states/ScenarioSelect.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/ScenarioSelect.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/ScenarioSelect.java Tue Oct 11 11:42:09 2022 +0200 @@ -125,7 +125,7 @@ // FIXME: I've seen this code somewhere else... protected void removeDirectory(D4EArtifact artifact) { String shapePath = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); File artifactDir = new File(shapePath, artifact.identifier()); diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/utils/ArtifactMapfileGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/utils/ArtifactMapfileGenerator.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/ArtifactMapfileGenerator.java Tue Oct 11 11:42:09 2022 +0200 @@ -37,6 +37,15 @@ private static Logger log = LogManager.getLogger( ArtifactMapfileGenerator.class); + private static final String XPATH_FLOODMAP_VELOCITY_LOGFILE = + "/artifact-database/floodmap/velocity/logfile/@path"; + + private static final String XPATH_FLOODMAP_MAPFILE_TEMPLATE = + "/artifact-database/floodmap/map-template/@path"; + + private static final String XPATH_FLOODMAP_MAPFILE_PATH = + "/artifact-database/floodmap/mapfile/@path"; + public static final String FLOODMAP_UESK_KEY = "floodmap.uesk"; @@ -45,14 +54,7 @@ @Override protected String getVelocityLogfile() { - return RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_VELOCITY_LOGFILE); - } - - @Override - protected String getMapserverTemplatePath() { - return RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_MAPSERVER_TEMPLATE_PATH); + return RiverUtils.getXPathString(XPATH_FLOODMAP_VELOCITY_LOGFILE); } /** @@ -263,13 +265,12 @@ @Override protected String getMapfilePath() { - return RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_MAPFILE_PATH); + return RiverUtils.getXPathString(RiverUtils.XPATH_MAPFILES_PATH) + + "/" + RiverUtils.getXPathString(XPATH_FLOODMAP_MAPFILE_PATH); } @Override protected String getMapfileTemplate() { - return RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_MAPFILE_TEMPLATE); + return RiverUtils.getXPathString(XPATH_FLOODMAP_MAPFILE_TEMPLATE); } } diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/utils/MapfileGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/utils/MapfileGenerator.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/MapfileGenerator.java Tue Oct 11 11:42:09 2022 +0200 @@ -37,6 +37,9 @@ */ public abstract class MapfileGenerator { + private static final String XPATH_MAPSERVER_TEMPLATES_PATH = + "/artifact-database/mapserver/templates/@path"; + public static final String WSPLGEN_RESULT_SHAPE = "wsplgen.shp"; public static final String WSPLGEN_LINES_SHAPE = "barrier_lines.shp"; public static final String WSPLGEN_POLYGONS_SHAPE = "barrier_polygons.shp"; @@ -123,15 +126,14 @@ engine.setProperty( "file.resource.loader.path", - getMapserverTemplatePath()); + RiverUtils.getXPathString(XPATH_MAPSERVER_TEMPLATES_PATH) + ); engine.init(); } protected abstract String getVelocityLogfile(); - protected abstract String getMapserverTemplatePath(); - protected VelocityContext getVelocityContext() { VelocityContext context = new VelocityContext(); @@ -213,7 +215,7 @@ { if (shapefileDirectory == null) { String path = RiverUtils.getXPathString( - RiverUtils.XPATH_FLOODMAP_SHAPEFILE_DIR); + RiverUtils.XPATH_MAPFILES_PATH); if (path != null) { shapefileDirectory = new File(path); @@ -244,7 +246,6 @@ } - protected List parseLayers(File[] dirs) { List layers = new ArrayList(); @@ -274,8 +275,6 @@ } - - /** * Creates a layer snippet which might be included in the mapfile. * diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java Tue Oct 11 11:42:09 2022 +0200 @@ -11,8 +11,6 @@ import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.MultiLineString; -import org.dive4elements.artifacts.common.utils.Config; - import org.dive4elements.river.artifacts.model.LayerInfo; import org.dive4elements.river.artifacts.model.RiverFactory; @@ -20,7 +18,7 @@ import org.dive4elements.river.model.RiverAxis; import java.io.File; -import java.io.FileNotFoundException; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -35,20 +33,14 @@ public class RiverMapfileGenerator extends MapfileGenerator { - public static final String XPATH_RIVERMAP_SHAPEFILE_DIR = - "/artifact-database/rivermap/shapefile-path/@value"; - - public static final String XPATH_RIVERMAP_VELOCITY_LOGFILE = - "/artifact-database/rivermap/velocity/logfile/@path"; + private static final String XPATH_RIVERMAP_VELOCITY_LOGFILE = + "/artifact-database/rivermap/velocity/logfile/@path"; - public static final String XPATH_RIVERMAP_MAPFILE_PATH = - "/artifact-database/rivermap/mapserver/mapfile/@path"; + private static final String XPATH_RIVERMAP_MAPFILE_PATH = + "/artifact-database/rivermap/mapfile/@path"; - public static final String XPATH_RIVERMAP_MAPFILE_TEMPLATE = - "/artifact-database/rivermap/mapserver/map-template/@path"; - - public static final String XPATH_RIVERMAP_MAPSERVER_TEMPLATE_PATH = - "/artifact-database/rivermap/mapserver/templates/@path"; + private static final String XPATH_RIVERMAP_MAPFILE_TEMPLATE = + "/artifact-database/rivermap/map-template/@path"; public static final Pattern DB_URL_PATTERN = Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z]+)"); @@ -126,9 +118,6 @@ layerInfo.setFilter("river_id = " + riverID + " and kind_id = 1"); layerInfo.setTitle(riverName + " RiverAxis"); - File layerFile = new File( - Config.getConfigDirectory().getParentFile(), - "river-" + riverName + ".map"); Template template = getTemplateByName("riveraxis-layer.vm"); if (template == null) { log.warn("Template riveraxis-layer.vm not found."); @@ -136,9 +125,12 @@ } try { + File layerFile = new File( + getShapefileBaseDir(), + "river-" + riverName + ".map"); writeLayer(layerInfo, layerFile, template); } - catch (FileNotFoundException e) { + catch (IOException e) { log.warn(e.getLocalizedMessage(), e); } } @@ -149,14 +141,9 @@ } @Override - protected String getMapserverTemplatePath() { - return RiverUtils.getXPathString( - XPATH_RIVERMAP_MAPSERVER_TEMPLATE_PATH); - } - - @Override protected String getMapfilePath() { - return RiverUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_PATH); + return RiverUtils.getXPathString(RiverUtils.XPATH_MAPFILES_PATH) + + "/" + RiverUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_PATH); } @Override diff -r 432934cda171 -r 308a0d822d18 artifacts/src/main/java/org/dive4elements/river/utils/RiverUtils.java --- a/artifacts/src/main/java/org/dive4elements/river/utils/RiverUtils.java Mon Oct 10 15:29:44 2022 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/RiverUtils.java Tue Oct 11 11:42:09 2022 +0200 @@ -81,26 +81,11 @@ public static final String XPATH_FLOODMAP_RIVER_PROJECTION = "/artifact-database/floodmap/river[@name=$name]/srid/@value"; - public static final String XPATH_FLOODMAP_SHAPEFILE_DIR = - "/artifact-database/floodmap/shapefile-path/@value"; - - public static final String XPATH_FLOODMAP_VELOCITY_LOGFILE = - "/artifact-database/floodmap/velocity/logfile/@path"; - - public static final String XPATH_FLOODMAP_MAPSERVER_URL = - "/artifact-database/floodmap/mapserver/server/@path"; + public static final String XPATH_MAPSERVER_URL = + "/artifact-database/mapserver/server/@path"; - public static final String XPATH_RIVERMAP_MAPSERVER_URL = - "/artifact-database/rivermap/mapserver/server/@path"; - - public static final String XPATH_FLOODMAP_MAPFILE_PATH = - "/artifact-database/floodmap/mapserver/mapfile/@path"; - - public static final String XPATH_FLOODMAP_MAPFILE_TEMPLATE = - "/artifact-database/floodmap/mapserver/map-template/@path"; - - public static final String XPATH_FLOODMAP_MAPSERVER_TEMPLATE_PATH = - "/artifact-database/floodmap/mapserver/templates/@path"; + public static final String XPATH_MAPFILES_PATH = + "/artifact-database/mapserver/mapfiles/@path"; public static final String CURRENT_KM = "currentKm"; @@ -631,7 +616,7 @@ * @return the URL of the user wms. */ public static String getUserWMSUrl(String artifactId) { - String url = getXPathString(XPATH_FLOODMAP_MAPSERVER_URL); + String url = getXPathString(XPATH_MAPSERVER_URL); url = url.endsWith("/") ? url + "user-wms" : url + "/" + "user-wms"; return url; @@ -639,7 +624,7 @@ public static String getRiverWMSUrl() { - String url = getXPathString(XPATH_RIVERMAP_MAPSERVER_URL); + String url = getXPathString(XPATH_MAPSERVER_URL); url = url.endsWith("/") ? url + "river-wms" : url + "/" + "river-wms"; return url; diff -r 432934cda171 -r 308a0d822d18 docker/docker-compose.yml --- a/docker/docker-compose.yml Mon Oct 10 15:29:44 2022 +0200 +++ b/docker/docker-compose.yml Tue Oct 11 11:42:09 2022 +0200 @@ -20,7 +20,7 @@ - db volumes: - ../artifacts/doc/conf:/opt/d4e/bin/conf - - mapfiles:/opt/d4e/bin + - artifacts-data:/opt/d4e/bin/artifacts-data mapserv: container_name: "d4eriver-mapserv" build: @@ -34,7 +34,8 @@ - server volumes: - ./mapserver/cgi-bin:/var/www/cgi-bin - - mapfiles:/opt/d4e/bin + - ../artifacts/doc/conf/mapserver:/opt/d4e/bin/conf/mapserver + - artifacts-data:/opt/d4e/bin/artifacts-data ports: - 8081:80 wiki: @@ -70,5 +71,5 @@ d4e_river: name: d4e_river volumes: - mapfiles: + artifacts-data: wiki-data: diff -r 432934cda171 -r 308a0d822d18 docker/mapserver/cgi-bin/river-wms --- a/docker/mapserver/cgi-bin/river-wms Mon Oct 10 15:29:44 2022 +0200 +++ b/docker/mapserver/cgi-bin/river-wms Tue Oct 11 11:42:09 2022 +0200 @@ -1,5 +1,5 @@ #!/bin/sh export LC_ALL="de_DE.UTF-8" export NLS_LANG=".AL32UTF8" -export MS_MAPFILE=/opt/d4e/bin/rivers.map +export MS_MAPFILE=/opt/d4e/bin/artifacts-data/mapserver/rivers.map /opt/mapserver/mapserv diff -r 432934cda171 -r 308a0d822d18 docker/mapserver/cgi-bin/user-wms --- a/docker/mapserver/cgi-bin/user-wms Mon Oct 10 15:29:44 2022 +0200 +++ b/docker/mapserver/cgi-bin/user-wms Tue Oct 11 11:42:09 2022 +0200 @@ -1,5 +1,5 @@ #!/bin/sh export LC_ALL="de_DE.UTF-8" export NLS_LANG=".AL32UTF8" -export MS_MAPFILE=/opt/d4e/bin/flys.map +export MS_MAPFILE=/opt/d4e/bin/artifacts-data/mapserver/artifact.map /opt/mapserver/mapserv