# HG changeset patch # User Christian Lins # Date 1354922369 -3600 # Node ID 861c47e0a8a0468a5bba04a930123468736ff77c # Parent a93699cb31eb39d09a945f8985d98a9542f7697e Refactor Mapserver mapfile generation. Prepares the existing mapfile generation code for a river axis mapfile generator. Removes unused asynchronous mapfile generation to reduce complexity. diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Fri Dec 07 11:26:53 2012 +0100 +++ b/flys-artifacts/doc/conf/conf.xml Sat Dec 08 00:19:29 2012 +0100 @@ -224,7 +224,7 @@ de.intevation.flys.artifacts.datacage.Datacage de.intevation.flys.wsplgen.SchedulerSetup - de.intevation.flys.map.RiverMapGenerator + de.intevation.flys.map.RiverMapGeneratorStarter diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java Fri Dec 07 11:26:53 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java Sat Dec 08 00:19:29 2012 +0100 @@ -1,39 +1,29 @@ package de.intevation.flys.artifacts; -import java.io.File; - -import java.util.ArrayList; -import java.util.List; - -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -import org.w3c.dom.Document; - -import org.apache.log4j.Logger; - -import org.hibernate.impl.SessionFactoryImpl; - import com.vividsolutions.jts.geom.Envelope; -import de.intevation.artifacts.Artifact; -import de.intevation.artifacts.ArtifactFactory; -import de.intevation.artifacts.CallMeta; - -import de.intevation.artifacts.common.utils.FileTools; - import de.intevation.artifactdatabase.data.DefaultStateData; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.State; - - -import de.intevation.flys.backend.SessionFactoryProvider; - +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.common.utils.FileTools; +import de.intevation.flys.artifacts.model.map.WMSDBLayerFacet; import de.intevation.flys.artifacts.resources.Resources; import de.intevation.flys.artifacts.states.DefaultState; -import de.intevation.flys.artifacts.model.map.WMSDBLayerFacet; +import de.intevation.flys.backend.SessionFactoryProvider; import de.intevation.flys.utils.FLYSUtils; -import de.intevation.flys.utils.MapfileGenerator; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.log4j.Logger; +import org.hibernate.impl.SessionFactoryImpl; +import org.w3c.dom.Document; public abstract class WMSDBArtifact extends StaticFLYSArtifact { @@ -361,7 +351,6 @@ logger.debug("Try to delete directory '" + dir + "'"); FileTools.deleteRecursive(dir); - MapfileGenerator.getInstance().update(); } } diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/RiverMapfileGeneratorStarter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/RiverMapfileGeneratorStarter.java Sat Dec 08 00:19:29 2012 +0100 @@ -0,0 +1,37 @@ +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 Christian Lins + */ +public class RiverMapfileGeneratorStarter implements LifetimeListener { + + private static Logger logger = Logger.getLogger(RiverMapfileGeneratorStarter.class); + + @Override + public void setup(Document document) { + + } + + @Override + public void systemUp(GlobalContext globalContext) { + logger.debug("systemUp()"); + + RiverMapfileGenerator fmfg = new RiverMapfileGenerator(); + + } + + @Override + public void systemDown(GlobalContext globalContext) { + // No, we're not cleaning up our generated mapfile + } + +} diff -r a93699cb31eb -r 861c47e0a8a0 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 Fri Dec 07 11:26:53 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Sat Dec 08 00:19:29 2012 +0100 @@ -101,8 +101,6 @@ copyShapeDir(orig, owner); modifyFacets(orig, owner, context, callMeta); - - MapfileGenerator.getInstance().update(); } @@ -266,8 +264,6 @@ Scheduler scheduler = Scheduler.getInstance(); scheduler.cancelJob(flys.identifier()); - - MapfileGenerator.getInstance().update(); } diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java Fri Dec 07 11:26:53 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java Sat Dec 08 00:19:29 2012 +0100 @@ -16,8 +16,8 @@ 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.ArtefactMapfileGenerator; import de.intevation.flys.utils.GeometryUtils; -import de.intevation.flys.utils.MapfileGenerator; import de.intevation.flys.utils.ThemeUtil; import java.io.File; @@ -133,7 +133,7 @@ ) { try { if(wms instanceof WSPLGENLayerFacet) { - MapfileGenerator mfg = MapfileGenerator.getInstance(); + ArtefactMapfileGenerator mfg = new ArtefactMapfileGenerator(); mfg.createUeskLayer( flys, (WSPLGENLayerFacet) wms, @@ -152,7 +152,7 @@ protected void createBarriersLayer(FLYSArtifact flys, WMSLayerFacet wms) { - MapfileGenerator mfg = MapfileGenerator.getInstance(); + ArtefactMapfileGenerator mfg = new ArtefactMapfileGenerator(); try { mfg.createBarriersLayer(flys, wms); @@ -167,7 +167,7 @@ protected void createUserShapeLayer(FLYSArtifact flys, WMSLayerFacet wms) { - MapfileGenerator mfg = MapfileGenerator.getInstance(); + ArtefactMapfileGenerator mfg = new ArtefactMapfileGenerator(); try { mfg.createUserShapeLayer(flys, wms); @@ -188,7 +188,7 @@ ) { logger.debug("createDatabaseLayer for facet: " + wms.getName()); - MapfileGenerator mfg = MapfileGenerator.getInstance(); + ArtefactMapfileGenerator mfg = new ArtefactMapfileGenerator(); try { File baseDir = mfg.getShapefileBaseDir(); @@ -224,7 +224,8 @@ { logger.debug("MapGenerator.generate"); - MapfileGenerator.getInstance().update(); + ArtefactMapfileGenerator mfg = new ArtefactMapfileGenerator(); + mfg.generate(); Document response = XMLUtils.newDocument(); ElementCreator c = new ElementCreator( diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/src/main/java/de/intevation/flys/utils/ArtefactMapfileGenerator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/ArtefactMapfileGenerator.java Sat Dec 08 00:19:29 2012 +0100 @@ -0,0 +1,312 @@ +package de.intevation.flys.utils; + +import de.intevation.artifacts.CallContext; +import de.intevation.flys.artifacts.FLYSArtifact; +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 ArtefactMapfileGenerator extends MapfileGenerator { + + private static Logger logger = Logger.getLogger(ArtefactMapfileGenerator.class); + + /** + * Method which starts searching for meta information file and mapfile + * generation. + */ + @Override + public void generate() throws IOException + { + File[] userDirs = getUserDirs(); + List 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 wms. + * @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 wms. + * @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 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 wms. + * @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 wms. + * @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); + } + } + +} diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/src/main/java/de/intevation/flys/utils/MapfileGenerator.java --- 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 Ingo Weinzierl */ -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.
- * NOTE: 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 layers = parseLayers(userDirs); - - logger.info("Found " + layers.size() + " layers for user mapfile."); - - writeMapfile(layers); - } - - - /** - * Generate river axis mapfile. - */ - protected void generateRiverAxisMapfile() { - List 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 wms. - * @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 wms. - * @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 wms. - * @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 wms. - * @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); - } - } /** diff -r a93699cb31eb -r 861c47e0a8a0 flys-artifacts/src/main/java/de/intevation/flys/utils/RiverMapfileGenerator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/RiverMapfileGenerator.java Sat Dec 08 00:19:29 2012 +0100 @@ -0,0 +1,34 @@ +package de.intevation.flys.utils; + +import de.intevation.flys.artifacts.model.LayerInfo; +import de.intevation.flys.artifacts.model.RiverFactory; +import de.intevation.flys.model.River; + +import java.util.List; + +public class RiverMapfileGenerator extends MapfileGenerator { + + /** + * Generate river axis mapfile. + */ + @Override + protected void generate() { + List rivers = RiverFactory.getRivers(); + + for (River river : rivers) { + createRiverAxisLayer( + river.getName(), + river.getId(), + "41677", + "100,100,100,100"); + } + } + + protected void createRiverAxisLayer(String riverName, int riverID, String srid, String extend) { + LayerInfo layerInfo = new LayerInfo(); + layerInfo.setName(riverName); + layerInfo.setSrid(srid); + layerInfo.setExtent(extend); + } + +}