# HG changeset patch # User Tim Englich # Date 1271168572 0 # Node ID 28028979c813c875731673fa51167ffd6c093432 # Parent fe0263926870e880dc51d9e7c51d6d507b3bf734 Integrated the possibility to change the Title of an Layer in Product Layer. gnv-artifacts/trunk@922 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r fe0263926870 -r 28028979c813 gnv-artifacts/doc/conf/products/layer/conf.xml --- a/gnv-artifacts/doc/conf/products/layer/conf.xml Tue Apr 13 12:39:16 2010 +0000 +++ b/gnv-artifacts/doc/conf/products/layer/conf.xml Tue Apr 13 14:22:52 2010 +0000 @@ -88,7 +88,11 @@ - + + + + + @@ -122,7 +126,11 @@ - + + + + + diff -r fe0263926870 -r 28028979c813 gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java Tue Apr 13 12:39:16 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java Tue Apr 13 14:22:52 2010 +0000 @@ -28,6 +28,7 @@ import de.intevation.gnv.state.OutputStateBase; import de.intevation.gnv.state.exception.StateException; import de.intevation.gnv.utils.ArtifactXMLUtilities; +import de.intevation.gnv.utils.ExclusiveExec; import de.intevation.gnv.utils.FileUtils; import de.intevation.gnv.utils.MapfileGenerator; import de.intevation.gnv.utils.MetaWriter; @@ -127,7 +128,8 @@ Collection data = this.fetchData(); if (data != null && !data.isEmpty()){ XMLUtils.toStream(this.getWMS(uuid, callContext, - data, geometryType), + data, geometryType, + inputData), outputStream); }else{ this.writeExceptionReport2Stream(outputStream); @@ -399,13 +401,10 @@ try { synchronized (shapeFileLock) { - int count = 0; - while (shapeDir.exists()) { - shapeDir = new File(baseDir, uuid + "-" + count); - ++count; + if (shapeDir.exists()) { + FileUtils.deleteContent(shapeDir); } - - if (!shapeDir.mkdirs()) { + else if (!shapeDir.mkdirs()) { log.error("cannot create directory '" + shapeDir.getAbsolutePath() + "'"); return null; @@ -556,6 +555,7 @@ * @param callContext The CallContext object. * @param data A collection with some input data. * @param geometryType The geometry type. + * @param inputData the Parameters which are send by the out-Call. * @return a document with some meta information (shapefile path, geometry * type, time to live of the current artifact, etc). * @throws StateException if an error occured while shapefile writing. @@ -563,7 +563,8 @@ protected Document getWMS(String uuid, CallContext callContext, Collection data, - String geometryType) + String geometryType, + Collection inputData) throws StateException { Document document = XMLUtils.newDocument(); @@ -574,35 +575,89 @@ String path = getShapeFilePath(); if (path != null && new File(path).isDirectory()) { + String title = getLayerTitle(inputData); + if (title == null) { + title = uuid; + } + + callContext.putContextValue( + MetaWriter.CONTEXT_LAYER_TITLE, title); + + String paramType = findParameterTitle(geometryType); + + if (log.isDebugEnabled()) { + log.debug("Layer title: " + title); + log.debug("Layer type: " + paramType); + } + + Document meta = MetaWriter.writeHorizontalcrosssectionMeta( + callContext, uuid, path, paramType); + if (meta != null) { + MapfileGenerator.getInstance().update(); + return meta; + } + pathElement.setTextContent(path); } else { - - if (data != null && - (path = writeToShapeFile(uuid, data, callContext,geometryType)) != null) { - - String paramType = LAYER_MODEL+"_"+templateID; - - if (!MapfileGenerator.getInstance().templateExists(paramType)){ - // If the template doesn't exist the Defaulttemplates will be used. - paramType = LAYER_MODEL+"_"+ - this.determineDefaultTemplateName(geometryType); + ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid); + try{ + if (data != null && + (path = writeToShapeFile(uuid, data, callContext,geometryType)) != null) { + String paramType = findParameterTitle(geometryType); + String title = getLayerTitle(inputData); + if (title == null) { + title = uuid; + } + Document meta = MetaWriter.writeLayerMeta(callContext, uuid, + path, paramType, + this.determineGeometryType(geometryType)); + if (meta != null) { + MapfileGenerator.getInstance().update(); + return meta; + } + pathElement.setTextContent(path); } - Document meta = MetaWriter.writeLayerMeta(callContext, uuid, - path, paramType, - this.determineGeometryType(geometryType)); - if (meta != null) { - MapfileGenerator.getInstance().update(); - return meta; - } - - pathElement.setTextContent(path); + }finally{ + ExclusiveExec.INSTANCE.release(key); } } return document; } + /** + * Returns the parameterType for the Layer. + * @param geometryType + * @return + */ + private String findParameterTitle(String geometryType) { + String paramType = LAYER_MODEL+"_"+templateID; + + if (!MapfileGenerator.getInstance().templateExists(paramType)){ + // If the template doesn't exist the Defaulttemplates will be used. + paramType = LAYER_MODEL+"_"+ + this.determineDefaultTemplateName(geometryType); + } + return paramType; + } + + /** + * Find the title for a wms layer specified by the user. + * + * @param inputData A collection with InputData objects. + * @return the title. + */ + protected String getLayerTitle(Collection inputData) { + for (InputData data: inputData) { + String name = data.getName(); + if (name != null && name.equals("title")) { + return (String) data.getValue(); + } + } + return null; + } + /** * Turns the geometry type into a form used for the templating mechanism