Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/utils/RiverMapfileGenerator.java @ 5442:9575264f801d
Only create one FunctionResolver per BuildHelper. Creatin new ones over and over again is excessive.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Tue, 26 Mar 2013 21:55:23 +0100 |
parents | b55975761708 |
children | ae60bb7b8085 |
line wrap: on
line source
package de.intevation.flys.utils; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.MultiLineString; 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; import org.hibernate.HibernateException; 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 = null; try { riverAxis = RiverAxis.getRiverAxis(river.getName()); } catch (HibernateException iae) { logger.error("No valid riveraxis found for " + river.getName()); continue; } if (riverAxis == null) { logger.warn("River " + river.getName() + " has no river axis!"); continue; } if (riverAxis.get(0).getGeom() == null) { logger.warn("River " + river.getName() + " has no riveraxis geometry!"); continue; } MultiLineString 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"); // FIXME: Use templates for that if (FLYSUtils.isUsingOracle()) { layerInfo.setData("geom FROM river_axes USING SRID " + srid); } else { layerInfo.setData("geom FROM river_axes"); } 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 public 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); } }