diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index 6f63a3c..cb05d86 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -400,8 +400,6 @@ public class GeoServerRESTPublisher { * @param mosaicDir the directory where the raster images are located * @return true if the operation completed successfully. * @throws FileNotFoundException - * - * @deprecated work in progress */ public RESTCoverageStore configureExternaMosaicDatastore(String workspace, String storeName, File mosaicDir) throws FileNotFoundException { if (!mosaicDir.isDirectory()) { @@ -432,8 +430,11 @@ public class GeoServerRESTPublisher { public RESTCoverageStore publishExternalMosaic(String workspace, String storeName, File mosaicDir, String srs, String defaultStyle) throws FileNotFoundException { GSCoverageEncoder coverageEncoder = new GSCoverageEncoder(); coverageEncoder.setSRS(srs); + + GSLayerEncoder layerEncoder = new GSLayerEncoder(); + layerEncoder.setDefaultStyle(defaultStyle); - return publishExternalMosaic(workspace, storeName, mosaicDir, coverageEncoder, defaultStyle); + return publishExternalMosaic(workspace, storeName, mosaicDir, coverageEncoder, layerEncoder); } /** @@ -446,15 +447,28 @@ public class GeoServerRESTPublisher { * @param workspace an existing workspace * @param storeName the name of the coverageStore to be created * @param mosaicDir the directory where the raster images are located - * @param coverageEncoder the set of parameters to be set to the coverage - * @param defaultStyle may be null + * @param coverageEncoder the set of parameters to be set to the coverage (bbox, srs, ...) + * @param layerEncoder the set of parameters to be set to the layer (defaultstyle, wmspath, ...) * * @return true if the operation completed successfully. * * @throws FileNotFoundException */ - public RESTCoverageStore publishExternalMosaic(String workspace, String storeName, File mosaicDir, GSCoverageEncoder coverageEncoder, String defaultStyle) throws FileNotFoundException { + public RESTCoverageStore publishExternalMosaic(String workspace, String storeName, File mosaicDir, GSCoverageEncoder coverageEncoder, GSLayerEncoder layerEncoder) throws FileNotFoundException { RESTCoverageStore store = configureExternaMosaicDatastore(workspace, storeName, mosaicDir); + + if(coverageEncoder == null ) { + if(LOGGER.isDebugEnabled()) + LOGGER.debug("no coverageEncoder provided for " + workspace + ":" + storeName); + coverageEncoder = new GSCoverageEncoder(); + } + + if(layerEncoder == null ) { + if(LOGGER.isDebugEnabled()) + LOGGER.debug("no layerEncoder provided for " + workspace + ":" + storeName); + layerEncoder = new GSLayerEncoder(); + } + if (store != null ) { try { // // retrieve coverage name @@ -467,10 +481,6 @@ public class GeoServerRESTPublisher { String coverageName = covList.get(0).getName(); configureCoverage(coverageEncoder, workspace, storeName, coverageName); - - // config layer props (style, ...) - GSLayerEncoder layerEncoder = new GSLayerEncoder(); - layerEncoder.setDefaultStyle(defaultStyle); configureLayer(layerEncoder, storeName); } catch (Exception e) { diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSCoverageEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSCoverageEncoder.java index 00fe6c4..aead2dd 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSCoverageEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSCoverageEncoder.java @@ -25,14 +25,39 @@ package it.geosolutions.geoserver.rest.encoder; +import java.util.HashMap; +import java.util.Map; +import org.jdom.Element; + /** * * @author ETj (etj at geo-solutions.it) */ public class GSCoverageEncoder extends GSResourceEncoder { + private Map metadata = new HashMap(); + public GSCoverageEncoder() { super("coverage"); set("enabled", "true"); } + + public void addMetadata(String key, String value) { + metadata.put(key, value); + } + + @Override + protected void addNodesBeforeOutput(Element e) { + super.addNodesBeforeOutput(e); + + if( ! metadata.isEmpty() ) { + Element md = new Element("metadata"); + for (Map.Entry entry : metadata.entrySet()) { + md.addContent("entry") + .setAttribute("key", entry.getKey()) + .setText(entry.getValue()); + } + e.addContent(md); + } + } } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/PropertyXMLEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/PropertyXMLEncoder.java index a17e655..fc869c6 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/PropertyXMLEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/PropertyXMLEncoder.java @@ -77,8 +77,13 @@ public class PropertyXMLEncoder { add(layer, key, value); } + addNodesBeforeOutput(layer); return OUTPUTTER.outputString(layer); } + + protected void addNodesBeforeOutput(Element e) { + + } private void add(Element e, String key, String value) { if( ! key.contains("/") ) {