Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/utils/MapfileGenerator.java @ 4654:861c47e0a8a0
Refactor Mapserver mapfile generation.
Prepares the existing mapfile generation code for
a river axis mapfile generator.
Removes unused asynchronous mapfile generation to
reduce complexity.
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Sat, 08 Dec 2012 00:19:29 +0100 |
parents | c04db3178d09 |
children | 442fbb290fa8 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/MapfileGenerator.java Fri Dec 07 11:26:53 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/MapfileGenerator.java Sat Dec 08 00:19:29 2012 +0100 @@ -1,15 +1,7 @@ package de.intevation.flys.utils; -import de.intevation.artifacts.CallContext; import de.intevation.artifacts.common.utils.Config; -import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.model.LayerInfo; -import de.intevation.flys.artifacts.model.RiverFactory; -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.model.River; import java.io.File; import java.io.FileNotFoundException; @@ -25,9 +17,6 @@ import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; -import org.geotools.data.shapefile.ShpFiles; -import org.geotools.data.shapefile.shp.ShapefileHeader; -import org.geotools.data.shapefile.shp.ShapefileReader; /** * This class iterates over a bunch of directories, searches for meta @@ -36,8 +25,7 @@ * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ -public class MapfileGenerator -extends Thread +public abstract class MapfileGenerator { public static final String WSPLGEN_RESULT_SHAPE = "wsplgen.shp"; public static final String WSPLGEN_LINES_SHAPE = "barrier_lines.shp"; @@ -56,98 +44,18 @@ public static final String MS_LAYER_PREFIX = "ms_layer-"; public static final String MS_USERSHAPE_PREFIX = "user-"; - protected static final long SLEEPTIME = 10 * 1000L; // 10 seconds - private static Logger logger = Logger.getLogger(MapfileGenerator.class); - private static MapfileGenerator instance; - private File shapefileDirectory; private VelocityEngine velocityEngine; - private final boolean lock[]; - - - - private MapfileGenerator() { - lock = new boolean[1]; - } - - - /** - * A main method which can be used to create a mapfile without a running - * artifact server.<br> - * <b>NOTE:</b> This method is not implemented yet! - * - * @param args Arguments. - */ - public static void main(String[] args) { - throw new Error("MapfileGenerator.main() is CURRENTLY NOT IMPLEMENTED!"); - } - - - /** - * Returns the instance of this generator. - * - * @return the instance. - */ - public static synchronized MapfileGenerator getInstance() { - if (instance == null) { - instance = new MapfileGenerator(); - instance.setDaemon(true); - instance.start(); - } - - return instance; - } - /** - * Triggers the mapfile generation process. - */ - public void update() { - synchronized (lock) { - logger.debug("update"); - lock[0] = true; - lock.notify(); - } + protected MapfileGenerator() { } /** - * Thread to generate a mapfile. - */ - @Override - public void run() { - logger.debug("Start MapfileGenerator thread..."); - try { - for (;;) { - synchronized (lock) { - while (!lock[0]) { - lock.wait(SLEEPTIME); - } - lock[0] = false; - } - - logger.debug("Start sync process now..."); - generate(); - } - } - catch (InterruptedException ie) { - logger.debug("MapfileGenerator thread got an interrupt."); - } - catch (FileNotFoundException fnfe) { - logger.debug("Error while mapfile creation: " + fnfe.getMessage()); - } - catch (IOException ioe) { - logger.error(ioe, ioe); - } - finally { - logger.debug("THREAD END"); - } - } - - /** * Method to check the existance of a template file. * * @param templateID The name of a template. @@ -159,37 +67,7 @@ } - /** - * Method which starts searching for meta information file and mapfile - * generation. - */ - protected void generate() - throws FileNotFoundException, IOException - { - File[] userDirs = getUserDirs(); - - List<String> layers = parseLayers(userDirs); - - logger.info("Found " + layers.size() + " layers for user mapfile."); - - writeMapfile(layers); - } - - - /** - * Generate river axis mapfile. - */ - protected void generateRiverAxisMapfile() { - List<River> rivers = RiverFactory.getRivers(); - - for (River river : rivers) { - createRiverAxisLayer( - river.getName(), - river.getId(), - "41677", - "100,100,100,100"); - } - } + protected abstract void generate() throws Exception; /** @@ -379,286 +257,6 @@ } - /** - * 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); - layerinfo.setSrid(wms.getSrid()); - - 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, 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, dir, nameLines, tpl); - } - catch (FileNotFoundException fnfe) { - logger.error(fnfe, fnfe); - logger.warn("Unable to write layer: " + nameLines); - } - } - - - protected void createRiverAxisLayer(String riverName, int riverID, String srid, String extend) { - LayerInfo layerInfo = new LayerInfo(); - layerInfo.setName(riverName); - layerInfo.setSrid(srid); - layerInfo.setExtent(extend); - } - - - 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, 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, 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, dir, name, template); - } - catch (FileNotFoundException fnfe) { - logger.error(fnfe, fnfe); - logger.warn("Unable to write layer: " + name); - } - } /**