diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index 753773a..15fe158 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -2292,11 +2292,11 @@ public class GeoServerRESTPublisher { } // ========================================================================== - // === MISCELLANEA + // === MISCELLANEOUS // ========================================================================== /** - * Allows to configure some layer attributes such and DefaultStyle + * Allows to configure some layer attributes such as DefaultStyle * * @param workspace * @param resourceName the name of the resource to use (featureStore or coverageStore name) diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTAbstractList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTAbstractList.java index 3ea2069..e0b0d1c 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTAbstractList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTAbstractList.java @@ -26,8 +26,8 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMListIterator; - import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java index 54e2666..52b5083 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java @@ -25,9 +25,12 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.encoder.feature.FeatureTypeAttribute; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.jdom.Element; @@ -205,6 +208,136 @@ public class RESTCoverage extends RESTResource { } return listDim; } + + + /** + * Retrieves the list of parameters for this coverage. + * + * @return a {@link Map} where the key is the name for the parameter and the value is the value for the parameter. + */ + @SuppressWarnings("unchecked") + public Map getParametersList() { + Map paramsList = new HashMap(); + + final Element paramsRoot = rootElem.getChild("parameters"); + if (paramsRoot != null) { + final List params = paramsRoot.getChildren(); + if (params != null) { + for (Element param : params) { + final List values = param.getChildren(); + assert values.size()==2; + paramsList.put(values.get(0).getValue(), values.get(1).getValue()); // save key and value + } + } + } + return paramsList; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("RESTCoverage ["); + if (getNativeFormat() != null) { + builder.append("getNativeFormat()="); + builder.append(getNativeFormat()); + builder.append(", "); + } + if (getNativeCRS() != null) { + builder.append("getNativeCRS()="); + builder.append(getNativeCRS()); + builder.append(", "); + } + if (getSRS() != null) { + builder.append("getSRS()="); + builder.append(getSRS()); + builder.append(", "); + } + if (getMetadataList() != null) { + builder.append("getMetadataList()="); + builder.append(getMetadataList()); + builder.append(", "); + } + if (getDimensionInfo() != null) { + builder.append("getDimensionInfo()="); + builder.append(getDimensionInfo()); + builder.append(", "); + } + if (getParametersList() != null) { + builder.append("getParametersList()="); + builder.append(getParametersList()); + builder.append(", "); + } + if (getName() != null) { + builder.append("getName()="); + builder.append(getName()); + builder.append(", "); + } + if (getTitle() != null) { + builder.append("getTitle()="); + builder.append(getTitle()); + builder.append(", "); + } + if (getNativeName() != null) { + builder.append("getNativeName()="); + builder.append(getNativeName()); + builder.append(", "); + } + if (getAbstract() != null) { + builder.append("getAbstract()="); + builder.append(getAbstract()); + builder.append(", "); + } + if (getNameSpace() != null) { + builder.append("getNameSpace()="); + builder.append(getNameSpace()); + builder.append(", "); + } + if (getStoreName() != null) { + builder.append("getStoreName()="); + builder.append(getStoreName()); + builder.append(", "); + } + if (getStoreType() != null) { + builder.append("getStoreType()="); + builder.append(getStoreType()); + builder.append(", "); + } + if (getStoreUrl() != null) { + builder.append("getStoreUrl()="); + builder.append(getStoreUrl()); + builder.append(", "); + } + if (getCRS() != null) { + builder.append("getCRS()="); + builder.append(getCRS()); + builder.append(", "); + } + builder.append("getMinX()="); + builder.append(getMinX()); + builder.append(", getMaxX()="); + builder.append(getMaxX()); + builder.append(", getMinY()="); + builder.append(getMinY()); + builder.append(", getMaxY()="); + builder.append(getMaxY()); + builder.append(", "); + if (getAttributeList() != null) { + builder.append("getAttributeList()="); + builder.append(getAttributeList()); + builder.append(", "); + } + if (getEncodedAttributeList() != null) { + builder.append("getEncodedAttributeList()="); + builder.append(getEncodedAttributeList()); + builder.append(", "); + } + if (getEncodedMetadataLinkInfoList() != null) { + builder.append("getEncodedMetadataLinkInfoList()="); + builder.append(getEncodedMetadataLinkInfoList()); + } + builder.append("]"); + return builder.toString(); + } // public String getStoreName() { // return rootElem.getChild("store").getChildText("name"); diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageList.java index 9dcb575..2b7851a 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStore.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStore.java index 2e14e65..c794332 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStore.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStore.java @@ -26,6 +26,7 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStoreList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStoreList.java index 84e4e18..06eb6fd 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStoreList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverageStoreList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTDataStoreList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTDataStoreList.java index 8ebef91..43f60d2 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTDataStoreList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTDataStoreList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTFeatureType.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTFeatureType.java index b5c34f5..b333dc4 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTFeatureType.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTFeatureType.java @@ -29,6 +29,7 @@ import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMListIterator; import java.util.Iterator; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayer.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayer.java index 6013d27..f169d85 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayer.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayer.java @@ -26,6 +26,7 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + import org.jdom.Element; import org.jdom.Namespace; diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroup.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroup.java index a538c62..8c51ff7 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroup.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroup.java @@ -26,6 +26,7 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroupList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroupList.java index ed5f7ae..64aae59 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroupList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerGroupList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerList.java index 10a12a2..cad37b7 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTLayerList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespace.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespace.java index aa034ea..b88dfdc 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespace.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespace.java @@ -26,9 +26,10 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; -import org.jdom.Element; import java.net.URI; +import org.jdom.Element; + /** * Parse namespaces returned as XML REST objects. * diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespaceList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespaceList.java index e89f566..c44f0db 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespaceList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTNamespaceList.java @@ -26,6 +26,7 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTPublished.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTPublished.java index 0edf707..a34e1c8 100755 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTPublished.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTPublished.java @@ -25,10 +25,10 @@ package it.geosolutions.geoserver.rest.decoder; -import org.jdom.Element; - import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; +import org.jdom.Element; + /** * Parse a published returned as XML REST objects. diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java index 0dad15a..972f5e7 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java @@ -123,15 +123,17 @@ public class RESTResource { List> attrsList = null; final Element attrsRoot = rootElem.getChild("attributes"); - final List attrs = attrsRoot.getChildren(); - if (attrs != null) { - attrsList = new ArrayList>(attrs.size()); - for (Element attr : attrs) { - Map attrsMap = new HashMap(); - attrsList.add(attrsMap); - for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { - String key = at.toString(); - attrsMap.put(at, attr.getChildText(key)); + if(attrsRoot!=null){ + final List attrs = attrsRoot.getChildren(); + if (attrs != null) { + attrsList = new ArrayList>(attrs.size()); + for (Element attr : attrs) { + Map attrsMap = new HashMap(); + attrsList.add(attrsMap); + for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { + String key = at.toString(); + attrsMap.put(at, attr.getChildText(key)); + } } } } @@ -142,18 +144,20 @@ public class RESTResource { List attrsList = null; final Element attrsRoot = rootElem.getChild("attributes"); - final List attrs = attrsRoot.getChildren(); - if (attrs != null) { - attrsList = new ArrayList(attrs.size()); - for (Element attr : attrs) { - final GSAttributeEncoder attrEnc = new GSAttributeEncoder(); - for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { - String key = at.toString(); - attrEnc.setAttribute(at, attr.getChildText(key)); + if(attrsRoot!=null){ + final List attrs = attrsRoot.getChildren(); + if (attrs != null) { + attrsList = new ArrayList(attrs.size()); + for (Element attr : attrs) { + final GSAttributeEncoder attrEnc = new GSAttributeEncoder(); + for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { + String key = at.toString(); + attrEnc.setAttribute(at, attr.getChildText(key)); + } + attrsList.add(attrEnc); } - attrsList.add(attrEnc); + } - } return attrsList; } @@ -169,19 +173,21 @@ public class RESTResource { List metaLinksList = null; final Element metaLinksRoot = rootElem.getChild("metadataLinks"); - final List metaLinks = metaLinksRoot.getChildren(); - if (metaLinks != null) { - metaLinksList = new ArrayList( - metaLinks.size()); - for (Element metaLink : metaLinks) { - final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); - metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name())); - metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name())); - metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name())); - metaLinksList.add(metaLinkEnc); - } - - } + if(metaLinksRoot!=null){ + final List metaLinks = metaLinksRoot.getChildren(); + if (metaLinks != null) { + metaLinksList = new ArrayList( + metaLinks.size()); + for (Element metaLink : metaLinks) { + final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); + metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name())); + metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name())); + metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name())); + metaLinksList.add(metaLinkEnc); + } + + } + } return metaLinksList; } diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTStyleList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTStyleList.java index 45ed2c3..35ce3a8 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTStyleList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTStyleList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWorkspaceList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWorkspaceList.java index 611f31d..b5ffa62 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWorkspaceList.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWorkspaceList.java @@ -25,8 +25,9 @@ package it.geosolutions.geoserver.rest.decoder; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/utils/JDOMListIterator.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/utils/JDOMListIterator.java index b36272c..d6a7a1a 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/utils/JDOMListIterator.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/utils/JDOMListIterator.java @@ -27,6 +27,7 @@ package it.geosolutions.geoserver.rest.decoder.utils; import java.util.Iterator; import java.util.List; + import org.jdom.Element; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java index 86c9d08..e869bd3 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java @@ -24,13 +24,13 @@ */ package it.geosolutions.geoserver.rest.encoder; -import org.jdom.Element; - import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; +import org.jdom.Element; + /** * Generic Store encoder. * diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java index 03ee64a..48dc583 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java @@ -25,9 +25,10 @@ package it.geosolutions.geoserver.rest.encoder; +import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; + import org.jdom.Element; import org.jdom.filter.Filter; -import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; /** * diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSNamespaceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSNamespaceEncoder.java index d46b1a5..a0527cf 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSNamespaceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSNamespaceEncoder.java @@ -24,11 +24,11 @@ */ package it.geosolutions.geoserver.rest.encoder; -import java.net.URI; - import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; +import java.net.URI; + /** * Namespace XML encoder. Namespaces must contain a non empty prefix and a URI: * diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java index 947150b..2511216 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -111,13 +111,42 @@ public abstract class GSResourceEncoder * @param dimensionInfo */ protected void addMetadataDimension(String key, GSDimensionInfoEncoder dimensionInfo) { - metadata.add(key, dimensionInfo.getRoot()); + addMetadataDimension(key, dimensionInfo, false); + } + + /** + * Add the metadata for a custom dimension. + * + * @param key the name of the dimension + * @param dimensionInfo {@link GSDimensionInfoEncoder} with additional information about the dimension + * @param custom is the dimension custom or not? + */ + protected void addMetadataDimension(String key, GSDimensionInfoEncoder dimensionInfo, boolean custom) { + if(custom){ + metadata.set("custom_dimension_"+key.toUpperCase(), dimensionInfo.getRoot()); + }else{ + metadata.add(key, dimensionInfo.getRoot()); + } } public void setMetadataDimension(String key, GSDimensionInfoEncoder dimensionInfo) { - metadata.set(key, dimensionInfo.getRoot()); + setMetadataDimension(key, dimensionInfo, false); } + /** + * Set the metadata for a custom dimension. + * + * @param key the name of the dimension + * @param dimensionInfo {@link GSDimensionInfoEncoder} with additional information about the dimension + * @param custom is the dimension custom or not? + */ + public void setMetadataDimension(String key, GSDimensionInfoEncoder dimensionInfo, boolean custom) { + if(custom){ + metadata.set("custom_dimension_"+key.toUpperCase(), dimensionInfo.getRoot()); + }else{ + metadata.set(key, dimensionInfo.getRoot()); + } + } /** * @param key * the name of the metadata to add (f.e.: elevation, time) diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSWorkspaceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSWorkspaceEncoder.java index 1ce0bad..bf2e478 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSWorkspaceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSWorkspaceEncoder.java @@ -25,11 +25,11 @@ package it.geosolutions.geoserver.rest.encoder; -import org.jdom.Element; - import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; +import org.jdom.Element; + /** * * @author ETj (etj at geo-solutions.it) diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSImageMosaicEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSImageMosaicEncoder.java index 9530b19..ccef631 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSImageMosaicEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSImageMosaicEncoder.java @@ -38,8 +38,10 @@ import org.jdom.filter.Filter; * Use this encoder for ImageMosaic coverages. * * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it + * @author Simone Giannecchini, GeoSolutions SAS * */ +@SuppressWarnings("unchecked") public class GSImageMosaicEncoder extends GSCoverageEncoder { final private static String STRING = "string"; @@ -98,7 +100,7 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { return null; } - private final static String allowMultithreading = "AllowMultithreading"; + public final static String allowMultithreading = "AllowMultithreading"; /** * @param val @@ -133,7 +135,10 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { return null; } - private final static String filter = "Filter"; + // + // Filter + // + public final static String filter = "Filter"; /** * @param val @@ -151,9 +156,25 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { removeParameter(filterFilter); addFilter(val); } - - private final static String maxAllowedTiles = "MaxAllowedTiles"; - + public Boolean getFilter() { + Element el = getParameter(filterFilter); + if (el != null) { + List values = el.getChildren(); + for (Element elm : values) { + String value = elm.getValue(); + if (!value.equalsIgnoreCase(filter)) { + return Boolean.valueOf(value); + } + } + } + return null; + } + + // + // MaxAllowedTiles + // + public final static String maxAllowedTiles = "MaxAllowedTiles"; + /** * @param val */ @@ -170,8 +191,26 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { removeParameter(maxAllowedTilesFilter); addMaxAllowedTiles(val); } + + public Boolean getMaxAllowedTiles() { + Element el = getParameter(maxAllowedTilesFilter); + if (el != null) { + List values = el.getChildren(); + for (Element elm : values) { + String value = elm.getValue(); + if (!value.equalsIgnoreCase(maxAllowedTiles)) { + return Boolean.valueOf(value); + } + } + } + return null; + } - private final static String inputTransparentColor = "InputTransparentColor"; + + // + // InputTransparentColor + // + public final static String inputTransparentColor = "InputTransparentColor"; /** * @param val @@ -190,8 +229,26 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { removeParameter(inputTransparentColorFilter); addInputTransparentColor(val); } + + public Boolean getInputTransparentColor() { + Element el = getParameter(inputTransparentColorFilter); + if (el != null) { + List values = el.getChildren(); + for (Element elm : values) { + String value = elm.getValue(); + if (!value.equalsIgnoreCase(inputTransparentColor)) { + return Boolean.valueOf(value); + } + } + } + return null; + } - private final static String outputTransparentColor = "OutputTransparentColor"; + + // + // OutputTransparentColor + // + public final static String outputTransparentColor = "OutputTransparentColor"; /** * @param val @@ -210,8 +267,24 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { removeParameter(outputTransparentColorFilter); addInputTransparentColor(val); } - - private final static String SUGGESTED_TILE_SIZE = "SUGGESTED_TILE_SIZE"; + public Boolean getOutputTransparentColor() { + Element el = getParameter(outputTransparentColorFilter); + if (el != null) { + List values = el.getChildren(); + for (Element elm : values) { + String value = elm.getValue(); + if (!value.equalsIgnoreCase(outputTransparentColor)) { + return Boolean.valueOf(value); + } + } + } + return null; + } + + // + // SUGGESTED_TILE_SIZE + // + public final static String SUGGESTED_TILE_SIZE = "SUGGESTED_TILE_SIZE"; /** * @param val @@ -246,7 +319,10 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { return null; } - private final static String USE_JAI_IMAGEREAD = "USE_JAI_IMAGEREAD"; + // + // USE_JAI_IMAGEREAD + // + public final static String USE_JAI_IMAGEREAD = "USE_JAI_IMAGEREAD"; /** * @param val @@ -279,7 +355,10 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { return null; } - private final static String backgroundValues = "BackgroundValues"; + // + // BackgroundValues + // + public final static String backgroundValues = "BackgroundValues"; /** * @param val @@ -297,5 +376,62 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder { removeParameter(backgroundValuesFilter); addBackgroundValues(val); } + public Boolean getBackgroundValues() { + Element el = getParameter(backgroundValuesFilter); + if (el != null) { + List values = el.getChildren(); + for (Element elm : values) { + String value = elm.getValue(); + if (!value.equalsIgnoreCase(backgroundValues)) { + return Boolean.valueOf(value); + } + } + } + return null; + } + // + // SORTING + // + public final static String SORTING = "SORTING"; + + /** + * @param val + */ + protected void addSORTING(final String val) { + final List list = new ArrayList(2); + list.add(new Element(STRING).setText(SORTING)); + list.add(new Element(STRING).setText(val)); + parameters.add(null, list); + } + + private final static Filter SORTING_FILTER = new parametersFilter(SORTING); + + public void setSORTING(final String val) { + removeParameter(SORTING_FILTER); + addBackgroundValues(val); + } + + // + // SORTING + // + + public final static String MERGEBEHAVIOR = "MergeBehavior"; + + /** + * @param val + */ + protected void addMergeBehavior(final String val) { + final List list = new ArrayList(2); + list.add(new Element(STRING).setText(MERGEBEHAVIOR)); + list.add(new Element(STRING).setText(val)); + parameters.add(null, list); + } + + private final static Filter MERGEBEHAVIOR_FILTER = new parametersFilter(MERGEBEHAVIOR); + + public void setMergeBehavior(final String val) { + removeParameter(MERGEBEHAVIOR_FILTER); + addBackgroundValues(val); + } } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSShapefileDatastoreEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSShapefileDatastoreEncoder.java index cc6794a..13f984b 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSShapefileDatastoreEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSShapefileDatastoreEncoder.java @@ -24,13 +24,13 @@ */ package it.geosolutions.geoserver.rest.encoder.datastore; +import it.geosolutions.geoserver.rest.decoder.RESTDataStore; +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; + import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; -import it.geosolutions.geoserver.rest.decoder.RESTDataStore; -import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; - /** * Encoder for a {@value #TYPE} datastore. * diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSAttributeEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSAttributeEncoder.java index 539bc30..8731b61 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSAttributeEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSAttributeEncoder.java @@ -24,15 +24,15 @@ */ package it.geosolutions.geoserver.rest.encoder.feature; +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; +import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; + import java.util.Map; import java.util.Map.Entry; import org.jdom.Element; import org.jdom.filter.Filter; -import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; -import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; - /** * * @author carlo cancellieri - GeoSolutions diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/GSDimensionInfoEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/GSDimensionInfoEncoder.java index 048c23e..50e03df 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/GSDimensionInfoEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/GSDimensionInfoEncoder.java @@ -53,12 +53,7 @@ public class GSDimensionInfoEncoder extends XmlElement{ */ public enum Presentation { LIST, - CONTINUOUS_INTERVAL - } - /** - * Enum for presentation mode which needs arguments - */ - public enum PresentationDiscrete { + CONTINUOUS_INTERVAL, DISCRETE_INTERVAL } @@ -87,38 +82,40 @@ public class GSDimensionInfoEncoder extends XmlElement{ this.enabled=Boolean.TRUE; } - /** - * @param pres - */ - protected void addPresentation(final Presentation pres){ - if (enabled){ - add(PRESENTATION,pres.toString()); - } - } - public void setPresentation(final Presentation pres){ - if (enabled){ - set(PRESENTATION,pres.toString()); - remove(RESOLUTION); - } + setPresentation(pres, null); } /** * @param pres * @param interval */ - protected void addPresentation(final PresentationDiscrete pres, final BigDecimal interval){ + protected void addPresentation(final Presentation pres, final BigDecimal interval){ if (enabled){ add(PRESENTATION,pres.toString()); - add(RESOLUTION,String.valueOf(interval)); + if(pres==Presentation.DISCRETE_INTERVAL){ + if(pres==Presentation.DISCRETE_INTERVAL&&interval==null){ + throw new IllegalArgumentException("Null interval was provided while trying to set the presentation to discrete interval."); + } + add(RESOLUTION,String.valueOf(interval)); + } else { + remove(RESOLUTION); + } } } - public void setPresentation(final PresentationDiscrete pres, final BigDecimal interval){ - if (enabled){ - set(PRESENTATION,pres.toString()); - set(RESOLUTION,String.valueOf(interval)); - } + public void setPresentation(final Presentation pres, final BigDecimal interval){ + if (enabled){ + set(PRESENTATION,pres.toString()); + if(pres==Presentation.DISCRETE_INTERVAL){ + if(pres==Presentation.DISCRETE_INTERVAL&&interval==null){ + throw new IllegalArgumentException("Null interval was provided while trying to set the presentation to discrete interval."); + } + set(RESOLUTION,String.valueOf(interval)); + } else { + remove(RESOLUTION); + } + } } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java index b7c36ee..8b6fa99 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java @@ -24,14 +24,14 @@ */ package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; + import java.util.List; import org.jdom.Element; import org.jdom.filter.Filter; -import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; -import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; - /** * GSVirtualTableEncoder - Encodes a metadata VirtualTable for a GeoServer * featureType. diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java index 40efe52..a18ef4e 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java @@ -24,15 +24,12 @@ */ package it.geosolutions.geoserver.rest.encoder.metadatalink; -import java.util.Map; -import java.util.Map.Entry; +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; import org.jdom.Element; import org.jdom.filter.Filter; -import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; -import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; - /** * GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource * (feature type /coverage), as follows: diff --git a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStoreManager.java b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStoreManager.java index 8db71ce..758c375 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStoreManager.java +++ b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStoreManager.java @@ -25,7 +25,6 @@ package it.geosolutions.geoserver.rest.manager; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.Format; -import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType; import it.geosolutions.geoserver.rest.HTTPUtils; import it.geosolutions.geoserver.rest.encoder.GSAbstractStoreEncoder; import it.geosolutions.geoserver.rest.encoder.datastore.GSAbstractDatastoreEncoder; diff --git a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStructuredGridCoverageReaderManager.java b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStructuredGridCoverageReaderManager.java index bc412b4..fa49b42 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStructuredGridCoverageReaderManager.java +++ b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStructuredGridCoverageReaderManager.java @@ -381,6 +381,26 @@ public class GeoServerRESTStructuredGridCoverageReaderManager extends GeoServerR return null; } + /** + * Get information about all the granules for a coverage with optional filter and paging. + * + * @param workspace the GeoServer workspace + * @param coverageStore the GeoServer coverageStore + * @param coverage the name of the target coverage + * + * @return null in case the call does not succeed, or an instance of {@link RESTStructuredCoverageGranulesList}. + * + * @throws MalformedURLException + * @throws UnsupportedEncodingException + * + * @since geoserver-2.4.0, geoserver-mng-1.6.0 + */ + public RESTStructuredCoverageGranulesList getGranules(final String workspace, + String coverageStore, String coverage) + throws MalformedURLException, UnsupportedEncodingException { + return getGranules(workspace, coverageStore, coverage, null, null, null); + } + /** * Get information about the granules for a coverage with optional filter and paging. * diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureDimensionInfoEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureDimensionInfoEncoderTest.java index 0a80c5f..c86b220 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureDimensionInfoEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureDimensionInfoEncoderTest.java @@ -2,7 +2,6 @@ package it.geosolutions.geoserver.rest.encoder.feature; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; -import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.PresentationDiscrete; import it.geosolutions.geoserver.rest.encoder.metadata.GSFeatureDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; @@ -25,10 +24,10 @@ public class GSFeatureDimensionInfoEncoderTest { // LOGGER.info(encoder.toString()); elevationDimension.setPresentation( - PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); + Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); elevationDimension.setPresentation( - PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(12)); + Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(12)); List elList = ElementUtils.search( elevationDimension.getRoot(), new Filter() { @@ -44,8 +43,8 @@ public class GSFeatureDimensionInfoEncoderTest { } }); // using set we get only one element called - // PresentationDiscrete.DISCRETE_INTERVAL - Assert.assertEquals(Integer.valueOf(elList.size()), Integer.valueOf(1)); + // Presentation.DISCRETE_INTERVAL + Assert.assertEquals(elList.size(), 1); elevationDimension.setPresentation(Presentation.LIST); @@ -65,7 +64,7 @@ public class GSFeatureDimensionInfoEncoderTest { } }); - Assert.assertEquals(Integer.valueOf(elList.size()), Integer.valueOf(0)); + Assert.assertEquals(elList.size(), 0); } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java index 7ce9ef5..4c592bd 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java @@ -26,7 +26,6 @@ import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; -import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.PresentationDiscrete; import it.geosolutions.geoserver.rest.encoder.metadata.GSFeatureDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTGeometryEncoder; @@ -155,21 +154,21 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest { GSFeatureDimensionInfoEncoder dim2 = new GSFeatureDimensionInfoEncoder("ELE"); - encoder.addMetadata("elevation", dim2); - dim2.setPresentation(PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); + encoder.setMetadataDimension("elevation", dim2); + dim2.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); Element el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION); Assert.assertNotNull(el); LOGGER.info("contains_key:" + el.toString()); - dim2.setPresentation(PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(12)); + dim2.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(12)); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.RESOLUTION); Assert.assertNotNull(el); Assert.assertEquals("12", el.getText()); dim2.setPresentation(Presentation.CONTINUOUS_INTERVAL); - encoder.setMetadata("time", new GSFeatureDimensionInfoEncoder("time")); + encoder.setMetadataDimension("time", new GSFeatureDimensionInfoEncoder("time")); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION); Assert.assertNotNull(el); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.RESOLUTION); @@ -220,9 +219,9 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest { // LOGGER.info(encoder.toString()); final String metadata = "elevation"; - encoder.setMetadata(metadata, elevationDimension); + encoder.setMetadataDimension(metadata, elevationDimension); - elevationDimension.setPresentation(PresentationDiscrete.DISCRETE_INTERVAL, + elevationDimension.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); if (LOGGER.isInfoEnabled()) diff --git a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java b/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java index ae6953b..df2bd01 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java @@ -1,33 +1,18 @@ -/* - * GeoTools - The Open Source Java GIS Toolkit - * http://geotools.org - * - * (C) 2002-2011, Open Source Geospatial Foundation (OSGeo) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - */ package it.geosolutions.geoserver.rest.manager; import it.geosolutions.geoserver.rest.GeoserverRESTTest; +import it.geosolutions.geoserver.rest.decoder.RESTCoverage; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList.RESTStructuredCoverageGranule; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema.RESTStructuredCoverageIndexAttribute; -import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; import it.geosolutions.geoserver.rest.encoder.coverage.GSImageMosaicEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; import java.net.URL; import java.util.Iterator; +import java.util.Map; import org.junit.Assert; import org.junit.Test; @@ -53,18 +38,25 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { if (!enabled()) { return; } + // crea the manager GeoServerRESTStructuredGridCoverageReaderManager manager = new GeoServerRESTStructuredGridCoverageReaderManager(new URL(RESTURL), RESTUSER, RESTPW); // create mosaic - boolean create=manager.create("it.geosolutions", "mosaic",new ClassPathResource("testdata/granules/mosaic.zip").getFile().getAbsolutePath()); + final String workspaceName = "it.geosolutions"; + final String coverageStoreName = "mosaic"; + final String coverageName = "mosaic"; + final String format = "imagemosaic"; + + // upload the mosaic + boolean create=manager.create(workspaceName, coverageStoreName,new ClassPathResource("testdata/granules/mosaic.zip").getFile().getAbsolutePath()); assertTrue(create); // enable dimension - fixDimensions("it.geosolutions", "mosaic", "mosaic"); + fixDimensions(workspaceName, coverageStoreName, coverageName); // check index format - RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema("it.geosolutions", "mosaic","mosaic"); + RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema(workspaceName, coverageName,coverageName); assertTrue(create); assertNotNull(indexFormat); @@ -99,47 +91,47 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { RESTStructuredCoverageGranulesList granulesList = null; RESTStructuredCoverageGranule granule = null; - // get some granules by id -// manager.getGranuleById("it.geosolutions", "mosaic","mosaic","2"); -// assertNotNull(granulesList); -// assertSame(1, granulesList.size()); -// assertFalse(granulesList.isEmpty()); -// RESTStructuredCoverageGranule granule = granulesList.get(0); -// assertNotNull(granule); -// assertEquals(granule.getAttributeByIndex(4), "1250.0"); -// assertEquals(granule.getAttributeByName("elevation"), "1250.0"); // get with paging - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic" , null, 0, 1); + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName , null, 0, 1); assertNotNull(granulesList); assertEquals(1, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, 2); + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, null, null, 2); assertNotNull(granulesList); assertEquals(2, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null); + // get with no paging + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName); assertNotNull(granulesList); assertEquals(4, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", "depth = 100", null, null); + // examples of filtering with CQL + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, "depth = 100", null, null); assertNotNull(granulesList); assertEquals(2, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", "depth = 100 AND date='20081101T0000000'", null, null); + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, "depth = 100 AND date='20081101T0000000'", null, null); + assertNotNull(granulesList); + assertEquals(1, granulesList.size()); + assertFalse(granulesList.isEmpty()); + granule = granulesList.get(0); + assertNotNull(granule); + + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, "location LIKE 'NCOM_wattemp%'", 0, 1); assertNotNull(granulesList); assertEquals(1, granulesList.size()); assertFalse(granulesList.isEmpty()); @@ -148,22 +140,21 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { // remove by filter final String fileLocation = "NCOM_wattemp_100_20081101T0000000_12.tiff"; - boolean result = manager.removeGranulesByCQL("it.geosolutions", "mosaic", "mosaic", "location = '" + fileLocation + "'"); + boolean result = manager.removeGranulesByCQL(workspaceName, coverageStoreName, coverageName, "location = '" + fileLocation + "'"); Assert.assertTrue(result); - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null); + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName); assertNotNull(granulesList); assertEquals(3, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - // Readding that granule - // use reflection to get the store URL since coveragestore only returns name and workspace - result = manager.harvestExternal("it.geosolutions", "mosaic", "imagemosaic", new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() ); + // Readding that granule with harvest + result = manager.harvestExternal(workspaceName, coverageStoreName, format, new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() ); Assert.assertTrue(result); - granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null); + granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, null, null, null); assertNotNull(granulesList); assertEquals(4, granulesList.size()); assertFalse(granulesList.isEmpty()); @@ -171,57 +162,96 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { assertNotNull(granule); } - - + + /** * This method enables the various dimensions for the coverage autocreated for this test. * + *

