diff flys-artifacts/src/main/java/de/intevation/flys/mapserver/RiverMapfileGenerator.java @ 5022:a9243df307b1 mapgenfix

Move all classes of mapfile generation to de.intevation.flys.mapserver package.
author Christian Lins <christian.lins@intevation.de>
date Tue, 19 Feb 2013 13:41:20 +0100
parents
children 61bf64b102bc
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/mapserver/RiverMapfileGenerator.java	Tue Feb 19 13:41:20 2013 +0100
@@ -0,0 +1,144 @@
+package de.intevation.flys.mapserver;
+
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.LineString;
+
+import de.intevation.flys.artifacts.model.LayerInfo;
+import de.intevation.flys.artifacts.model.RiverFactory;
+
+import de.intevation.flys.model.River;
+import de.intevation.flys.model.RiverAxis;
+import de.intevation.flys.utils.FLYSUtils;
+import de.intevation.flys.utils.MapUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import java.util.regex.Pattern;
+
+import org.apache.log4j.Logger;
+
+import org.apache.velocity.Template;
+
+public class RiverMapfileGenerator extends MapfileGenerator {
+
+    public static final String XPATH_RIVERMAP_RIVER_PROJECTION =
+            "/artifact-database/rivermap/river[@name=$name]/srid/@value";
+
+    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";
+
+    public static final String XPATH_RIVERMAP_MAPSERVER_URL =
+            "/artifact-database/rivermap/mapserver/server/@path";
+
+    public static final String XPATH_RIVERMAP_MAPFILE_PATH =
+            "/artifact-database/rivermap/mapserver/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";
+
+    public static final Pattern DB_URL_PATTERN =
+        Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z]+)");
+
+    public static final Pattern DB_PSQL_URL_PATTERN =
+        Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z0-9]+)");
+
+    private static Logger logger = Logger.getLogger(RiverMapfileGenerator.class);
+
+    /**
+     * Generate river axis mapfile.
+     */
+    @Override
+    public void generate() {
+        logger.debug("generate()");
+
+        List<River>  rivers     = RiverFactory.getRivers();
+        List<String> riverFiles = new ArrayList<String>();
+
+        for (River river : rivers) {
+            // We expect that every river has only one RiverAxis.
+            // This is not correct but currently the case here, see
+            // RiverAxis.java.
+            List<RiverAxis> riverAxis = RiverAxis.getRiverAxis(river.getName());
+            if (riverAxis == null) {
+                logger.warn("River " + river.getName() + " has no river axis!");
+                continue;
+            }
+            LineString geom = riverAxis.get(0).getGeom();
+            Envelope extent = geom.getEnvelopeInternal();
+
+            createRiverAxisLayer(
+                    river.getName(),
+                    river.getId(),
+                    Integer.toString(geom.getSRID()),
+                    extent.getMinX() + " " +
+                    extent.getMinY() + " " +
+                    extent.getMaxX() + " " +
+                    extent.getMaxY());
+
+            riverFiles.add("river-" + river.getName() + ".map");
+        }
+        writeMapfile(riverFiles);
+    }
+
+    protected void createRiverAxisLayer(String riverName, int riverID, String srid, String extend) {
+        LayerInfo layerInfo = new LayerInfo();
+        layerInfo.setName(riverName);
+        layerInfo.setConnection(MapUtils.getConnection());
+        layerInfo.setConnectionType(MapUtils.getConnectionType());
+        layerInfo.setSrid(srid);
+        layerInfo.setExtent(extend);
+        layerInfo.setType("line");
+        layerInfo.setData("geom FROM river_axes");      // FIXME: Use templates for that
+        layerInfo.setFilter("river_id = " + riverID);
+        layerInfo.setTitle(riverName + " RiverAxis");
+
+        File layerFile = new File("river-" + riverName + ".map");
+        Template template = getTemplateByName("riveraxis-layer.vm");
+        if (template == null) {
+            logger.warn("Template riveraxis-layer.vm not found.");
+            return;
+        }
+
+        try {
+            writeLayer(layerInfo, layerFile, template);
+        }
+        catch (FileNotFoundException e) {
+            logger.warn(e.getLocalizedMessage(), e);
+        }
+    }
+
+    @Override
+    protected String getVelocityLogfile() {
+        return FLYSUtils.getXPathString(XPATH_RIVERMAP_VELOCITY_LOGFILE);
+    }
+
+    @Override
+    protected String getMapserverTemplatePath() {
+        return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPSERVER_TEMPLATE_PATH);
+    }
+
+    @Override
+    protected String getMapserverUrl() {
+        return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPSERVER_URL);
+    }
+
+    @Override
+    protected String getMapfilePath() {
+        return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_PATH);
+    }
+
+    @Override
+    protected String getMapfileTemplate() {
+        return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_TEMPLATE);
+    }
+}

http://dive4elements.wald.intevation.org