Merge pull request #91 from simboss/upm
#90, Improving support for ImageMosaics
This commit is contained in:
commit
ef4e1db865
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<String, String> getParametersList() {
|
||||
Map<String, String> paramsList = new HashMap<String, String>();
|
||||
|
||||
final Element paramsRoot = rootElem.getChild("parameters");
|
||||
if (paramsRoot != null) {
|
||||
final List<Element> params = paramsRoot.getChildren();
|
||||
if (params != null) {
|
||||
for (Element param : params) {
|
||||
final List<Element> 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");
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
package it.geosolutions.geoserver.rest.decoder;
|
||||
|
||||
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
|
||||
|
||||
import org.jdom.Element;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
package it.geosolutions.geoserver.rest.decoder;
|
||||
|
||||
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
|
||||
|
||||
import org.jdom.Element;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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 <TT>namespace</TT>s returned as XML REST objects.
|
||||
*
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 <TT>published</TT> returned as XML REST objects.
|
||||
|
||||
@ -123,15 +123,17 @@ public class RESTResource {
|
||||
List<Map<FeatureTypeAttribute, String>> attrsList = null;
|
||||
|
||||
final Element attrsRoot = rootElem.getChild("attributes");
|
||||
final List<Element> attrs = attrsRoot.getChildren();
|
||||
if (attrs != null) {
|
||||
attrsList = new ArrayList<Map<FeatureTypeAttribute, String>>(attrs.size());
|
||||
for (Element attr : attrs) {
|
||||
Map<FeatureTypeAttribute, String> attrsMap = new HashMap<FeatureTypeAttribute, String>();
|
||||
attrsList.add(attrsMap);
|
||||
for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) {
|
||||
String key = at.toString();
|
||||
attrsMap.put(at, attr.getChildText(key));
|
||||
if(attrsRoot!=null){
|
||||
final List<Element> attrs = attrsRoot.getChildren();
|
||||
if (attrs != null) {
|
||||
attrsList = new ArrayList<Map<FeatureTypeAttribute, String>>(attrs.size());
|
||||
for (Element attr : attrs) {
|
||||
Map<FeatureTypeAttribute, String> attrsMap = new HashMap<FeatureTypeAttribute, String>();
|
||||
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<GSAttributeEncoder> attrsList = null;
|
||||
|
||||
final Element attrsRoot = rootElem.getChild("attributes");
|
||||
final List<Element> attrs = attrsRoot.getChildren();
|
||||
if (attrs != null) {
|
||||
attrsList = new ArrayList<GSAttributeEncoder>(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<Element> attrs = attrsRoot.getChildren();
|
||||
if (attrs != null) {
|
||||
attrsList = new ArrayList<GSAttributeEncoder>(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<GSMetadataLinkInfoEncoder> metaLinksList = null;
|
||||
|
||||
final Element metaLinksRoot = rootElem.getChild("metadataLinks");
|
||||
final List<Element> metaLinks = metaLinksRoot.getChildren();
|
||||
if (metaLinks != null) {
|
||||
metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>(
|
||||
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<Element> metaLinks = metaLinksRoot.getChildren();
|
||||
if (metaLinks != null) {
|
||||
metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>(
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -27,6 +27,7 @@ package it.geosolutions.geoserver.rest.decoder.utils;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.jdom.Element;
|
||||
|
||||
/**
|
||||
|
||||
@ -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.
|
||||
*
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
@ -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:
|
||||
*
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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<Element> 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<Element> 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<Element> 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<Element> 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<Element> 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<Element> list = new ArrayList<Element>(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<Element> list = new ArrayList<Element>(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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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.
|
||||
*
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 <code>null</code> 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.
|
||||
*
|
||||
|
||||
@ -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<Element> 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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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.
|
||||
*
|
||||
* <p> 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<String, String> 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<String, String> 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);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user