#90, Improving support for ImageMosaics

This commit is contained in:
Simone Giannecchini 2013-08-01 19:54:26 +02:00
parent 4f0862b308
commit 5277fe9f6c
35 changed files with 553 additions and 193 deletions

View File

@ -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 workspace
* @param resourceName the name of the resource to use (featureStore or coverageStore name) * @param resourceName the name of the resource to use (featureStore or coverageStore name)

View File

@ -26,8 +26,8 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMListIterator; import it.geosolutions.geoserver.rest.decoder.utils.JDOMListIterator;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;

View File

@ -25,9 +25,12 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import it.geosolutions.geoserver.rest.encoder.feature.FeatureTypeAttribute;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.jdom.Element; import org.jdom.Element;
@ -206,6 +209,136 @@ public class RESTCoverage extends RESTResource {
return listDim; 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() { // public String getStoreName() {
// return rootElem.getChild("store").getChildText("name"); // return rootElem.getChild("store").getChildText("name");
// } // }

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -26,6 +26,7 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -29,6 +29,7 @@ import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMListIterator; import it.geosolutions.geoserver.rest.decoder.utils.JDOMListIterator;
import java.util.Iterator; import java.util.Iterator;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -26,6 +26,7 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.Namespace; import org.jdom.Namespace;

View File

@ -26,6 +26,7 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -26,9 +26,10 @@ package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import org.jdom.Element;
import java.net.URI; import java.net.URI;
import org.jdom.Element;
/** /**
* Parse <TT>namespace</TT>s returned as XML REST objects. * Parse <TT>namespace</TT>s returned as XML REST objects.
* *

View File

@ -26,6 +26,7 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;

View File

@ -25,10 +25,10 @@
package it.geosolutions.geoserver.rest.decoder; package it.geosolutions.geoserver.rest.decoder;
import org.jdom.Element;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element;
/** /**
* Parse a <TT>published</TT> returned as XML REST objects. * Parse a <TT>published</TT> returned as XML REST objects.

View File

@ -123,15 +123,17 @@ public class RESTResource {
List<Map<FeatureTypeAttribute, String>> attrsList = null; List<Map<FeatureTypeAttribute, String>> attrsList = null;
final Element attrsRoot = rootElem.getChild("attributes"); final Element attrsRoot = rootElem.getChild("attributes");
final List<Element> attrs = attrsRoot.getChildren(); if(attrsRoot!=null){
if (attrs != null) { final List<Element> attrs = attrsRoot.getChildren();
attrsList = new ArrayList<Map<FeatureTypeAttribute, String>>(attrs.size()); if (attrs != null) {
for (Element attr : attrs) { attrsList = new ArrayList<Map<FeatureTypeAttribute, String>>(attrs.size());
Map<FeatureTypeAttribute, String> attrsMap = new HashMap<FeatureTypeAttribute, String>(); for (Element attr : attrs) {
attrsList.add(attrsMap); Map<FeatureTypeAttribute, String> attrsMap = new HashMap<FeatureTypeAttribute, String>();
for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { attrsList.add(attrsMap);
String key = at.toString(); for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) {
attrsMap.put(at, attr.getChildText(key)); String key = at.toString();
attrsMap.put(at, attr.getChildText(key));
}
} }
} }
} }
@ -142,18 +144,20 @@ public class RESTResource {
List<GSAttributeEncoder> attrsList = null; List<GSAttributeEncoder> attrsList = null;
final Element attrsRoot = rootElem.getChild("attributes"); final Element attrsRoot = rootElem.getChild("attributes");
final List<Element> attrs = attrsRoot.getChildren(); if(attrsRoot!=null){
if (attrs != null) { final List<Element> attrs = attrsRoot.getChildren();
attrsList = new ArrayList<GSAttributeEncoder>(attrs.size()); if (attrs != null) {
for (Element attr : attrs) { attrsList = new ArrayList<GSAttributeEncoder>(attrs.size());
final GSAttributeEncoder attrEnc = new GSAttributeEncoder(); for (Element attr : attrs) {
for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { final GSAttributeEncoder attrEnc = new GSAttributeEncoder();
String key = at.toString(); for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) {
attrEnc.setAttribute(at, attr.getChildText(key)); String key = at.toString();
attrEnc.setAttribute(at, attr.getChildText(key));
}
attrsList.add(attrEnc);
} }
attrsList.add(attrEnc);
}
}
} }
return attrsList; return attrsList;
} }
@ -169,19 +173,21 @@ public class RESTResource {
List<GSMetadataLinkInfoEncoder> metaLinksList = null; List<GSMetadataLinkInfoEncoder> metaLinksList = null;
final Element metaLinksRoot = rootElem.getChild("metadataLinks"); final Element metaLinksRoot = rootElem.getChild("metadataLinks");
final List<Element> metaLinks = metaLinksRoot.getChildren(); if(metaLinksRoot!=null){
if (metaLinks != null) { final List<Element> metaLinks = metaLinksRoot.getChildren();
metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>( if (metaLinks != null) {
metaLinks.size()); metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>(
for (Element metaLink : metaLinks) { metaLinks.size());
final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); for (Element metaLink : metaLinks) {
metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name())); final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder();
metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name())); metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name()));
metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name())); metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name()));
metaLinksList.add(metaLinkEnc); metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name()));
} metaLinksList.add(metaLinkEnc);
}
} }
}
return metaLinksList; return metaLinksList;
} }

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -25,8 +25,9 @@
package it.geosolutions.geoserver.rest.decoder; 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.JDOMBuilder;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;

View File

@ -27,6 +27,7 @@ package it.geosolutions.geoserver.rest.decoder.utils;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import org.jdom.Element; import org.jdom.Element;
/** /**

View File

@ -24,13 +24,13 @@
*/ */
package it.geosolutions.geoserver.rest.encoder; package it.geosolutions.geoserver.rest.encoder;
import org.jdom.Element;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType;
import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
import org.jdom.Element;
/** /**
* Generic Store encoder. * Generic Store encoder.
* *

View File

@ -25,9 +25,10 @@
package it.geosolutions.geoserver.rest.encoder; package it.geosolutions.geoserver.rest.encoder;
import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.filter.Filter; import org.jdom.filter.Filter;
import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
/** /**
* *

View File

@ -24,11 +24,11 @@
*/ */
package it.geosolutions.geoserver.rest.encoder; 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.ElementUtils;
import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; 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: * Namespace XML encoder. Namespaces must contain a non empty prefix and a URI:
* *

View File

@ -111,13 +111,42 @@ public abstract class GSResourceEncoder
* @param dimensionInfo * @param dimensionInfo
*/ */
protected void addMetadataDimension(String key, GSDimensionInfoEncoder 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) { 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 * @param key
* the name of the metadata to add (f.e.: elevation, time) * the name of the metadata to add (f.e.: elevation, time)

View File

@ -25,11 +25,11 @@
package it.geosolutions.geoserver.rest.encoder; 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.ElementUtils;
import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
import org.jdom.Element;
/** /**
* *
* @author ETj (etj at geo-solutions.it) * @author ETj (etj at geo-solutions.it)

View File

@ -38,8 +38,10 @@ import org.jdom.filter.Filter;
* Use this encoder for ImageMosaic coverages. * Use this encoder for ImageMosaic coverages.
* *
* @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it
* @author Simone Giannecchini, GeoSolutions SAS
* *
*/ */
@SuppressWarnings("unchecked")
public class GSImageMosaicEncoder extends GSCoverageEncoder { public class GSImageMosaicEncoder extends GSCoverageEncoder {
final private static String STRING = "string"; final private static String STRING = "string";
@ -98,7 +100,7 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
return null; return null;
} }
private final static String allowMultithreading = "AllowMultithreading"; public final static String allowMultithreading = "AllowMultithreading";
/** /**
* @param val * @param val
@ -133,7 +135,10 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
return null; return null;
} }
private final static String filter = "Filter"; //
// Filter
//
public final static String filter = "Filter";
/** /**
* @param val * @param val
@ -151,8 +156,24 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
removeParameter(filterFilter); removeParameter(filterFilter);
addFilter(val); addFilter(val);
} }
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;
}
private final static String maxAllowedTiles = "MaxAllowedTiles"; //
// MaxAllowedTiles
//
public final static String maxAllowedTiles = "MaxAllowedTiles";
/** /**
* @param val * @param val
@ -171,7 +192,25 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
addMaxAllowedTiles(val); addMaxAllowedTiles(val);
} }
private final static String inputTransparentColor = "InputTransparentColor"; 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;
}
//
// InputTransparentColor
//
public final static String inputTransparentColor = "InputTransparentColor";
/** /**
* @param val * @param val
@ -191,7 +230,25 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
addInputTransparentColor(val); addInputTransparentColor(val);
} }
private final static String outputTransparentColor = "OutputTransparentColor"; 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;
}
//
// OutputTransparentColor
//
public final static String outputTransparentColor = "OutputTransparentColor";
/** /**
* @param val * @param val
@ -210,8 +267,24 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
removeParameter(outputTransparentColorFilter); removeParameter(outputTransparentColorFilter);
addInputTransparentColor(val); addInputTransparentColor(val);
} }
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;
}
private final static String SUGGESTED_TILE_SIZE = "SUGGESTED_TILE_SIZE"; //
// SUGGESTED_TILE_SIZE
//
public final static String SUGGESTED_TILE_SIZE = "SUGGESTED_TILE_SIZE";
/** /**
* @param val * @param val
@ -246,7 +319,10 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
return null; 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 * @param val
@ -279,7 +355,10 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
return null; return null;
} }
private final static String backgroundValues = "BackgroundValues"; //
// BackgroundValues
//
public final static String backgroundValues = "BackgroundValues";
/** /**
* @param val * @param val
@ -297,5 +376,62 @@ public class GSImageMosaicEncoder extends GSCoverageEncoder {
removeParameter(backgroundValuesFilter); removeParameter(backgroundValuesFilter);
addBackgroundValues(val); 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);
}
} }

View File

@ -24,13 +24,13 @@
*/ */
package it.geosolutions.geoserver.rest.encoder.datastore; 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.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.nio.charset.Charset; 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. * Encoder for a {@value #TYPE} datastore.
* *

View File

@ -24,15 +24,15 @@
*/ */
package it.geosolutions.geoserver.rest.encoder.feature; 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;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.filter.Filter; 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 * @author carlo cancellieri - GeoSolutions

View File

@ -53,12 +53,7 @@ public class GSDimensionInfoEncoder extends XmlElement{
*/ */
public enum Presentation { public enum Presentation {
LIST, LIST,
CONTINUOUS_INTERVAL CONTINUOUS_INTERVAL,
}
/**
* Enum for presentation mode which needs arguments
*/
public enum PresentationDiscrete {
DISCRETE_INTERVAL DISCRETE_INTERVAL
} }
@ -87,38 +82,40 @@ public class GSDimensionInfoEncoder extends XmlElement{
this.enabled=Boolean.TRUE; this.enabled=Boolean.TRUE;
} }
/**
* @param pres
*/
protected void addPresentation(final Presentation pres){
if (enabled){
add(PRESENTATION,pres.toString());
}
}
public void setPresentation(final Presentation pres){ public void setPresentation(final Presentation pres){
if (enabled){ setPresentation(pres, null);
set(PRESENTATION,pres.toString());
remove(RESOLUTION);
}
} }
/** /**
* @param pres * @param pres
* @param interval * @param interval
*/ */
protected void addPresentation(final PresentationDiscrete pres, final BigDecimal interval){ protected void addPresentation(final Presentation pres, final BigDecimal interval){
if (enabled){ if (enabled){
add(PRESENTATION,pres.toString()); 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){ public void setPresentation(final Presentation pres, final BigDecimal interval){
if (enabled){ if (enabled){
set(PRESENTATION,pres.toString()); set(PRESENTATION,pres.toString());
set(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.");
}
set(RESOLUTION,String.valueOf(interval));
} else {
remove(RESOLUTION);
}
}
} }

View File

@ -24,14 +24,14 @@
*/ */
package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; 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 java.util.List;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.filter.Filter; 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 * GSVirtualTableEncoder - Encodes a metadata VirtualTable for a GeoServer
* featureType. * featureType.

View File

@ -24,15 +24,12 @@
*/ */
package it.geosolutions.geoserver.rest.encoder.metadatalink; package it.geosolutions.geoserver.rest.encoder.metadatalink;
import java.util.Map; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
import java.util.Map.Entry; import it.geosolutions.geoserver.rest.encoder.utils.XmlElement;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.filter.Filter; 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 * GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource
* (feature type /coverage), as follows: * (feature type /coverage), as follows:

View File

@ -25,7 +25,6 @@
package it.geosolutions.geoserver.rest.manager; package it.geosolutions.geoserver.rest.manager;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.Format; 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.HTTPUtils;
import it.geosolutions.geoserver.rest.encoder.GSAbstractStoreEncoder; import it.geosolutions.geoserver.rest.encoder.GSAbstractStoreEncoder;
import it.geosolutions.geoserver.rest.encoder.datastore.GSAbstractDatastoreEncoder; import it.geosolutions.geoserver.rest.encoder.datastore.GSAbstractDatastoreEncoder;

View File

@ -381,6 +381,26 @@ public class GeoServerRESTStructuredGridCoverageReaderManager extends GeoServerR
return null; 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. * Get information about the granules for a coverage with optional filter and paging.
* *

View File

@ -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;
import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; 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.GSFeatureDimensionInfoEncoder;
import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
@ -25,10 +24,10 @@ public class GSFeatureDimensionInfoEncoderTest {
// LOGGER.info(encoder.toString()); // LOGGER.info(encoder.toString());
elevationDimension.setPresentation( elevationDimension.setPresentation(
PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10));
elevationDimension.setPresentation( elevationDimension.setPresentation(
PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(12)); Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(12));
List<Element> elList = ElementUtils.search( List<Element> elList = ElementUtils.search(
elevationDimension.getRoot(), new Filter() { elevationDimension.getRoot(), new Filter() {
@ -44,8 +43,8 @@ public class GSFeatureDimensionInfoEncoderTest {
} }
}); });
// using set we get only one element called // using set we get only one element called
// PresentationDiscrete.DISCRETE_INTERVAL // Presentation.DISCRETE_INTERVAL
Assert.assertEquals(Integer.valueOf(elList.size()), Integer.valueOf(1)); Assert.assertEquals(elList.size(), 1);
elevationDimension.setPresentation(Presentation.LIST); 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);
} }

View File

@ -26,7 +26,6 @@ import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder;
import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; 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.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.GSFeatureDimensionInfoEncoder;
import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder;
import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTGeometryEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTGeometryEncoder;
@ -155,21 +154,21 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest {
GSFeatureDimensionInfoEncoder dim2 = new GSFeatureDimensionInfoEncoder("ELE"); GSFeatureDimensionInfoEncoder dim2 = new GSFeatureDimensionInfoEncoder("ELE");
encoder.addMetadata("elevation", dim2); encoder.setMetadataDimension("elevation", dim2);
dim2.setPresentation(PresentationDiscrete.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); dim2.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10));
Element el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION); Element el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION);
Assert.assertNotNull(el); Assert.assertNotNull(el);
LOGGER.info("contains_key:" + el.toString()); 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); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.RESOLUTION);
Assert.assertNotNull(el); Assert.assertNotNull(el);
Assert.assertEquals("12", el.getText()); Assert.assertEquals("12", el.getText());
dim2.setPresentation(Presentation.CONTINUOUS_INTERVAL); dim2.setPresentation(Presentation.CONTINUOUS_INTERVAL);
encoder.setMetadata("time", new GSFeatureDimensionInfoEncoder("time")); encoder.setMetadataDimension("time", new GSFeatureDimensionInfoEncoder("time"));
el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION);
Assert.assertNotNull(el); Assert.assertNotNull(el);
el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.RESOLUTION); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.RESOLUTION);
@ -220,9 +219,9 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest {
// LOGGER.info(encoder.toString()); // LOGGER.info(encoder.toString());
final String metadata = "elevation"; 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)); BigDecimal.valueOf(10));
if (LOGGER.isInfoEnabled()) if (LOGGER.isInfoEnabled())

