[Dive4elements-commits] [PATCH 1 of 2] Move all classes of mapfile generation to de.intevation.flys.mapserver package
Wald Commits
scm-commit at wald.intevation.org
Tue Feb 19 14:25:51 CET 2013
# HG changeset patch
# User Christian Lins <christian.lins at intevation.de>
# Date 1361277680 -3600
# Branch mapgenfix
# Node ID a9243df307b17f6f35a20a20af0f99e9776cfb4e
# Parent 7c8ce0a95a6462d47d355cdd3d884d6eed40ab24
Move all classes of mapfile generation to de.intevation.flys.mapserver package.
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/doc/conf/conf.xml
--- a/flys-artifacts/doc/conf/conf.xml Mon Feb 18 16:33:13 2013 +0100
+++ b/flys-artifacts/doc/conf/conf.xml Tue Feb 19 13:41:20 2013 +0100
@@ -225,7 +225,7 @@
<lifetime-listeners>
<listener>de.intevation.flys.artifacts.datacage.Datacage</listener>
<listener>de.intevation.flys.wsplgen.SchedulerSetup</listener>
- <listener>de.intevation.flys.artifacts.map.RiverMapfileGeneratorStarter</listener>
+ <listener>de.intevation.flys.mapserver.RiverMapfileGeneratorStarter</listener>
</lifetime-listeners>
<backend-listeners>
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/PrintMap.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/PrintMap.java Mon Feb 18 16:33:13 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-package de.intevation.flys.artifacts.map;
-
-import java.awt.Color;
-import java.awt.Rectangle;
-
-import java.io.File;
-import java.io.IOException;
-
-import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
-
-import java.util.List;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-
-import javax.imageio.ImageIO;
-
-
-import org.geotools.data.ows.Layer;
-import org.geotools.data.ows.WMSCapabilities;
-import org.geotools.data.wms.WebMapServer;
-import org.geotools.geometry.jts.ReferencedEnvelope;
-import org.geotools.map.MapContext;
-import org.geotools.map.WMSMapLayer;
-import org.geotools.ows.ServiceException;
-import org.geotools.renderer.lite.StreamingRenderer;
-import org.geotools.renderer.GTRenderer;
-
-
-public class PrintMap {
-
- public static final String DEFAULT_WMS = "http://map1.naturschutz.rlp.de/service_lanis/mod_wms/wms_getmap.php?mapfile=group_gdide&REQUEST=GetCapabilities&SERVICE=WMS";
- public static final String DEFAULT_OUTFILE = "~/map.jpeg";
-
- public static final String MAPSERVER = System.getProperty("wms", DEFAULT_WMS);
- public static final String MAP_IMAGE = System.getProperty("outfile", DEFAULT_OUTFILE);
-
-
- public static void main(String[] args) {
- System.out.println("-> start PrintMap");
- System.out.println(" -> Print layers of WMS: " + MAPSERVER);
-
- try {
- WebMapServer server = getMapserver();
- WMSMapLayer[] wmsLayer = getWMSLayers(server);
-
- MapContext mapcontent = new MapContext( wmsLayer );
- mapcontent.setTitle(" NEW MAP CONTENT TITLE ");
-
- printMap(mapcontent);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
-
- System.out.println("-> finished PrintMap");
- }
-
-
- public static void printMap(MapContext map) throws Exception {
- int imageWidth = 600;
-
- GTRenderer renderer = new StreamingRenderer();
- renderer.setContext(map);
-
- Rectangle imageBounds = null;
- ReferencedEnvelope mapBounds = null;
-
- try {
- mapBounds = map.getLayerBounds();
- double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0);
- imageBounds = new Rectangle(
- 0, 0,
- imageWidth,
- (int) Math.round(imageWidth * heightToWidth));
-
- }
- catch (Exception e) {
- // failed to access map layers
- throw new RuntimeException(e);
- }
-
- BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
- Graphics2D gr = image.createGraphics();
- gr.setPaint(Color.WHITE);
- gr.fill(imageBounds);
-
- try {
- renderer.paint(gr, imageBounds, mapBounds);
- File fileToSave = new File(MAP_IMAGE);
- ImageIO.write(image, "jpeg", fileToSave);
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
-
- public static WebMapServer getMapserver() throws MalformedURLException, IOException, ServiceException {
- return new WebMapServer(getServerUrl());
- }
-
-
- public static URL getServerUrl() throws MalformedURLException {
- return new URL(MAPSERVER);
- }
-
-
- public static WMSMapLayer[] getWMSLayers(WebMapServer server) {
- if (server == null) {
- System.out.println("WebMapServer == null");
- throw new RuntimeException("WebMapServer == null");
- }
-
- WMSCapabilities capabilities = server.getCapabilities();
-
- List<Layer> layers = capabilities.getLayerList();
- WMSMapLayer[] wmslayers = new WMSMapLayer[layers.size()];
-
- for (int i = 0, L = layers.size(); i < L; i++) {
- Layer l = layers.get(i);
-
- System.out.println(" -> add layer: " + l);
- wmslayers[i] = new WMSMapLayer(server, l);
- }
-
- return wmslayers;
- }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/RiverMapfileGeneratorStarter.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/RiverMapfileGeneratorStarter.java Mon Feb 18 16:33:13 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-package de.intevation.flys.artifacts.map;
-
-import de.intevation.artifactdatabase.LifetimeListener;
-import de.intevation.artifacts.GlobalContext;
-import de.intevation.flys.utils.RiverMapfileGenerator;
-
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-
-/**
- * LifetimeListener that creates a Mapfile containing river axis layers.
- * The listener is called when the server has completed its startup.
- *
- * @author <a href="mailto:christian.lins at intevation.de">Christian Lins</a>
- */
-public class RiverMapfileGeneratorStarter implements LifetimeListener {
-
- private static Logger logger = Logger.getLogger(RiverMapfileGeneratorStarter.class);
-
- @Override
- public void setup(Document document) {
- // Nothing to setup here
- }
-
- /**
- * Calls RiverMapfileGenerator.generate().
- */
- @Override
- public void systemUp(GlobalContext globalContext) {
- logger.debug("systemUp()");
-
- RiverMapfileGenerator fmfg = new RiverMapfileGenerator();
- fmfg.generate();
- }
-
- @Override
- public void systemDown(GlobalContext globalContext) {
- // No, we're not cleaning up our generated mapfile
- }
-
-}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java Mon Feb 18 16:33:13 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FileUploadService.java Tue Feb 19 13:41:20 2013 +0100
@@ -6,7 +6,9 @@
import de.intevation.artifacts.common.utils.FileTools;
import de.intevation.artifacts.common.utils.XMLUtils;
import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
+import de.intevation.flys.mapserver.ArtifactMapfileGenerator;
import de.intevation.flys.utils.FLYSUtils;
+import de.intevation.flys.utils.FileUtils;
import java.io.File;
import java.io.FileOutputStream;
@@ -60,14 +62,17 @@
FLYSUtils.XPATH_FLOODMAP_SHAPEFILE_DIR);
File artifactDir = FileTools.getDirectory(shapePath, uuid);
- FileOutputStream fos =
- new FileOutputStream(
- new File(artifactDir, "user-rgd.zip"));
+ File archive = new File(artifactDir, "user-rgd.zip");
+ FileOutputStream fos = new FileOutputStream(archive);
try {
fos.write(fileData);
// Write operation successful
status.setTextContent("Upload erfolgreich!"); // TODO: i18n
+
+ FileUtils.extractZipfile(archive, artifactDir);
+ ArtifactMapfileGenerator amfg = new ArtifactMapfileGenerator();
+ amfg.generate();
}
finally {
fos.close();
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Mon Feb 18 16:33:13 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Tue Feb 19 13:41:20 2013 +0100
@@ -11,8 +11,8 @@
import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.GlobalContext;
import de.intevation.artifacts.common.utils.FileTools;
+import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.access.RangeAccess;
-import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.context.FLYSContext;
import de.intevation.flys.artifacts.model.CalculationMessage;
import de.intevation.flys.artifacts.model.CalculationResult;
@@ -24,14 +24,15 @@
import de.intevation.flys.artifacts.model.map.WSPLGENReportFacet;
import de.intevation.flys.artifacts.resources.Resources;
import de.intevation.flys.exports.WstWriter;
+import de.intevation.flys.mapserver.ArtifactMapfileGenerator;
+import de.intevation.flys.mapserver.MapfileGenerator;
import de.intevation.flys.model.CrossSectionTrack;
import de.intevation.flys.model.DGM;
import de.intevation.flys.model.Floodplain;
import de.intevation.flys.model.RiverAxis;
-import de.intevation.flys.utils.ArtifactMapfileGenerator;
import de.intevation.flys.utils.FLYSUtils;
+import de.intevation.flys.utils.FileUtils;
import de.intevation.flys.utils.GeometryUtils;
-import de.intevation.flys.utils.MapfileGenerator;
import de.intevation.flys.wsplgen.FacetCreator;
import de.intevation.flys.wsplgen.JobObserver;
import de.intevation.flys.wsplgen.Scheduler;
@@ -56,7 +57,7 @@
implements FacetTypes
{
/** The logger that is used in this state. */
- private static Logger logger = Logger.getLogger(FloodMapState.class);
+ public static Logger logger = Logger.getLogger(FloodMapState.class);
public static final String KEEP_ARTIFACT_DIR =
@@ -489,15 +490,7 @@
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;
- }
+ FileUtils.extractZipfile(archive, dir);
job.addLin(dir + "/" + WSPLGEN_USER_SHAPE);
facetCreator.createUserShapeFacet();
@@ -844,43 +837,5 @@
}
}
}
-
-
- 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() {
- @Override
- 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 :
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java Mon Feb 18 16:33:13 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java Tue Feb 19 13:41:20 2013 +0100
@@ -16,7 +16,7 @@
import de.intevation.flys.artifacts.model.map.WMSLayerFacet;
import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet;
import de.intevation.flys.collections.FLYSArtifactCollection;
-import de.intevation.flys.utils.ArtifactMapfileGenerator;
+import de.intevation.flys.mapserver.ArtifactMapfileGenerator;
import de.intevation.flys.utils.GeometryUtils;
import de.intevation.flys.utils.ThemeUtil;
@@ -37,26 +37,17 @@
private static Logger logger = Logger.getLogger(MapGenerator.class);
protected FLYSArtifactCollection collection;
-
protected Artifact master;
-
protected Settings settings;
-
protected Document request;
-
protected OutputStream out;
-
protected CallContext context;
-
protected List<WMSLayerFacet> layers;
-
protected Envelope maxExtent;
protected Envelope initialExtent;
-
protected String srid;
-
@Override
public void init(Document request, OutputStream out, CallContext context) {
logger.debug("MapGenerator.init");
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/mapserver/ArtifactMapfileGenerator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/mapserver/ArtifactMapfileGenerator.java Tue Feb 19 13:41:20 2013 +0100
@@ -0,0 +1,342 @@
+package de.intevation.flys.mapserver;
+
+import de.intevation.artifacts.CallContext;
+import de.intevation.flys.artifacts.FLYSArtifact;
+import de.intevation.flys.artifacts.access.RiverAccess;
+import de.intevation.flys.artifacts.model.LayerInfo;
+import de.intevation.flys.artifacts.model.map.WMSDBLayerFacet;
+import de.intevation.flys.artifacts.model.map.WMSLayerFacet;
+import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet;
+import de.intevation.flys.artifacts.resources.Resources;
+import de.intevation.flys.utils.FLYSUtils;
+import de.intevation.flys.utils.GeometryUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.velocity.Template;
+import org.geotools.data.shapefile.ShpFiles;
+import org.geotools.data.shapefile.shp.ShapefileHeader;
+import org.geotools.data.shapefile.shp.ShapefileReader;
+
+public class ArtifactMapfileGenerator extends MapfileGenerator {
+
+ private static Logger logger = Logger.getLogger(ArtifactMapfileGenerator.class);
+
+ @Override
+ protected String getVelocityLogfile() {
+ return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_VELOCITY_LOGFILE);
+ }
+
+ @Override
+ protected String getMapserverTemplatePath() {
+ return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPSERVER_TEMPLATE_PATH);
+ }
+
+ @Override
+ protected String getMapserverUrl() {
+ return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPSERVER_URL);
+ }
+
+ /**
+ * Method which starts searching for meta information file and mapfile
+ * generation.
+ */
+ @Override
+ public void generate() throws IOException
+ {
+ File[] userDirs = getUserDirs();
+ List<String> layers = parseLayers(userDirs);
+ logger.info("Found " + layers.size() + " layers for user mapfile.");
+
+ writeMapfile(layers);
+ }
+
+ /**
+ * Creates a layer file used for Mapserver's mapfile which represents the
+ * floodmap.
+ *
+ * @param flys The FLYSArtifact that owns <i>wms</i>.
+ * @param wms The WMSLayerFacet that contains information for the layer.
+ */
+ public void createUeskLayer(
+ FLYSArtifact flys,
+ WSPLGENLayerFacet wms,
+ String style,
+ CallContext context
+ ) throws FileNotFoundException, IOException
+ {
+ logger.debug("createUeskLayer");
+
+ LayerInfo layerinfo = new LayerInfo();
+ layerinfo.setName(MS_WSPLGEN_PREFIX + flys.identifier());
+ layerinfo.setType("POLYGON");
+ layerinfo.setDirectory(flys.identifier());
+ layerinfo.setData(WSPLGEN_RESULT_SHAPE);
+ layerinfo.setTitle(Resources.getMsg(Resources.getLocale(context.getMeta()),
+ "floodmap.uesk",
+ "Floodmap"));
+ layerinfo.setStyle(style);
+ RiverAccess access = new RiverAccess(flys);
+ String river = access.getRiver();
+ layerinfo.setSrid(FLYSUtils.getRiverDGMSrid(river));
+
+ String name = MS_LAYER_PREFIX + wms.getName();
+
+ Template template = getTemplateByName(WSPLGEN_LAYER_TEMPLATE);
+ if (template == null) {
+ logger.warn("Template '" + WSPLGEN_LAYER_TEMPLATE + "' found.");
+ return;
+ }
+
+ try {
+ File dir = new File(getShapefileBaseDir(), flys.identifier());
+ writeLayer(layerinfo, new File(dir, name), template);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ logger.warn("Unable to write layer: " + name);
+ }
+ }
+
+
+ /**
+ * Creates a layer file used for Mapserver's mapfile which represents the
+ * user defined barriers.
+ *
+ * @param flys The FLYSArtifact that owns <i>wms</i>.
+ * @param wms The WMSLayerFacet that contains information for the layer.
+ */
+ public void createBarriersLayer(FLYSArtifact flys, WMSLayerFacet wms)
+ throws FileNotFoundException, IOException
+ {
+ logger.debug("createBarriersLayer");
+
+ //String uuid = flys.identifier();
+ //File dir = new File(getShapefileBaseDir(), uuid);
+
+ createBarriersLineLayer(flys, wms);
+ createBarriersPolygonLayer(flys, wms);
+ }
+
+
+ protected void createBarriersLineLayer(
+ FLYSArtifact flys,
+ WMSLayerFacet wms
+ )
+ throws FileNotFoundException, IOException
+ {
+ String uuid = flys.identifier();
+ String group = MS_BARRIERS_PREFIX + uuid;
+ String groupTitle = "I18N_BARRIERS_TITLE";
+
+ File dir = new File(getShapefileBaseDir(), uuid);
+ File test = new File(dir, WSPLGEN_LINES_SHAPE);
+
+ if (!test.exists() || !test.canRead()) {
+ logger.debug("No barrier line layer existing.");
+ return;
+ }
+
+ LayerInfo lineInfo = new LayerInfo();
+ lineInfo.setName(MS_LINE_PREFIX + uuid);
+ lineInfo.setType("LINE");
+ lineInfo.setDirectory(uuid);
+ lineInfo.setData(WSPLGEN_LINES_SHAPE);
+ lineInfo.setTitle("I18N_LINE_SHAPE");
+ lineInfo.setGroup(group);
+ lineInfo.setGroupTitle(groupTitle);
+ lineInfo.setSrid(wms.getSrid());
+
+ String nameLines = MS_LAYER_PREFIX + wms.getName() + "-lines";
+
+ Template tpl = getTemplateByName(SHP_LAYER_TEMPLATE);
+ if (tpl == null) {
+ logger.warn("Template '" + SHP_LAYER_TEMPLATE + "' found.");
+ return;
+ }
+
+ try {
+ writeLayer(lineInfo, new File(dir, nameLines), tpl);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ logger.warn("Unable to write layer: " + nameLines);
+ }
+ }
+
+ protected void createBarriersPolygonLayer(
+ FLYSArtifact flys,
+ WMSLayerFacet wms
+ )
+ throws FileNotFoundException, IOException
+ {
+ String uuid = flys.identifier();
+ String group = uuid + MS_BARRIERS_PREFIX;
+ String groupTitle = "I18N_BARRIERS_TITLE";
+
+ File dir = new File(getShapefileBaseDir(), uuid);
+ File test = new File(dir, WSPLGEN_POLYGONS_SHAPE);
+
+ if (!test.exists() || !test.canRead()) {
+ logger.debug("No barrier line layer existing.");
+ return;
+ }
+
+ LayerInfo polygonInfo = new LayerInfo();
+ polygonInfo.setName(MS_POLYGONS_PREFIX + uuid);
+ polygonInfo.setType("POLYGON");
+ polygonInfo.setDirectory(uuid);
+ polygonInfo.setData(WSPLGEN_POLYGONS_SHAPE);
+ polygonInfo.setTitle("I18N_POLYGON_SHAPE");
+ polygonInfo.setGroup(group);
+ polygonInfo.setGroupTitle(groupTitle);
+ polygonInfo.setSrid(wms.getSrid());
+
+ String namePolygons = MS_LAYER_PREFIX + wms.getName() + "-polygons";
+
+ Template tpl = getTemplateByName(SHP_LAYER_TEMPLATE);
+ if (tpl == null) {
+ logger.warn("Template '" + SHP_LAYER_TEMPLATE + "' found.");
+ return;
+ }
+
+ try {
+ writeLayer(polygonInfo, new File(dir, namePolygons), tpl);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ logger.warn("Unable to write layer: " + namePolygons);
+ }
+ }
+
+
+ /**
+ * Creates a layer file used for Mapserver's mapfile which represents the
+ * shape files uploaded by the user.
+ *
+ * @param flys The FLYSArtifact that owns <i>wms</i>.
+ * @param wms The WMSLayerFacet that contains information for the layer.
+ */
+ public void createUserShapeLayer(FLYSArtifact flys, WMSLayerFacet wms)
+ throws FileNotFoundException, IOException
+ {
+ logger.debug("createUserShapeLayer");
+
+ String uuid = flys.identifier();
+ File dir = new File(getShapefileBaseDir(), uuid);
+ File test = new File(dir, WSPLGEN_USER_SHAPE);
+
+ if (!test.exists() || !test.canRead()) {
+ logger.debug("No user layer existing.");
+ return;
+ }
+
+ File userShape = new File(dir, WSPLGEN_USER_SHAPE);
+ ShpFiles sf = new ShpFiles(userShape);
+ ShapefileReader sfr = new ShapefileReader(sf, true, false, null);
+ ShapefileHeader sfh = sfr.getHeader();
+
+ String group = uuid + MS_USERSHAPE_PREFIX;
+ String groupTitle = "I18N_USER_SHAPE_TITLE";
+
+ LayerInfo info = new LayerInfo();
+ info.setName(MS_USERSHAPE_PREFIX + uuid);
+ if (sfh.getShapeType().isLineType()) {
+ info.setType("LINE");
+ }
+ else if (sfh.getShapeType().isPolygonType()) {
+ info.setType("POLYGON");
+ }
+ else {
+ return;
+ }
+ info.setDirectory(uuid);
+ info.setData(WSPLGEN_USER_SHAPE);
+ info.setTitle("I18N_USER_SHAPE");
+ info.setGroup(group);
+ info.setGroupTitle(groupTitle);
+ info.setSrid(wms.getSrid());
+
+ String nameUser = MS_LAYER_PREFIX + wms.getName();
+
+ Template tpl = getTemplateByName(SHP_LAYER_TEMPLATE);
+ if (tpl == null) {
+ logger.warn("Template '" + SHP_LAYER_TEMPLATE + "' found.");
+ return;
+ }
+
+ try {
+ writeLayer(info, new File(dir, nameUser), tpl);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ logger.warn("Unable to write layer: " + nameUser);
+ }
+
+ }
+
+
+ /**
+ * Creates a layer file used for Mapserver's mapfile which represents
+ * geometries from database.
+ *
+ * @param flys The FLYSArtifact that owns <i>wms</i>.
+ * @param wms The WMSLayerFacet that contains information for the layer.
+ */
+ public void createDatabaseLayer(
+ FLYSArtifact flys,
+ WMSDBLayerFacet wms,
+ String style
+ )
+ throws FileNotFoundException, IOException
+ {
+ logger.debug("createDatabaseLayer");
+
+ LayerInfo layerinfo = new LayerInfo();
+ layerinfo.setName(wms.getName() + "-" + flys.identifier());
+ layerinfo.setType(wms.getGeometryType());
+ layerinfo.setFilter(wms.getFilter());
+ layerinfo.setData(wms.getData());
+ layerinfo.setTitle(wms.getDescription());
+ layerinfo.setStyle(style);
+ if(wms.getExtent() != null) {
+ layerinfo.setExtent(GeometryUtils.jtsBoundsToOLBounds(wms.getExtent()));
+ }
+ layerinfo.setConnection(wms.getConnection());
+ layerinfo.setConnectionType(wms.getConnectionType());
+ layerinfo.setLabelItem(wms.getLabelItem());
+ layerinfo.setSrid(wms.getSrid());
+
+ String name = MS_LAYER_PREFIX + wms.getName();
+
+ Template template = getTemplateByName(DB_LAYER_TEMPLATE);
+ if (template == null) {
+ logger.warn("Template '" + DB_LAYER_TEMPLATE + "' found.");
+ return;
+ }
+
+ try {
+ File dir = new File(getShapefileBaseDir(), flys.identifier());
+ writeLayer(layerinfo, new File(dir, name), template);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ logger.warn("Unable to write layer: " + name);
+ }
+ }
+
+ @Override
+ protected String getMapfilePath() {
+ return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPFILE_PATH);
+ }
+
+ @Override
+ protected String getMapfileTemplate() {
+ return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPFILE_TEMPLATE);
+ }
+
+}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/mapserver/MapfileGenerator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/mapserver/MapfileGenerator.java Tue Feb 19 13:41:20 2013 +0100
@@ -0,0 +1,382 @@
+package de.intevation.flys.mapserver;
+
+import de.intevation.artifacts.common.utils.Config;
+import de.intevation.flys.artifacts.model.LayerInfo;
+import de.intevation.flys.utils.FLYSUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+
+/**
+ * This class iterates over a bunch of directories, searches for meta
+ * information coresponding to shapefiles and creates a mapfile which is used by
+ * a <i>MapServer</i>.
+ *
+ * @author <a href="mailto:ingo.weinzierl at intevation.de">Ingo Weinzierl</a>
+ */
+public abstract class MapfileGenerator
+{
+ 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";
+ public static final String WSPLGEN_USER_SHAPE = "user-rgd.shp";
+
+ public static final String WSPLGEN_LAYER_TEMPLATE = "wsplgen_layer.vm";
+ public static final String SHP_LAYER_TEMPLATE = "shapefile_layer.vm";
+ public static final String DB_LAYER_TEMPLATE = "db_layer.vm";
+ public static final String RIVERAXIS_LAYER_TEMPLATE = "riveraxis-layer.vm";
+
+ public static final String MS_WSPLGEN_PREFIX = "wsplgen-";
+ public static final String MS_BARRIERS_PREFIX = "barriers-";
+ public static final String MS_LINE_PREFIX = "lines-";
+ public static final String MS_POLYGONS_PREFIX = "polygons-";
+ public static final String MS_LAYER_PREFIX = "ms_layer-";
+ public static final String MS_USERSHAPE_PREFIX = "user-";
+
+ private static Logger logger = Logger.getLogger(MapfileGenerator.class);
+
+ private File shapefileDirectory;
+
+ private VelocityEngine velocityEngine;
+
+
+ protected MapfileGenerator() {
+ }
+
+
+ /**
+ * Method to check the existance of a template file.
+ *
+ * @param templateID The name of a template.
+ * @return true, of the template exists - otherwise false.
+ */
+ public boolean templateExists(String templateID){
+ Template template = getTemplateByName(templateID);
+ return template != null;
+ }
+
+
+ public abstract void generate() throws Exception;
+
+
+ /**
+ * Returns the VelocityEngine used for the template mechanism.
+ *
+ * @return the velocity engine.
+ */
+ protected VelocityEngine getVelocityEngine() {
+ if (velocityEngine == null) {
+ velocityEngine = new VelocityEngine();
+ try {
+ setupVelocity(velocityEngine);
+ }
+ catch (Exception e) {
+ logger.error(e, e);
+ return null;
+ }
+ }
+ return velocityEngine;
+ }
+
+
+ /**
+ * Initialize velocity.
+ *
+ * @param engine Velocity engine.
+ * @throws Exception if an error occured while initializing velocity.
+ */
+ protected void setupVelocity(VelocityEngine engine)
+ throws Exception
+ {
+ engine.setProperty(
+ "input.encoding",
+ "UTF-8");
+
+ engine.setProperty(
+ RuntimeConstants.RUNTIME_LOG,
+ getVelocityLogfile());
+
+ engine.setProperty(
+ "resource.loader",
+ "file");
+
+ engine.setProperty(
+ "file.resource.loader.path",
+ getMapserverTemplatePath());
+
+ engine.init();
+ }
+
+ protected abstract String getVelocityLogfile();
+
+ protected abstract String getMapserverTemplatePath();
+
+ protected abstract String getMapserverUrl();
+
+ protected VelocityContext getVelocityContext() {
+ VelocityContext context = new VelocityContext();
+
+ try {
+ context.put("MAPSERVERURL",
+ getMapserverUrl());
+ context.put("SHAPEFILEPATH",
+ getShapefileBaseDir().getCanonicalPath());
+ context.put("CONFIGDIR",
+ Config.getConfigDirectory().getCanonicalPath());
+ }
+ catch (FileNotFoundException fnfe) {
+ // this is bad
+ logger.warn(fnfe, fnfe);
+ }
+ catch (IOException ioe) {
+ // this is also bad
+ logger.warn(ioe, ioe);
+ }
+
+ return context;
+ }
+
+
+ /**
+ * Returns a template specified by <i>model</i>.
+ *
+ * @param model The name of the template.
+ * @return a template.
+ */
+ protected Template getTemplateByName(String model) {
+ if (model.indexOf(".vm") < 0) {
+ model = model.concat(".vm");
+ }
+
+ try {
+ VelocityEngine engine = getVelocityEngine();
+ if (engine == null) {
+ logger.error("Error while fetching VelocityEngine.");
+ return null;
+ }
+
+ return engine.getTemplate(model);
+ }
+ catch (Exception e) {
+ logger.warn(e, e);
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Returns the mapfile template.
+ *
+ * @return the mapfile template.
+ * @throws Exception if an error occured while reading the configuration.
+ */
+ protected Template getMapfileTemplateObj()
+ throws Exception
+ {
+ String mapfileName = getMapfileTemplate();
+ return getTemplateByName(mapfileName);
+ }
+
+ protected abstract String getMapfilePath();
+
+ protected abstract String getMapfileTemplate();
+
+
+ /**
+ * Returns the base directory storing the shapefiles.
+ *
+ * @return the shapefile base directory.
+ *
+ * @throws FileNotFoundException if no shapefile path is found or
+ * configured.
+ */
+ public File getShapefileBaseDir()
+ throws FileNotFoundException, IOException
+ {
+ if (shapefileDirectory == null) {
+ String path = FLYSUtils.getXPathString(
+ FLYSUtils.XPATH_FLOODMAP_SHAPEFILE_DIR);
+
+ if (path != null) {
+ shapefileDirectory = new File(path);
+ }
+
+ if (shapefileDirectory == null) {
+ throw new FileNotFoundException("No shapefile directory given");
+ }
+
+ if (!shapefileDirectory.exists()) {
+ shapefileDirectory.mkdirs();
+ }
+ }
+
+ return shapefileDirectory;
+ }
+
+
+ protected File[] getUserDirs()
+ throws FileNotFoundException, IOException
+ {
+ File baseDir = getShapefileBaseDir();
+ File[] artifactDirs = baseDir.listFiles();
+
+ // TODO ONLY RETURN DIRECTORIES OF THE SPECIFIED USER
+
+ return artifactDirs;
+ }
+
+
+ protected List<String> parseLayers(File[] dirs) {
+ List<String> layers = new ArrayList<String>();
+
+ for (File dir: dirs) {
+ File[] layerFiles = dir.listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(File directory, String name) {
+ return name.startsWith(MS_LAYER_PREFIX);
+ }
+ });
+
+ for (File layer: layerFiles) {
+ try {
+ layers.add(layer.getCanonicalPath());
+ }
+ catch (IOException ioe) {
+ logger.warn(ioe, ioe);
+ }
+ }
+ }
+
+ return layers;
+ }
+
+
+ /**
+ * Creates a layer snippet which might be included in the mapfile.
+ *
+ * @param layerinfo A LayerInfo object that contains all necessary
+ * information to build a Mapserver LAYER section.
+ * @param dir The base dir for the LAYER snippet.
+ * @param filename The name of the file that is written.
+ * @param tpl The Velocity template which is used to create the LAYER
+ * section.
+ */
+ protected void writeLayer(
+ LayerInfo layerInfo,
+ File layerFile,
+ Template tpl
+ )
+ throws FileNotFoundException
+ {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Write layer for:");
+ logger.debug(" directory/file: " + layerFile.getName());
+ }
+
+ Writer writer = null;
+
+ try {
+ writer = new FileWriter(layerFile);
+
+ VelocityContext context = getVelocityContext();
+ context.put("LAYER", layerInfo);
+
+ tpl.merge(context, writer);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ }
+ catch (IOException ioe) {
+ logger.error(ioe, ioe);
+ }
+ catch (Exception e) {
+ logger.error(e, e);
+ }
+ finally {
+ try {
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ catch (IOException ioe) {
+ logger.debug(ioe, ioe);
+ }
+ }
+ }
+
+
+ /**
+ * Creates a mapfile with the layer information stored in <i>layers</i>.
+ *
+ * @param layers Layer information.
+ */
+ protected void writeMapfile(List<String> layers) {
+ String tmpMapName = "mapfile" + new Date().getTime();
+
+ File mapfile = new File(getMapfilePath());
+
+ File tmp = null;
+ Writer writer = null;
+
+ try {
+ tmp = new File(mapfile.getParent(), tmpMapName);
+ tmp.createNewFile();
+
+ writer = new FileWriter(tmp);
+
+ VelocityContext context = getVelocityContext();
+ context.put("LAYERS", layers);
+
+ Template mapTemplate = getMapfileTemplateObj();
+ if (mapTemplate == null) {
+ logger.warn("No mapfile template found.");
+ return;
+ }
+
+ mapTemplate.merge(context, writer);
+
+ // we need to create a temporary mapfile first und rename it into
+ // real mapfile because we don't run into race conditions on this
+ // way. (iw)
+ tmp.renameTo(mapfile);
+ }
+ catch (FileNotFoundException fnfe) {
+ logger.error(fnfe, fnfe);
+ }
+ catch (IOException ioe) {
+ logger.error(ioe, ioe);
+ }
+ catch (Exception e) {
+ logger.error(e, e);
+ }
+ finally {
+ try {
+ if (writer != null) {
+ writer.close();
+ }
+
+ if (tmp.exists()) {
+ tmp.delete();
+ }
+ }
+ catch (IOException ioe) {
+ logger.debug(ioe, ioe);
+ }
+ }
+ }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/mapserver/RiverMapfileGenerator.java
--- /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);
+ }
+}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/mapserver/RiverMapfileGeneratorStarter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/mapserver/RiverMapfileGeneratorStarter.java Tue Feb 19 13:41:20 2013 +0100
@@ -0,0 +1,40 @@
+package de.intevation.flys.mapserver;
+
+import de.intevation.artifactdatabase.LifetimeListener;
+import de.intevation.artifacts.GlobalContext;
+
+import org.apache.log4j.Logger;
+import org.w3c.dom.Document;
+
+/**
+ * LifetimeListener that creates a Mapfile containing river axis layers.
+ * The listener is called when the server has completed its startup.
+ *
+ * @author <a href="mailto:christian.lins at intevation.de">Christian Lins</a>
+ */
+public class RiverMapfileGeneratorStarter implements LifetimeListener {
+
+ private static Logger logger = Logger.getLogger(RiverMapfileGeneratorStarter.class);
+
+ @Override
+ public void setup(Document document) {
+ // Nothing to setup here
+ }
+
+ /**
+ * Calls RiverMapfileGenerator.generate().
+ */
+ @Override
+ public void systemUp(GlobalContext globalContext) {
+ logger.debug("systemUp()");
+
+ RiverMapfileGenerator fmfg = new RiverMapfileGenerator();
+ fmfg.generate();
+ }
+
+ @Override
+ public void systemDown(GlobalContext globalContext) {
+ // No, we're not cleaning up our generated mapfile
+ }
+
+}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/utils/ArtifactMapfileGenerator.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/ArtifactMapfileGenerator.java Mon Feb 18 16:33:13 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,340 +0,0 @@
-package de.intevation.flys.utils;
-
-import de.intevation.artifacts.CallContext;
-import de.intevation.flys.artifacts.FLYSArtifact;
-import de.intevation.flys.artifacts.access.RiverAccess;
-import de.intevation.flys.artifacts.model.LayerInfo;
-import de.intevation.flys.artifacts.model.map.WMSDBLayerFacet;
-import de.intevation.flys.artifacts.model.map.WMSLayerFacet;
-import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet;
-import de.intevation.flys.artifacts.resources.Resources;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.geotools.data.shapefile.ShpFiles;
-import org.geotools.data.shapefile.shp.ShapefileHeader;
-import org.geotools.data.shapefile.shp.ShapefileReader;
-
-public class ArtifactMapfileGenerator extends MapfileGenerator {
-
- private static Logger logger = Logger.getLogger(ArtifactMapfileGenerator.class);
-
- @Override
- protected String getVelocityLogfile() {
- return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_VELOCITY_LOGFILE);
- }
-
- @Override
- protected String getMapserverTemplatePath() {
- return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPSERVER_TEMPLATE_PATH);
- }
-
- @Override
- protected String getMapserverUrl() {
- return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPSERVER_URL);
- }
-
- /**
- * Method which starts searching for meta information file and mapfile
- * generation.
- */
- @Override
- public void generate() throws IOException
- {
- File[] userDirs = getUserDirs();
- List<String> layers = parseLayers(userDirs);
- logger.info("Found " + layers.size() + " layers for user mapfile.");
-
- writeMapfile(layers);
- }
-
- /**
- * Creates a layer file used for Mapserver's mapfile which represents the
- * floodmap.
- *
- * @param flys The FLYSArtifact that owns <i>wms</i>.
- * @param wms The WMSLayerFacet that contains information for the layer.
- */
- public void createUeskLayer(
- FLYSArtifact flys,
- WSPLGENLayerFacet wms,
- String style,
- CallContext context
- ) throws FileNotFoundException, IOException
- {
- logger.debug("createUeskLayer");
-
- LayerInfo layerinfo = new LayerInfo();
- layerinfo.setName(MS_WSPLGEN_PREFIX + flys.identifier());
- layerinfo.setType("POLYGON");
- layerinfo.setDirectory(flys.identifier());
- layerinfo.setData(WSPLGEN_RESULT_SHAPE);
- layerinfo.setTitle(Resources.getMsg(Resources.getLocale(context.getMeta()),
- "floodmap.uesk",
- "Floodmap"));
- layerinfo.setStyle(style);
- RiverAccess access = new RiverAccess(flys);
- String river = access.getRiver();
- layerinfo.setSrid(FLYSUtils.getRiverDGMSrid(river));
-
- String name = MS_LAYER_PREFIX + wms.getName();
-
- Template template = getTemplateByName(WSPLGEN_LAYER_TEMPLATE);
- if (template == null) {
- logger.warn("Template '" + WSPLGEN_LAYER_TEMPLATE + "' found.");
- return;
- }
-
- try {
- File dir = new File(getShapefileBaseDir(), flys.identifier());
- writeLayer(layerinfo, new File(dir, name), template);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- logger.warn("Unable to write layer: " + name);
- }
- }
-
-
- /**
- * Creates a layer file used for Mapserver's mapfile which represents the
- * user defined barriers.
- *
- * @param flys The FLYSArtifact that owns <i>wms</i>.
- * @param wms The WMSLayerFacet that contains information for the layer.
- */
- public void createBarriersLayer(FLYSArtifact flys, WMSLayerFacet wms)
- throws FileNotFoundException, IOException
- {
- logger.debug("createBarriersLayer");
-
- //String uuid = flys.identifier();
- //File dir = new File(getShapefileBaseDir(), uuid);
-
- createBarriersLineLayer(flys, wms);
- createBarriersPolygonLayer(flys, wms);
- }
-
-
- protected void createBarriersLineLayer(
- FLYSArtifact flys,
- WMSLayerFacet wms
- )
- throws FileNotFoundException, IOException
- {
- String uuid = flys.identifier();
- String group = MS_BARRIERS_PREFIX + uuid;
- String groupTitle = "I18N_BARRIERS_TITLE";
-
- File dir = new File(getShapefileBaseDir(), uuid);
- File test = new File(dir, WSPLGEN_LINES_SHAPE);
-
- if (!test.exists() || !test.canRead()) {
- logger.debug("No barrier line layer existing.");
- return;
- }
-
- LayerInfo lineInfo = new LayerInfo();
- lineInfo.setName(MS_LINE_PREFIX + uuid);
- lineInfo.setType("LINE");
- lineInfo.setDirectory(uuid);
- lineInfo.setData(WSPLGEN_LINES_SHAPE);
- lineInfo.setTitle("I18N_LINE_SHAPE");
- lineInfo.setGroup(group);
- lineInfo.setGroupTitle(groupTitle);
- lineInfo.setSrid(wms.getSrid());
-
- String nameLines = MS_LAYER_PREFIX + wms.getName() + "-lines";
-
- Template tpl = getTemplateByName(SHP_LAYER_TEMPLATE);
- if (tpl == null) {
- logger.warn("Template '" + SHP_LAYER_TEMPLATE + "' found.");
- return;
- }
-
- try {
- writeLayer(lineInfo, new File(dir, nameLines), tpl);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- logger.warn("Unable to write layer: " + nameLines);
- }
- }
-
- protected void createBarriersPolygonLayer(
- FLYSArtifact flys,
- WMSLayerFacet wms
- )
- throws FileNotFoundException, IOException
- {
- String uuid = flys.identifier();
- String group = uuid + MS_BARRIERS_PREFIX;
- String groupTitle = "I18N_BARRIERS_TITLE";
-
- File dir = new File(getShapefileBaseDir(), uuid);
- File test = new File(dir, WSPLGEN_POLYGONS_SHAPE);
-
- if (!test.exists() || !test.canRead()) {
- logger.debug("No barrier line layer existing.");
- return;
- }
-
- LayerInfo polygonInfo = new LayerInfo();
- polygonInfo.setName(MS_POLYGONS_PREFIX + uuid);
- polygonInfo.setType("POLYGON");
- polygonInfo.setDirectory(uuid);
- polygonInfo.setData(WSPLGEN_POLYGONS_SHAPE);
- polygonInfo.setTitle("I18N_POLYGON_SHAPE");
- polygonInfo.setGroup(group);
- polygonInfo.setGroupTitle(groupTitle);
- polygonInfo.setSrid(wms.getSrid());
-
- String namePolygons = MS_LAYER_PREFIX + wms.getName() + "-polygons";
-
- Template tpl = getTemplateByName(SHP_LAYER_TEMPLATE);
- if (tpl == null) {
- logger.warn("Template '" + SHP_LAYER_TEMPLATE + "' found.");
- return;
- }
-
- try {
- writeLayer(polygonInfo, new File(dir, namePolygons), tpl);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- logger.warn("Unable to write layer: " + namePolygons);
- }
- }
-
-
- /**
- * Creates a layer file used for Mapserver's mapfile which represents the
- * shape files uploaded by the user.
- *
- * @param flys The FLYSArtifact that owns <i>wms</i>.
- * @param wms The WMSLayerFacet that contains information for the layer.
- */
- public void createUserShapeLayer(FLYSArtifact flys, WMSLayerFacet wms)
- throws FileNotFoundException, IOException
- {
- logger.debug("createUserShapeLayer");
-
- String uuid = flys.identifier();
- File dir = new File(getShapefileBaseDir(), uuid);
- File test = new File(dir, WSPLGEN_USER_SHAPE);
-
- if (!test.exists() || !test.canRead()) {
- logger.debug("No user layer existing.");
- return;
- }
-
- File userShape = new File(dir, WSPLGEN_USER_SHAPE);
- ShpFiles sf = new ShpFiles(userShape);
- ShapefileReader sfr = new ShapefileReader(sf, true, false, null);
- ShapefileHeader sfh = sfr.getHeader();
-
- String group = uuid + MS_USERSHAPE_PREFIX;
- String groupTitle = "I18N_USER_SHAPE_TITLE";
-
- LayerInfo info = new LayerInfo();
- info.setName(MS_USERSHAPE_PREFIX + uuid);
- if (sfh.getShapeType().isLineType()) {
- info.setType("LINE");
- }
- else if (sfh.getShapeType().isPolygonType()) {
- info.setType("POLYGON");
- }
- else {
- return;
- }
- info.setDirectory(uuid);
- info.setData(WSPLGEN_USER_SHAPE);
- info.setTitle("I18N_USER_SHAPE");
- info.setGroup(group);
- info.setGroupTitle(groupTitle);
- info.setSrid(wms.getSrid());
-
- String nameUser = MS_LAYER_PREFIX + wms.getName();
-
- Template tpl = getTemplateByName(SHP_LAYER_TEMPLATE);
- if (tpl == null) {
- logger.warn("Template '" + SHP_LAYER_TEMPLATE + "' found.");
- return;
- }
-
- try {
- writeLayer(info, new File(dir, nameUser), tpl);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- logger.warn("Unable to write layer: " + nameUser);
- }
-
- }
-
-
- /**
- * Creates a layer file used for Mapserver's mapfile which represents
- * geometries from database.
- *
- * @param flys The FLYSArtifact that owns <i>wms</i>.
- * @param wms The WMSLayerFacet that contains information for the layer.
- */
- public void createDatabaseLayer(
- FLYSArtifact flys,
- WMSDBLayerFacet wms,
- String style
- )
- throws FileNotFoundException, IOException
- {
- logger.debug("createDatabaseLayer");
-
- LayerInfo layerinfo = new LayerInfo();
- layerinfo.setName(wms.getName() + "-" + flys.identifier());
- layerinfo.setType(wms.getGeometryType());
- layerinfo.setFilter(wms.getFilter());
- layerinfo.setData(wms.getData());
- layerinfo.setTitle(wms.getDescription());
- layerinfo.setStyle(style);
- if(wms.getExtent() != null) {
- layerinfo.setExtent(GeometryUtils.jtsBoundsToOLBounds(wms.getExtent()));
- }
- layerinfo.setConnection(wms.getConnection());
- layerinfo.setConnectionType(wms.getConnectionType());
- layerinfo.setLabelItem(wms.getLabelItem());
- layerinfo.setSrid(wms.getSrid());
-
- String name = MS_LAYER_PREFIX + wms.getName();
-
- Template template = getTemplateByName(DB_LAYER_TEMPLATE);
- if (template == null) {
- logger.warn("Template '" + DB_LAYER_TEMPLATE + "' found.");
- return;
- }
-
- try {
- File dir = new File(getShapefileBaseDir(), flys.identifier());
- writeLayer(layerinfo, new File(dir, name), template);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- logger.warn("Unable to write layer: " + name);
- }
- }
-
- @Override
- protected String getMapfilePath() {
- return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPFILE_PATH);
- }
-
- @Override
- protected String getMapfileTemplate() {
- return FLYSUtils.getXPathString(FLYSUtils.XPATH_FLOODMAP_MAPFILE_TEMPLATE);
- }
-
-}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/utils/FileUtils.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/FileUtils.java Tue Feb 19 13:41:20 2013 +0100
@@ -0,0 +1,66 @@
+package de.intevation.flys.utils;
+
+import de.intevation.artifacts.common.utils.FileTools;
+import de.intevation.flys.artifacts.states.FloodMapState;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Various utility methods for handling of files and directories.
+ * @author <a href="mailto:christian.lins at intevation.de">Christian Lins</a>
+ */
+public class FileUtils {
+
+ public static boolean extractZipfile(File archive, File dir) {
+ try {
+ File tmpDir = new File(dir, "usr_tmp");
+ FileTools.extractArchive(archive, tmpDir);
+ FileUtils.moveFiles(tmpDir, dir);
+
+ return true;
+ }
+ catch (IOException ioe) {
+ FloodMapState.logger.warn("Zip archive " + dir + "/" + FloodMapState.WSPLGEN_USER_ZIP + " could not be extracted.");
+ return false;
+ }
+ }
+
+ public static void moveFiles(File source, final File target)
+ throws IOException
+ {
+ if (!source.exists()) {
+ return;
+ }
+ if (!target.exists()) {
+ target.mkdir();
+ }
+ FileTools.walkTree(source, new FileTools.FileVisitor() {
+ @Override
+ 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, FloodMapState.WSPLGEN_USER_FILENAME + "." + suffix));
+ }
+ catch (IOException ioe) {
+ FloodMapState.logger.warn ("Error while copying file " + file.getName());
+ return true;
+ }
+ }
+ return true;
+ }
+ });
+
+ FileTools.deleteRecursive(source);
+ }
+
+}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/utils/MapfileGenerator.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/MapfileGenerator.java Mon Feb 18 16:33:13 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,384 +0,0 @@
-package de.intevation.flys.utils;
-
-import de.intevation.artifacts.common.utils.Config;
-import de.intevation.flys.artifacts.model.LayerInfo;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.RuntimeConstants;
-
-/**
- * This class iterates over a bunch of directories, searches for meta
- * information coresponding to shapefiles and creates a mapfile which is used by
- * a <i>MapServer</i>.
- *
- * @author <a href="mailto:ingo.weinzierl at intevation.de">Ingo Weinzierl</a>
- */
-public abstract class MapfileGenerator
-{
- 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";
- public static final String WSPLGEN_USER_SHAPE = "user-rgd.shp";
-
- public static final String WSPLGEN_LAYER_TEMPLATE = "wsplgen_layer.vm";
- public static final String SHP_LAYER_TEMPLATE = "shapefile_layer.vm";
- public static final String DB_LAYER_TEMPLATE = "db_layer.vm";
- public static final String RIVERAXIS_LAYER_TEMPLATE = "riveraxis-layer.vm";
-
- public static final String MS_WSPLGEN_PREFIX = "wsplgen-";
- public static final String MS_BARRIERS_PREFIX = "barriers-";
- public static final String MS_LINE_PREFIX = "lines-";
- public static final String MS_POLYGONS_PREFIX = "polygons-";
- public static final String MS_LAYER_PREFIX = "ms_layer-";
- public static final String MS_USERSHAPE_PREFIX = "user-";
-
- private static Logger logger = Logger.getLogger(MapfileGenerator.class);
-
- private File shapefileDirectory;
-
- private VelocityEngine velocityEngine;
-
-
- protected MapfileGenerator() {
- }
-
-
- /**
- * Method to check the existance of a template file.
- *
- * @param templateID The name of a template.
- * @return true, of the template exists - otherwise false.
- */
- public boolean templateExists(String templateID){
- Template template = getTemplateByName(templateID);
- return template != null;
- }
-
-
- public abstract void generate() throws Exception;
-
-
- /**
- * Returns the VelocityEngine used for the template mechanism.
- *
- * @return the velocity engine.
- */
- protected VelocityEngine getVelocityEngine() {
- if (velocityEngine == null) {
- velocityEngine = new VelocityEngine();
- try {
- setupVelocity(velocityEngine);
- }
- catch (Exception e) {
- logger.error(e, e);
- return null;
- }
- }
- return velocityEngine;
- }
-
-
- /**
- * Initialize velocity.
- *
- * @param engine Velocity engine.
- * @throws Exception if an error occured while initializing velocity.
- */
- protected void setupVelocity(VelocityEngine engine)
- throws Exception
- {
- engine.setProperty(
- "input.encoding",
- "UTF-8");
-
- engine.setProperty(
- RuntimeConstants.RUNTIME_LOG,
- getVelocityLogfile());
-
- engine.setProperty(
- "resource.loader",
- "file");
-
- engine.setProperty(
- "file.resource.loader.path",
- getMapserverTemplatePath());
-
- engine.init();
- }
-
- protected abstract String getVelocityLogfile();
-
- protected abstract String getMapserverTemplatePath();
-
- protected abstract String getMapserverUrl();
-
- protected VelocityContext getVelocityContext() {
- VelocityContext context = new VelocityContext();
-
- try {
- context.put("MAPSERVERURL",
- getMapserverUrl());
- context.put("SHAPEFILEPATH",
- getShapefileBaseDir().getCanonicalPath());
- context.put("CONFIGDIR",
- Config.getConfigDirectory().getCanonicalPath());
- }
- catch (FileNotFoundException fnfe) {
- // this is bad
- logger.warn(fnfe, fnfe);
- }
- catch (IOException ioe) {
- // this is also bad
- logger.warn(ioe, ioe);
- }
-
- return context;
- }
-
-
- /**
- * Returns a template specified by <i>model</i>.
- *
- * @param model The name of the template.
- * @return a template.
- */
- protected Template getTemplateByName(String model) {
- if (model.indexOf(".vm") < 0) {
- model = model.concat(".vm");
- }
-
- try {
- VelocityEngine engine = getVelocityEngine();
- if (engine == null) {
- logger.error("Error while fetching VelocityEngine.");
- return null;
- }
-
- return engine.getTemplate(model);
- }
- catch (Exception e) {
- logger.warn(e, e);
- }
-
- return null;
- }
-
-
- /**
- * Returns the mapfile template.
- *
- * @return the mapfile template.
- * @throws Exception if an error occured while reading the configuration.
- */
- protected Template getMapfileTemplateObj()
- throws Exception
- {
- String mapfileName = getMapfileTemplate();
- return getTemplateByName(mapfileName);
- }
-
- protected abstract String getMapfilePath();
-
- protected abstract String getMapfileTemplate();
-
-
- /**
- * Returns the base directory storing the shapefiles.
- *
- * @return the shapefile base directory.
- *
- * @throws FileNotFoundException if no shapefile path is found or
- * configured.
- */
- public File getShapefileBaseDir()
- throws FileNotFoundException, IOException
- {
- if (shapefileDirectory == null) {
- String path = FLYSUtils.getXPathString(
- FLYSUtils.XPATH_FLOODMAP_SHAPEFILE_DIR);
-
- if (path != null) {
- shapefileDirectory = new File(path);
- }
-
- if (shapefileDirectory == null) {
- throw new FileNotFoundException("No shapefile directory given");
- }
-
- if (!shapefileDirectory.exists()) {
- shapefileDirectory.mkdirs();
- }
- }
-
- return shapefileDirectory;
- }
-
-
- protected File[] getUserDirs()
- throws FileNotFoundException, IOException
- {
- File baseDir = getShapefileBaseDir();
- File[] artifactDirs = baseDir.listFiles();
-
- // TODO ONLY RETURN DIRECTORIES OF THE SPECIFIED USER
-
- return artifactDirs;
- }
-
-
-
- protected List<String> parseLayers(File[] dirs) {
- List<String> layers = new ArrayList<String>();
-
- for (File dir: dirs) {
- File[] layerFiles = dir.listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File directory, String name) {
- return name.startsWith(MS_LAYER_PREFIX);
- }
- });
-
- for (File layer: layerFiles) {
- try {
- layers.add(layer.getCanonicalPath());
- }
- catch (IOException ioe) {
- logger.warn(ioe, ioe);
- }
- }
- }
-
- return layers;
- }
-
-
-
-
- /**
- * Creates a layer snippet which might be included in the mapfile.
- *
- * @param layerinfo A LayerInfo object that contains all necessary
- * information to build a Mapserver LAYER section.
- * @param dir The base dir for the LAYER snippet.
- * @param filename The name of the file that is written.
- * @param tpl The Velocity template which is used to create the LAYER
- * section.
- */
- protected void writeLayer(
- LayerInfo layerInfo,
- File layerFile,
- Template tpl
- )
- throws FileNotFoundException
- {
- if (logger.isDebugEnabled()) {
- logger.debug("Write layer for:");
- logger.debug(" directory/file: " + layerFile.getName());
- }
-
- Writer writer = null;
-
- try {
- writer = new FileWriter(layerFile);
-
- VelocityContext context = getVelocityContext();
- context.put("LAYER", layerInfo);
-
- tpl.merge(context, writer);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- }
- catch (IOException ioe) {
- logger.error(ioe, ioe);
- }
- catch (Exception e) {
- logger.error(e, e);
- }
- finally {
- try {
- if (writer != null) {
- writer.close();
- }
- }
- catch (IOException ioe) {
- logger.debug(ioe, ioe);
- }
- }
- }
-
-
- /**
- * Creates a mapfile with the layer information stored in <i>layers</i>.
- *
- * @param layers Layer information.
- */
- protected void writeMapfile(List<String> layers) {
- String tmpMapName = "mapfile" + new Date().getTime();
-
- File mapfile = new File(getMapfilePath());
-
- File tmp = null;
- Writer writer = null;
-
- try {
- tmp = new File(mapfile.getParent(), tmpMapName);
- tmp.createNewFile();
-
- writer = new FileWriter(tmp);
-
- VelocityContext context = getVelocityContext();
- context.put("LAYERS", layers);
-
- Template mapTemplate = getMapfileTemplateObj();
- if (mapTemplate == null) {
- logger.warn("No mapfile template found.");
- return;
- }
-
- mapTemplate.merge(context, writer);
-
- // we need to create a temporary mapfile first und rename it into
- // real mapfile because we don't run into race conditions on this
- // way. (iw)
- tmp.renameTo(mapfile);
- }
- catch (FileNotFoundException fnfe) {
- logger.error(fnfe, fnfe);
- }
- catch (IOException ioe) {
- logger.error(ioe, ioe);
- }
- catch (Exception e) {
- logger.error(e, e);
- }
- finally {
- try {
- if (writer != null) {
- writer.close();
- }
-
- if (tmp.exists()) {
- tmp.delete();
- }
- }
- catch (IOException ioe) {
- logger.debug(ioe, ioe);
- }
- }
- }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/utils/PrintMap.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/PrintMap.java Tue Feb 19 13:41:20 2013 +0100
@@ -0,0 +1,131 @@
+package de.intevation.flys.utils;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import java.util.List;
+
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import javax.imageio.ImageIO;
+
+
+import org.geotools.data.ows.Layer;
+import org.geotools.data.ows.WMSCapabilities;
+import org.geotools.data.wms.WebMapServer;
+import org.geotools.geometry.jts.ReferencedEnvelope;
+import org.geotools.map.MapContext;
+import org.geotools.map.WMSMapLayer;
+import org.geotools.ows.ServiceException;
+import org.geotools.renderer.lite.StreamingRenderer;
+import org.geotools.renderer.GTRenderer;
+
+
+public class PrintMap {
+
+ public static final String DEFAULT_WMS = "http://map1.naturschutz.rlp.de/service_lanis/mod_wms/wms_getmap.php?mapfile=group_gdide&REQUEST=GetCapabilities&SERVICE=WMS";
+ public static final String DEFAULT_OUTFILE = "~/map.jpeg";
+
+ public static final String MAPSERVER = System.getProperty("wms", DEFAULT_WMS);
+ public static final String MAP_IMAGE = System.getProperty("outfile", DEFAULT_OUTFILE);
+
+
+ public static void main(String[] args) {
+ System.out.println("-> start PrintMap");
+ System.out.println(" -> Print layers of WMS: " + MAPSERVER);
+
+ try {
+ WebMapServer server = getMapserver();
+ WMSMapLayer[] wmsLayer = getWMSLayers(server);
+
+ MapContext mapcontent = new MapContext( wmsLayer );
+ mapcontent.setTitle(" NEW MAP CONTENT TITLE ");
+
+ printMap(mapcontent);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("-> finished PrintMap");
+ }
+
+
+ public static void printMap(MapContext map) throws Exception {
+ int imageWidth = 600;
+
+ GTRenderer renderer = new StreamingRenderer();
+ renderer.setContext(map);
+
+ Rectangle imageBounds = null;
+ ReferencedEnvelope mapBounds = null;
+
+ try {
+ mapBounds = map.getLayerBounds();
+ double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0);
+ imageBounds = new Rectangle(
+ 0, 0,
+ imageWidth,
+ (int) Math.round(imageWidth * heightToWidth));
+
+ }
+ catch (Exception e) {
+ // failed to access map layers
+ throw new RuntimeException(e);
+ }
+
+ BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
+ Graphics2D gr = image.createGraphics();
+ gr.setPaint(Color.WHITE);
+ gr.fill(imageBounds);
+
+ try {
+ renderer.paint(gr, imageBounds, mapBounds);
+ File fileToSave = new File(MAP_IMAGE);
+ ImageIO.write(image, "jpeg", fileToSave);
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public static WebMapServer getMapserver() throws MalformedURLException, IOException, ServiceException {
+ return new WebMapServer(getServerUrl());
+ }
+
+
+ public static URL getServerUrl() throws MalformedURLException {
+ return new URL(MAPSERVER);
+ }
+
+
+ public static WMSMapLayer[] getWMSLayers(WebMapServer server) {
+ if (server == null) {
+ System.out.println("WebMapServer == null");
+ throw new RuntimeException("WebMapServer == null");
+ }
+
+ WMSCapabilities capabilities = server.getCapabilities();
+
+ List<Layer> layers = capabilities.getLayerList();
+ WMSMapLayer[] wmslayers = new WMSMapLayer[layers.size()];
+
+ for (int i = 0, L = layers.size(); i < L; i++) {
+ Layer l = layers.get(i);
+
+ System.out.println(" -> add layer: " + l);
+ wmslayers[i] = new WMSMapLayer(server, l);
+ }
+
+ return wmslayers;
+ }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/utils/RiverMapfileGenerator.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/RiverMapfileGenerator.java Mon Feb 18 16:33:13 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-package de.intevation.flys.utils;
-
-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 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);
- }
-}
diff -r 7c8ce0a95a64 -r a9243df307b1 flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java Mon Feb 18 16:33:13 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java Tue Feb 19 13:41:20 2013 +0100
@@ -16,10 +16,10 @@
import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet;
import de.intevation.flys.artifacts.resources.Resources;
import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
+import de.intevation.flys.mapserver.MapfileGenerator;
import de.intevation.flys.model.CrossSectionTrack;
import de.intevation.flys.utils.FLYSUtils;
import de.intevation.flys.utils.GeometryUtils;
-import de.intevation.flys.utils.MapfileGenerator;
public class FacetCreator implements FacetTypes {
More information about the Dive4elements-commits
mailing list