Notice that * @param wsName the workspace * @param coverageStoreName the coverage store name * @param csname the coverage name */ + private void fixDimensions(String wsName, String coverageStoreName, String csname) { - + // get current config for the coverage to extract the params we want to set again + final RESTCoverage coverage = reader.getCoverage(wsName, coverageStoreName, csname); + final Map params = coverage.getParametersList(); + + // prepare and fill the encoder final GSImageMosaicEncoder coverageEncoder = new GSImageMosaicEncoder(); - /* - * unused in mosaic creation - * this is only useful if you want to modify an existing coverage: - * publisher.configureCoverage(ce, wsname, csname); - * or create a new one from an existing store: - * publisher.createCoverage(ce, wsname, csname); - */ coverageEncoder.setName("mosaic"); - coverageEncoder.setAllowMultithreading(true); - coverageEncoder.setBackgroundValues(""); - coverageEncoder.setFilter(""); - coverageEncoder.setInputTransparentColor(""); - coverageEncoder.setLatLonBoundingBox(-180, -90, 180, 90, "EPSG:4326"); - coverageEncoder.setMaxAllowedTiles(11); - coverageEncoder.setNativeBoundingBox(-180, -90, 180, 90, "EPSG:4326"); - coverageEncoder.setProjectionPolicy(ProjectionPolicy.NONE); - coverageEncoder.setSRS("EPSG:4326"); - - // activate time + // set the current params, change here if you want to change the values + for(Map.Entry entry:params.entrySet()){ + if(entry.getKey().equals(GSImageMosaicEncoder.allowMultithreading)){ + coverageEncoder.setAllowMultithreading(Boolean.parseBoolean(entry.getValue())); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.backgroundValues)){ + coverageEncoder.setBackgroundValues(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.filter)){ + coverageEncoder.setFilter(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.inputTransparentColor)){ + coverageEncoder.setInputTransparentColor(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.maxAllowedTiles)){ + coverageEncoder.setMaxAllowedTiles(Integer.parseInt(entry.getValue())); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.MERGEBEHAVIOR)){ + coverageEncoder.setMergeBehavior(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.outputTransparentColor)){ + coverageEncoder.setOutputTransparentColor(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.SORTING)){ + coverageEncoder.setSORTING(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.SUGGESTED_TILE_SIZE)){ + coverageEncoder.setSUGGESTED_TILE_SIZE(entry.getValue()); + continue; + } + + if(entry.getKey().equals(GSImageMosaicEncoder.USE_JAI_IMAGEREAD)){ + coverageEncoder.setUSE_JAI_IMAGEREAD(Boolean.parseBoolean(entry.getValue())); + continue; + } + + } + + + // activate time dimension final GSDimensionInfoEncoder time=new GSDimensionInfoEncoder(true); time.setUnit("Seconds"); time.setUnitSymbol("s"); - time.setPresentation(Presentation.LIST); + time.setPresentation(Presentation.CONTINUOUS_INTERVAL); coverageEncoder.setMetadataDimension("time", time); - // activate date - final GSDimensionInfoEncoder date=new GSDimensionInfoEncoder(true); - date.setPresentation(Presentation.LIST); - coverageEncoder.setMetadataDimension("custom_dimension_DATE", date); - - // activate depth - final GSDimensionInfoEncoder depth=new GSDimensionInfoEncoder(true); - depth.setPresentation(Presentation.LIST); - depth.setUnit("Meters"); - depth.setUnitSymbol("m"); - coverageEncoder.setMetadataDimension("custom_dimension_DEPTH", depth); - + // activate run which is a custom dimension + final GSDimensionInfoEncoder run=new GSDimensionInfoEncoder(true); + run.setPresentation(Presentation.LIST); + run.setUnit("Hours"); + run.setUnitSymbol("h"); + coverageEncoder.setMetadataDimension("run", run,true); + // persiste the changes boolean config=publisher.configureCoverage(coverageEncoder, wsName, csname); assertTrue(config);