View File

@ -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; package it.geosolutions.geoserver.rest.manager;
import it.geosolutions.geoserver.rest.GeoserverRESTTest; 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;
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList.RESTStructuredCoverageGranule; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList.RESTStructuredCoverageGranule;
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema;
import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema.RESTStructuredCoverageIndexAttribute; 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.coverage.GSImageMosaicEncoder;
import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; 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.Presentation;
import java.net.URL; import java.net.URL;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -53,18 +38,25 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest {
if (!enabled()) { if (!enabled()) {
return; return;
} }
// crea the manager
GeoServerRESTStructuredGridCoverageReaderManager manager = GeoServerRESTStructuredGridCoverageReaderManager manager =
new GeoServerRESTStructuredGridCoverageReaderManager(new URL(RESTURL), RESTUSER, RESTPW); new GeoServerRESTStructuredGridCoverageReaderManager(new URL(RESTURL), RESTUSER, RESTPW);
// create mosaic // 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); assertTrue(create);
// enable dimension // enable dimension
fixDimensions("it.geosolutions", "mosaic", "mosaic"); fixDimensions(workspaceName, coverageStoreName, coverageName);
// check index format // check index format
RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema("it.geosolutions", "mosaic","mosaic"); RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema(workspaceName, coverageName,coverageName);
assertTrue(create); assertTrue(create);
assertNotNull(indexFormat); assertNotNull(indexFormat);
@ -99,47 +91,47 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest {
RESTStructuredCoverageGranulesList granulesList = null; RESTStructuredCoverageGranulesList granulesList = null;
RESTStructuredCoverageGranule granule = 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 // get with paging
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic" , null, 0, 1); granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName , null, 0, 1);
assertNotNull(granulesList); assertNotNull(granulesList);
assertEquals(1, granulesList.size()); assertEquals(1, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
granule = granulesList.get(0); granule = granulesList.get(0);
assertNotNull(granule); assertNotNull(granule);
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, 2); granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, null, null, 2);
assertNotNull(granulesList); assertNotNull(granulesList);
assertEquals(2, granulesList.size()); assertEquals(2, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
granule = granulesList.get(0); granule = granulesList.get(0);
assertNotNull(granule); assertNotNull(granule);
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null); // get with no paging
granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName);
assertNotNull(granulesList); assertNotNull(granulesList);
assertEquals(4, granulesList.size()); assertEquals(4, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
granule = granulesList.get(0); granule = granulesList.get(0);
assertNotNull(granule); 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); assertNotNull(granulesList);
assertEquals(2, granulesList.size()); assertEquals(2, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
granule = granulesList.get(0); granule = granulesList.get(0);
assertNotNull(granule); 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); assertNotNull(granulesList);
assertEquals(1, granulesList.size()); assertEquals(1, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
@ -148,22 +140,21 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest {
// remove by filter // remove by filter
final String fileLocation = "NCOM_wattemp_100_20081101T0000000_12.tiff"; 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); Assert.assertTrue(result);
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null); granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName);
assertNotNull(granulesList); assertNotNull(granulesList);
assertEquals(3, granulesList.size()); assertEquals(3, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
granule = granulesList.get(0); granule = granulesList.get(0);
assertNotNull(granule); assertNotNull(granule);
// Readding that granule // Readding that granule with harvest
// use reflection to get the store URL since coveragestore only returns name and workspace result = manager.harvestExternal(workspaceName, coverageStoreName, format, new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() );
result = manager.harvestExternal("it.geosolutions", "mosaic", "imagemosaic", new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() );
Assert.assertTrue(result); Assert.assertTrue(result);
granulesList = manager.getGranules("it.geosolutions", "mosaic", "mosaic", null, null, null); granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, null, null, null);
assertNotNull(granulesList); assertNotNull(granulesList);
assertEquals(4, granulesList.size()); assertEquals(4, granulesList.size());
assertFalse(granulesList.isEmpty()); assertFalse(granulesList.isEmpty());
@ -176,52 +167,91 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest {
/** /**
* This method enables the various dimensions for the coverage autocreated for this test. * This method enables the various dimensions for the coverage autocreated for this test.
* *
* <p> Notice that
* @param wsName the workspace * @param wsName the workspace
* @param coverageStoreName the coverage store name * @param coverageStoreName the coverage store name
* @param csname the coverage name * @param csname the coverage name
*/ */
private void fixDimensions(String wsName, String coverageStoreName, String csname) {
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(); 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.setName("mosaic");
coverageEncoder.setAllowMultithreading(true); // set the current params, change here if you want to change the values
coverageEncoder.setBackgroundValues(""); for(Map.Entry<String, String> entry:params.entrySet()){
coverageEncoder.setFilter(""); if(entry.getKey().equals(GSImageMosaicEncoder.allowMultithreading)){
coverageEncoder.setInputTransparentColor(""); coverageEncoder.setAllowMultithreading(Boolean.parseBoolean(entry.getValue()));
coverageEncoder.setLatLonBoundingBox(-180, -90, 180, 90, "EPSG:4326"); continue;
coverageEncoder.setMaxAllowedTiles(11); }
coverageEncoder.setNativeBoundingBox(-180, -90, 180, 90, "EPSG:4326");
coverageEncoder.setProjectionPolicy(ProjectionPolicy.NONE);
coverageEncoder.setSRS("EPSG:4326");
// activate time 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); final GSDimensionInfoEncoder time=new GSDimensionInfoEncoder(true);
time.setUnit("Seconds"); time.setUnit("Seconds");
time.setUnitSymbol("s"); time.setUnitSymbol("s");
time.setPresentation(Presentation.LIST); time.setPresentation(Presentation.CONTINUOUS_INTERVAL);
coverageEncoder.setMetadataDimension("time", time); coverageEncoder.setMetadataDimension("time", time);
// activate date // activate run which is a custom dimension
final GSDimensionInfoEncoder date=new GSDimensionInfoEncoder(true); final GSDimensionInfoEncoder run=new GSDimensionInfoEncoder(true);
date.setPresentation(Presentation.LIST); run.setPresentation(Presentation.LIST);
coverageEncoder.setMetadataDimension("custom_dimension_DATE", date); run.setUnit("Hours");
run.setUnitSymbol("h");
// activate depth coverageEncoder.setMetadataDimension("run", run,true);
final GSDimensionInfoEncoder depth=new GSDimensionInfoEncoder(true);
depth.setPresentation(Presentation.LIST);
depth.setUnit("Meters");
depth.setUnitSymbol("m");
coverageEncoder.setMetadataDimension("custom_dimension_DEPTH", depth);
// persiste the changes
boolean config=publisher.configureCoverage(coverageEncoder, wsName, csname); boolean config=publisher.configureCoverage(coverageEncoder, wsName, csname);
assertTrue(config); assertTrue(config);