diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index 4a49f1d..374bc8b 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -1821,12 +1821,9 @@ public class GeoServerRESTPublisher { throw new IllegalArgumentException("no coverageEncoder provided for mosaic " + mosaicDir); } - // override name to match the FIRST configured coverage - String coverageName = coverageEncoder.getName(); if (layerEncoder == null) { - throw new IllegalArgumentException("no layerEncoder provided for " + workspace + ":" - + coverageName); + throw new IllegalArgumentException("no layerEncoder provided for " + mosaicDir); } RESTCoverageStore store = createExternaMosaicDatastore(workspace, storeName, mosaicDir, @@ -1835,6 +1832,13 @@ public class GeoServerRESTPublisher { if (store == null) { return false; } + + // override name to match the FIRST configured coverage + String coverageName = coverageEncoder.getName(); + if (coverageName==null){ + coverageName=mosaicDir.getName(); + coverageEncoder.setName(coverageName); + } if (!createCoverage(workspace, storeName, coverageEncoder)) { if (LOGGER.isErrorEnabled()) LOGGER.error("Unable to create a coverage for the store:" + coverageName); @@ -2129,6 +2133,8 @@ public class GeoServerRESTPublisher { */ private void deleteStylesForWorkspace(String workspace) { RESTStyleList styles = styleManager.getStyles(workspace); + if (styles==null) + return; for (NameLinkElem nameLinkElem : styles) { removeStyleInWorkspace(workspace, nameLinkElem.getName(), true); } diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java index 26f8b56..9840c17 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java @@ -26,13 +26,13 @@ package it.geosolutions.geoserver.rest.decoder; import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder; import it.geosolutions.geoserver.rest.encoder.feature.FeatureTypeAttribute; import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder; import it.geosolutions.geoserver.rest.encoder.metadatalink.GSMetadataLinkInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadatalink.ResourceMetadataLinkInfo; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -43,8 +43,9 @@ import org.jdom.Namespace; * Parse a resource (FeatureType or Coverage) returned as XML REST objects. * * @author etj - * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | - * emmanuel.blondel@fao.org + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org + * @author Henry Rotzoll + * */ public class RESTResource { protected final Element rootElem; @@ -74,23 +75,22 @@ public class RESTResource { return rootElem.getChildText("abstract"); } - public List getKeywords(){ - List kwdsList = null; - - final Element keywordsRoot = rootElem.getChild("keywords"); - if(keywordsRoot != null){ - final List keywords = keywordsRoot.getChildren(); - if(keywords != null){ - kwdsList = new ArrayList(keywords.size()); - for(Element keyword : keywords){ - kwdsList.add(keyword.getValue()); - } - } - } - return kwdsList; + public List getKeywords() { + List kwdsList = null; + + final Element keywordsRoot = rootElem.getChild("keywords"); + if (keywordsRoot != null) { + final List keywords = keywordsRoot.getChildren(); + if (keywords != null) { + kwdsList = new ArrayList(keywords.size()); + for (Element keyword : keywords) { + kwdsList.add(keyword.getValue()); + } + } + } + return kwdsList; } - - + public String getNameSpace() { return rootElem.getChild("namespace").getChildText("name"); } @@ -154,33 +154,77 @@ public class RESTResource { throw new UnsupportedOperationException("This method is specific for RESTFeatureType"); } - /** - * Decodes the list of MetadataLinkInfo from the GeoServer Resource - * - * @author Emmanuel Blondel - * - * @return the list of GSMetadataLinkEncoder - */ - public List getEncodedMetadataLinkInfoList() { - List metaLinksList = null; + /** + * Decodes the list of MetadataLinkInfo from the GeoServer Resource + * + * @since gs-2.4.x + * + * @return the list of GSMetadataLinkEncoder + */ + public List getEncodedMetadataLinkInfoList() { + List metaLinksList = null; - final Element metaLinksRoot = rootElem.getChild("metadataLinks"); - if(metaLinksRoot!=null){ - final List metaLinks = metaLinksRoot.getChildren(); - if (metaLinks != null) { - metaLinksList = new ArrayList( - metaLinks.size()); - for (Element metaLink : metaLinks) { - final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); - metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name())); - metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name())); - metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name())); - metaLinksList.add(metaLinkEnc); - } - - } - } - return metaLinksList; - } - -} + final Element metaLinksRoot = rootElem.getChild("metadataLinks"); + if (metaLinksRoot != null) { + final List metaLinks = metaLinksRoot.getChildren(); + if (metaLinks != null) { + metaLinksList = new ArrayList(metaLinks.size()); + for (Element metaLink : metaLinks) { + final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); + metaLinkEnc + .setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name())); + metaLinkEnc.setMetadataType(metaLink + .getChildText(ResourceMetadataLinkInfo.metadataType.name())); + metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content + .name())); + metaLinksList.add(metaLinkEnc); + } + + } + } + return metaLinksList; + } + + /** + * Decodes the list of GSCoverageDimensionEncoder from the GeoServer Resource + * + * @since gs-2.4.x + * + * @return the list of GSCoverageDimensionEncoder + */ + public List getEncodedDimensionsInfoList() { + List dimensionList = null; + final Element dimensionsRoot = rootElem.getChild("dimensions"); + + if (dimensionsRoot != null) { + final List dimensions = dimensionsRoot.getChildren(); + if (dimensions != null) { + dimensionList = new ArrayList(dimensions.size()); + for (Element coverageDimension : dimensions) { + final String name = coverageDimension.getChildText("name"); + final String description = coverageDimension.getChildText("description"); + String rangeMin = null; + String rangeMax = null; + final Element rangeElement = coverageDimension.getChild("range"); + if (rangeElement != null) { + rangeMin = rangeElement.getChildText("min"); + rangeMax = rangeElement.getChildText("max"); + } + final String unit = coverageDimension.getChildText("unit"); + String dimensionTypeName = null; + final Element dimensionTypeElement = coverageDimension + .getChild("dimensionType"); + if (dimensionTypeElement != null) { + dimensionTypeName = dimensionTypeElement.getChildText("name"); + } + final GSCoverageDimensionEncoder coverageDimensionEncoder = new GSCoverageDimensionEncoder( + name, description, rangeMin, rangeMax, unit, dimensionTypeName); + dimensionList.add(coverageDimensionEncoder); + } + + } + } + + return dimensionList; + } +} \ No newline at end of file diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/about/GSVersionDecoder.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/about/GSVersionDecoder.java index ba0c866..410f56e 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/about/GSVersionDecoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/about/GSVersionDecoder.java @@ -132,13 +132,22 @@ public class GSVersionDecoder extends XmlElement { Element e = ElementUtils.contains(geoserver.version, GSAboutResource.VERSION); return VERSION.getVersion(e.getTextTrim()); } + + /** + * @see {@link Enum#compareTo(Enum)} + * @param v + * @return + */ + public int compareTo(VERSION v) { + return getVersion().compareTo(v); + } public static GSVersionDecoder build(String response) { return new GSVersionDecoder(response); } public enum VERSION { - v22(22), v23(23), v24(24), v25(25), ABOVE(9999), UNRECOGNIZED(-1); + UNRECOGNIZED(-1), v22(22), v23(23), v24(24), v25(25), ABOVE(9999); final private int version; diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java index f78ccac..b75b438 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java @@ -41,6 +41,34 @@ import org.jdom.filter.Filter; * * The layer encoder is enabled by default * + * {@code + * + * {LAYERNAME} + * RASTER + * + * {STYLE_NAME} + * + * + * + * {RESOURCE_NAME} + * + * + * + * test + * http://www.fao.org/fileadmin/templates/faoweb/images/FAO-logo.png + * http://www.fao.org/fileadmin/templates/faoweb/images/FAO-logo.png + * 412 + * 77 + * image/png + * + * ... + * + * + * } + * + * + * @since gs-2.2.x */ public class GSLayerEncoder extends PropertyXMLEncoder { @@ -50,7 +78,7 @@ public class GSLayerEncoder extends PropertyXMLEncoder { final private Element stylesEncoder = new Element(STYLES); final private Element authorityURLListEncoder = new Element(AUTHORITY_URLS); - final private Element identifierListEncoder = new Element(IDENTIFIERS); + final private Element identifierListEncoder = new Element(IDENTIFIERS); public GSLayerEncoder() { super("layer"); diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21.java index c9e0267..5c72ff9 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21.java @@ -45,6 +45,8 @@ import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; * * The layer encoder is enabled by default * + * @since gs-2.1.x + * */ public class GSLayerEncoder21 extends GSLayerEncoder { diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java index 2511216..963e2d2 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -47,55 +47,58 @@ import org.jdom.filter.Filter; * * @author ETj (etj at geo-solutions.it) * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it - * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | - * emmanuel.blondel@fao.org + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org + * @author Henry Rotzoll */ -public abstract class GSResourceEncoder - extends PropertyXMLEncoder { - public final static String NAME = "name"; - public final static String NATIVENAME = "nativeName"; - public final static String METADATA="metadata"; - public final static String KEYWORDS="keywords"; - public final static String METADATALINKS="metadataLinks"; +public abstract class GSResourceEncoder extends PropertyXMLEncoder { + public final static String NAME = "name"; - final private GSMetadataEncoder metadata = new GSMetadataEncoder(); - final private Element keywordsListEncoder = new Element(KEYWORDS); - final private Element metadataLinksListEncoder = new Element(METADATALINKS); - - private class GSMetadataEncoder extends NestedElementEncoder{ - public GSMetadataEncoder() { - super(METADATA); - } - } + public final static String NATIVENAME = "nativeName"; - /** - * @param rootName - * Actually 'feature' or 'coverage' - * @see GSFeatureTypeEncoder - * @see GSCoverageEncoder - */ - protected GSResourceEncoder(final String rootName) { - super(rootName); - add("enabled", "true"); + public final static String METADATA = "metadata"; - // Link members to the parent - addContent(metadata.getRoot()); - addContent(keywordsListEncoder); - addContent(metadataLinksListEncoder); - } + public final static String KEYWORDS = "keywords"; - public void setEnabled(boolean enabled) { - set("enabled", (enabled) ? "true" : "false"); - } + public final static String METADATALINKS = "metadataLinks"; - - /** - * @param key - * @param dimensionInfo - */ - protected void addMetadata(String key, XmlElement dimensionInfo) { - metadata.add(key, dimensionInfo.getRoot()); - } + final private GSMetadataEncoder metadata = new GSMetadataEncoder(); + + final private Element keywordsListEncoder = new Element(KEYWORDS); + + final private Element metadataLinksListEncoder = new Element(METADATALINKS); + + private class GSMetadataEncoder extends NestedElementEncoder { + public GSMetadataEncoder() { + super(METADATA); + } + } + + /** + * @param rootName Actually 'feature' or 'coverage' + * @see GSFeatureTypeEncoder + * @see GSCoverageEncoder + */ + protected GSResourceEncoder(final String rootName) { + super(rootName); + add("enabled", "true"); + + // Link members to the parent + addContent(metadata.getRoot()); + addContent(keywordsListEncoder); + addContent(metadataLinksListEncoder); + } + + public void setEnabled(boolean enabled) { + set("enabled", (enabled) ? "true" : "false"); + } + + /** + * @param key + * @param dimensionInfo + */ + protected void addMetadata(String key, XmlElement dimensionInfo) { + metadata.add(key, dimensionInfo.getRoot()); + } /** * @deprecated Use {@link #setMetadataDimension(String, GSDimensionInfoEncoder)} this method will be set as protected for internal use only @@ -105,7 +108,7 @@ public abstract class GSResourceEncoder public void setMetadata(String key, XmlElement dimensionInfo) { metadata.set(key, dimensionInfo.getRoot()); } - + /** * @param key * @param dimensionInfo @@ -113,7 +116,7 @@ public abstract class GSResourceEncoder protected void addMetadataDimension(String key, GSDimensionInfoEncoder dimensionInfo) { addMetadataDimension(key, dimensionInfo, false); } - + /** * Add the metadata for a custom dimension. * @@ -121,17 +124,22 @@ public abstract class GSResourceEncoder * @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{ + 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) { - setMetadataDimension(key, dimensionInfo, false); - } + setMetadataDimension(key, dimensionInfo, false); + } + + public void setMetadataString(String key, String value) { + metadata.set(key, value); + } /** * Set the metadata for a custom dimension. @@ -140,94 +148,141 @@ public abstract class GSResourceEncoder * @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{ + 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) - * @return true if something is removed, false otherwise - */ - public boolean delMetadata(String key) { - return metadata.remove(key); - } + } + /** + * @param key the name of the metadata to add (f.e.: elevation, time) + * @return true if something is removed, false otherwise + */ + public boolean delMetadata(String key) { + return metadata.remove(key); + } - public void addKeyword(String keyword) { - final Element el = new Element("string"); - el.setText(keyword); - keywordsListEncoder.addContent(el); - } + public void addKeyword(String keyword) { + checkKeyword(keyword); + putKeyword(keyword); + } - /** - * delete a keyword from the list - * - * @param keyword - * @return true if something is removed, false otherwise - */ - public boolean delKeyword(final String keyword) { - final Element el = new Element("string"); - el.setText(keyword); - return (keywordsListEncoder.removeContent(new Filter() { - private static final long serialVersionUID = 1L; + /** + * {@code + * + * WCS + * ImageMosaic + * srtm30 KEYWORD}\@language={LANGUAGE}\;\@vocabulary={VOCABULARY}\; + * {KEYWORD_2}\@vocabulary={VOCABULARY_2}\; {KEYWORD_3}\@language={LANGUAGE_3}\; } + * + * @param keyword mandatory keyword ('\' characters are not permitted) + * @param language optional parameter + * @param vocabulary optional parameter + */ + public void addKeyword(final String keyword, final String language, final String vocabulary) { + checkKeyword(keyword); + putKeyword(buildKeyword(keyword, language, vocabulary)); + } - public boolean matches(Object obj) { - if (((Element) obj).getText().equals(keyword)) { - return true; - } - return false; - } - })).size() == 0 ? false : true; - } + /** + * delete a keyword from the list + * + * @param keyword + * @return true if something is removed, false otherwise + */ + public boolean delKeyword(final String keyword) { + return removeKeyword(keyword, null, null); + } - /** - * Adds a MetadataLinkInfo to the GeoServer Resource - * - * @param MetadataLink - * - * @author Emmanuel Blondel - */ - public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) { - metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot()); - } + /** + * delete a keyword from the list + * + * @param keyword + * @return true if something is removed, false otherwise + */ + public boolean delKeyword(final String keyword, final String language, final String vocabulary) { + return removeKeyword(keyword, language, vocabulary); + } - /** - * Adds quickly a MetadataLinkInfo to the GeoServer Resource - * - * @author Emmanuel Blondel - * - * @param type - * @param metadataType - * @param content - */ - public void addMetadataLinkInfo(String type, String metadataType, - String content) { - final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder( - type, metadataType, content); - metadataLinksListEncoder.addContent(mde.getRoot()); - } + private boolean removeKeyword(final String keyword, final String language, + final String vocabulary) { + checkKeyword(keyword); + final String text = buildKeyword(keyword, language, vocabulary); + return (keywordsListEncoder.removeContent(new Filter() { + private static final long serialVersionUID = 1L; + + public boolean matches(Object obj) { + if (((Element) obj).getText().equals(text)) { + return true; + } + return false; + } + })).size() == 0 ? false : true; + } + + private void putKeyword(String keyword) { + final Element el = new Element("string"); + el.setText(keyword); + keywordsListEncoder.addContent(el); + } + + private void checkKeyword(String keyword) { + if (keyword == null || keyword.isEmpty() || keyword.contains("\\")) { + throw new IllegalArgumentException("keyword may not be null, empty or contains '\'"); + } + } + + private String buildKeyword(final String keyword, final String language, final String vocabulary) { + StringBuilder sb = new StringBuilder(keyword); + // \@language={LANGUAGE_3}\; + if (language != null && !language.isEmpty()) { + sb.append("\\@language=").append(language).append("\\;"); + } + // \@vocabulary={VOCABULARY}\; + if (vocabulary != null && !vocabulary.isEmpty()) { + sb.append("\\@vocabulary=").append(vocabulary).append("\\;"); + } + return sb.toString(); + } + + /** + * Adds a MetadataLinkInfo to the GeoServer Resource + * + * @param MetadataLink + * + */ + public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) { + metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot()); + } + + /** + * Adds quickly a MetadataLinkInfo to the GeoServer Resource + * + * + * @param type + * @param metadataType + * @param content + */ + public void addMetadataLinkInfo(String type, String metadataType, String content) { + final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder(type, metadataType, + content); + metadataLinksListEncoder.addContent(mde.getRoot()); + } + + /** + * Deletes a metadataLinkInfo from the list using the metadataURL (MetadataLinkInfo content) + * + * @param metadataURL + * @return true if something is removed, false otherwise + */ + public boolean delMetadataLinkInfo(final String metadataURL) { + return (metadataLinksListEncoder.removeContent(GSMetadataLinkInfoEncoder + .getFilterByContent(metadataURL))).size() == 0 ? false : true; + } - /** - * Deletes a metadataLinkInfo from the list using the metadataURL - * (MetadataLinkInfo content) - * - * @author Emmanuel Blondel - * - * @param metadataURL - * @return true if something is removed, false otherwise - */ - public boolean delMetadataLinkInfo(final String metadataURL) { - return (metadataLinksListEncoder - .removeContent(GSMetadataLinkInfoEncoder - .getFilterByContent(metadataURL))).size() == 0 ? false - : true; - } - - /** * Reprojection policy for a published layer. One of: *
    @@ -236,95 +291,90 @@ public abstract class GSResourceEncoder *
  • {@link #NONE} No reprojection (use native CRS) *
*/ - public enum ProjectionPolicy { + public enum ProjectionPolicy { /** Reproject from native to declared CRS */ REPROJECT_TO_DECLARED, /** Use the declared CRS (ignore native) */ FORCE_DECLARED, /** Keep native */ NONE - } + } - private final static String PROJECTIONPOLICY = "projectionPolicy"; + private final static String PROJECTIONPOLICY = "projectionPolicy"; - /** - * NONE, REPROJECT_TO_DECLARED, FORCE_DECLARED - * - */ - protected void addProjectionPolicy(ProjectionPolicy policy) { - add(PROJECTIONPOLICY, policy.toString()); - } + /** + * NONE, REPROJECT_TO_DECLARED, FORCE_DECLARED + * + */ + protected void addProjectionPolicy(ProjectionPolicy policy) { + add(PROJECTIONPOLICY, policy.toString()); + } - /** - * NONE, REPROJECT_TO_DECLARED, FORCE_DECLARED - */ - public void setProjectionPolicy(ProjectionPolicy policy) { - set(PROJECTIONPOLICY, policy.toString()); - } + /** + * NONE, REPROJECT_TO_DECLARED, FORCE_DECLARED + */ + public void setProjectionPolicy(ProjectionPolicy policy) { + set(PROJECTIONPOLICY, policy.toString()); + } - /** - * Add the 'name' node with a text value from 'name' - * - * @note REQUIRED to configure a resource - */ - protected void addName(final String name) { - add(NAME, name); - } + /** + * Add the 'name' node with a text value from 'name' + * + * @note REQUIRED to configure a resource + */ + protected void addName(final String name) { + add(NAME, name); + } - /** - * Set or modify the 'name' node with a text value from 'name' - * - * @note REQUIRED to configure a resource - */ - public void setName(final String name) { - set(NAME, name); - } + /** + * Set or modify the 'name' node with a text value from 'name' + * + * @note REQUIRED to configure a resource + */ + public void setName(final String name) { + set(NAME, name); + } - public String getName() { - final Element nameNode = ElementUtils.contains(getRoot(), NAME, 1); - if (nameNode != null) - return nameNode.getText(); - else - return null; - } - - - /** - * Add the 'nativename' node with a text value from 'name' - * - * - */ - protected void addNativeName(final String nativename) { - add(NATIVENAME, nativename); - } + public String getName() { + final Element nameNode = ElementUtils.contains(getRoot(), NAME, 1); + if (nameNode != null) + return nameNode.getText(); + else + return null; + } - - /** - * Set or modify the 'nativename' node with a text value from 'name' - * - * @note if not specified, the nativeName will be set with the value of the - * 'name' node. - * - */ - public void setNativeName(final String nativename) { - set(NATIVENAME, nativename); - } + /** + * Add the 'nativename' node with a text value from 'name' + * + * + */ + protected void addNativeName(final String nativename) { + add(NATIVENAME, nativename); + } + + /** + * Set or modify the 'nativename' node with a text value from 'name' + * + * @note if not specified, the nativeName will be set with the value of the 'name' node. + * + */ + public void setNativeName(final String nativename) { + set(NATIVENAME, nativename); + } + + /** + * Get the nativeName + * + * @return + */ + public String getNativeName() { + final Element nameNode = ElementUtils.contains(getRoot(), NATIVENAME, 1); + if (nameNode != null) + return nameNode.getText(); + else + return null; + } - - /** - * Get the nativeName - * - * @return - */ - public String getNativeName() { - final Element nameNode = ElementUtils.contains(getRoot(), NATIVENAME, 1); - if (nameNode != null) - return nameNode.getText(); - else - return null; - } - - private final static String DESCRIPTION = "description"; /** @@ -341,8 +391,9 @@ public abstract class GSResourceEncoder public void setDescription(final String description) { set(DESCRIPTION, description); } - + private final static String ABSTRACT = "abstract"; + /** * Add the 'abstract' node with a text value from 'abstract' * @@ -350,6 +401,7 @@ public abstract class GSResourceEncoder protected void addAbstract(final String _abstract) { add(ABSTRACT, _abstract); } + /** * Set or modify the 'abstract' node with a text value from 'abstract' */ @@ -357,116 +409,124 @@ public abstract class GSResourceEncoder set(ABSTRACT, _abstract); } - private final static String TITLE = "title"; + private final static String TITLE = "title"; - /** - * Add the 'title' node with a text value from 'title' - * - */ - protected void addTitle(final String title) { - add(TITLE, title); - } + /** + * Add the 'title' node with a text value from 'title' + * + */ + protected void addTitle(final String title) { + add(TITLE, title); + } - /** - * Set or modify the 'title' node with a text value from 'title' - */ - public void setTitle(final String title) { - set(TITLE, title); - } + /** + * Set or modify the 'title' node with a text value from 'title' + */ + public void setTitle(final String title) { + set(TITLE, title); + } - private final static String SRS = "srs"; + private final static String SRS = "srs"; - /** - * Add the 'SRS' node with a text value from 'srs' - */ - protected void addSRS(final String srs) { - add(SRS, srs); - } + /** + * Add the 'SRS' node with a text value from 'srs' + */ + protected void addSRS(final String srs) { + add(SRS, srs); + } - /** - * Set or modify the 'SRS' node with a text value from 'srs' - */ - public void setSRS(final String srs) { - set(SRS, srs); - } - - private final static String NATIVECRS = "nativeCRS"; + /** + * Set or modify the 'SRS' node with a text value from 'srs' + */ + public void setSRS(final String srs) { + set(SRS, srs); + } - /** - * Add the 'nativeCRS' node with a text value from 'nativeCRS' - */ - protected void addNativeCRS(final String nativeCRS) { - add(NATIVECRS, nativeCRS); - } + private final static String NATIVECRS = "nativeCRS"; - /** - * Set or modify the 'nativeCRS' node with a text value from 'nativeCRS' - */ - public void setNativeCRS(final String nativeCRS) { - set(NATIVECRS, nativeCRS); - } + /** + * Add the 'nativeCRS' node with a text value from 'nativeCRS' + */ + protected void addNativeCRS(final String nativeCRS) { + add(NATIVECRS, nativeCRS); + } - private final static String LATLONBBMINX = "latLonBoundingBox/minx"; - private final static String LATLONBBMAXX = "latLonBoundingBox/maxx"; - private final static String LATLONBBMINY = "latLonBoundingBox/miny"; - private final static String LATLONBBMAXY = "latLonBoundingBox/maxy"; - private final static String LATLONBBCRS = "latLonBoundingBox/crs"; + /** + * Set or modify the 'nativeCRS' node with a text value from 'nativeCRS' + */ + public void setNativeCRS(final String nativeCRS) { + set(NATIVECRS, nativeCRS); + } - /** - * - * @param minx - * @param maxy - * @param maxx - * @param miny - * @param crs - */ - protected void addLatLonBoundingBox(double minx, double miny, double maxx, - double maxy, final String crs) { - add(LATLONBBMINX, String.valueOf(minx)); - add(LATLONBBMINY, String.valueOf(miny)); - add(LATLONBBMAXY, String.valueOf(maxy)); - add(LATLONBBMAXX, String.valueOf(maxx)); - add(LATLONBBCRS, crs); - } + private final static String LATLONBBMINX = "latLonBoundingBox/minx"; - public void setLatLonBoundingBox(double minx, double miny, double maxx, - double maxy, final String crs) { - set(LATLONBBMINX, String.valueOf(minx)); - set(LATLONBBMAXY, String.valueOf(maxy)); - set(LATLONBBMAXX, String.valueOf(maxx)); - set(LATLONBBMINY, String.valueOf(miny)); - set(LATLONBBCRS, crs); - } + private final static String LATLONBBMAXX = "latLonBoundingBox/maxx"; - private final static String NATIVEBBMINX = "nativeBoundingBox/minx"; - private final static String NATIVEBBMAXX = "nativeBoundingBox/maxx"; - private final static String NATIVEBBMINY = "nativeBoundingBox/miny"; - private final static String NATIVEBBMAXY = "nativeBoundingBox/maxy"; - private final static String NATIVEBBCRS = "nativeBoundingBox/crs"; + private final static String LATLONBBMINY = "latLonBoundingBox/miny"; - /** - * @param minx - * @param maxy - * @param maxx - * @param miny - * @param crs - */ - protected void addNativeBoundingBox(double minx, double miny, double maxx, - double maxy, final String crs) { - add(NATIVEBBMINX, String.valueOf(minx)); - add(NATIVEBBMAXY, String.valueOf(maxy)); - add(NATIVEBBMAXX, String.valueOf(maxx)); - add(NATIVEBBMINY, String.valueOf(miny)); - add(NATIVEBBCRS, crs); - } + private final static String LATLONBBMAXY = "latLonBoundingBox/maxy"; - public void setNativeBoundingBox(double minx, double miny, double maxx, - double maxy, final String crs) { - set(NATIVEBBMINX, String.valueOf(minx)); - set(NATIVEBBMAXY, String.valueOf(maxy)); - set(NATIVEBBMAXX, String.valueOf(maxx)); - set(NATIVEBBMINY, String.valueOf(miny)); - set(NATIVEBBCRS, crs); - } + private final static String LATLONBBCRS = "latLonBoundingBox/crs"; + + /** + * + * @param minx + * @param maxy + * @param maxx + * @param miny + * @param crs + */ + protected void addLatLonBoundingBox(double minx, double miny, double maxx, double maxy, + final String crs) { + add(LATLONBBMINX, String.valueOf(minx)); + add(LATLONBBMINY, String.valueOf(miny)); + add(LATLONBBMAXY, String.valueOf(maxy)); + add(LATLONBBMAXX, String.valueOf(maxx)); + add(LATLONBBCRS, crs); + } + + public void setLatLonBoundingBox(double minx, double miny, double maxx, double maxy, + final String crs) { + set(LATLONBBMINX, String.valueOf(minx)); + set(LATLONBBMAXY, String.valueOf(maxy)); + set(LATLONBBMAXX, String.valueOf(maxx)); + set(LATLONBBMINY, String.valueOf(miny)); + set(LATLONBBCRS, crs); + } + + private final static String NATIVEBBMINX = "nativeBoundingBox/minx"; + + private final static String NATIVEBBMAXX = "nativeBoundingBox/maxx"; + + private final static String NATIVEBBMINY = "nativeBoundingBox/miny"; + + private final static String NATIVEBBMAXY = "nativeBoundingBox/maxy"; + + private final static String NATIVEBBCRS = "nativeBoundingBox/crs"; + + /** + * @param minx + * @param maxy + * @param maxx + * @param miny + * @param crs + */ + protected void addNativeBoundingBox(double minx, double miny, double maxx, double maxy, + final String crs) { + add(NATIVEBBMINX, String.valueOf(minx)); + add(NATIVEBBMAXY, String.valueOf(maxy)); + add(NATIVEBBMAXX, String.valueOf(maxx)); + add(NATIVEBBMINY, String.valueOf(miny)); + add(NATIVEBBCRS, crs); + } + + public void setNativeBoundingBox(double minx, double miny, double maxx, double maxy, + final String crs) { + set(NATIVEBBMINX, String.valueOf(minx)); + set(NATIVEBBMAXY, String.valueOf(maxy)); + set(NATIVEBBMAXX, String.valueOf(maxx)); + set(NATIVEBBMINY, String.valueOf(miny)); + set(NATIVEBBCRS, crs); + } } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoder.java index f08c13a..e5077fd 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoder.java @@ -25,38 +25,85 @@ package it.geosolutions.geoserver.rest.encoder.coverage; -import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; -import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; +import org.jdom.Element; +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; +import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; /** - * Creates an XML + * Creates an XML * * @author ETj (etj at geo-solutions.it) * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it * */ public class GSCoverageEncoder extends GSResourceEncoder { + + public final static String DIMENSIONS = "dimensions"; - public GSCoverageEncoder() { + final private Element dimensionsEncoder = new Element(DIMENSIONS); + + public GSCoverageEncoder() { super("coverage"); - } - + } + /** * @param key * @param dimensionInfo * @deprecated Use {@link GSResourceEncoder#addMetadataDimension(String, GSDimensionInfoEncoder)} this method will be removed soon */ - protected void addMetadata(String key, GSDimensionInfoEncoder dimensionInfo) { - super.addMetadata(key, dimensionInfo); - } + protected void addMetadata(String key, GSDimensionInfoEncoder dimensionInfo) { + super.addMetadata(key, dimensionInfo); + } /** * @deprecated Use {@link GSResourceEncoder#setMetadataDimension(String, GSDimensionInfoEncoder)} this method will be removed soon * @param key * @param dimensionInfo */ - public void setMetadata(String key, GSDimensionInfoEncoder dimensionInfo) { - super.setMetadata(key, dimensionInfo); - } + public void setMetadata(String key, GSDimensionInfoEncoder dimensionInfo) { + super.setMetadata(key, dimensionInfo); + } + + /** + * Adds a CoverageDimensionInfo to the GeoServer Resource + * + * @param coverageDimensionInfo + * + */ + public void addCoverageDimensionInfo(GSCoverageDimensionEncoder coverageDimensionInfo) { + if (ElementUtils.contains(getRoot(), DIMENSIONS) == null) + addContent(dimensionsEncoder); + dimensionsEncoder.addContent(coverageDimensionInfo.getRoot()); + } + + /** + * Adds quickly a CoverageDimensionInfo to the GeoServer Resource + * + * @param name + * @param description + * @param rangeMin + * @param rangeMax + * @param unit + * @param dimensionType + */ + public void addCoverageDimensionInfo(String name, String description, String rangeMin, + String rangeMax, String unit, String dimensionType) { + final GSCoverageDimensionEncoder coverageDimensionEncoder = new GSCoverageDimensionEncoder( + name, description, rangeMin, rangeMax, unit, dimensionType); + addCoverageDimensionInfo(coverageDimensionEncoder); + } + + /** + * Deletes a CoverageDimensionInfo from the list using the CoverageDimension Name (CoverageDimensionInfo content) + * + * @param coverageDimensionName + * @return true if something is removed, false otherwise + */ + public boolean delCoverageDimensionInfo(final String coverageDimensionName) { + return (dimensionsEncoder.removeContent(GSCoverageDimensionEncoder + .getFilterByContent(coverageDimensionName))).size() == 0 ? false : true; + } } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoder.java new file mode 100644 index 0000000..4f69fee --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoder.java @@ -0,0 +1,393 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.encoder.dimensions; + +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; + +/** + * GSCoverageDimension - encodes a CoverageDimension for a given GeoServer Resource (feature type /coverage), as follows: + * + *
+ * {@code
+ * final GSCoverageDimensionEncoder gsCoverageDimensionEncoder = 
+ *      new GSCoverageDimensionEncoder("GRAY_INDEX", "GridSampleDimension[-2.147483648E9,-2.147483648E9]", 
+ *      String.valueOf(Integer.MIN_VALUE), String.valueOf(Integer.MAX_VALUE), "dobson units³", "REAL_32BITS");
+ *  coverageEncoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder);
+ * }
+ * 
+ * + * For this example, the XML output is: + * + *
+ *  {@code
+ * 
+ * 	GRAY_INDEX
+ * 	GridSampleDimension[-2.147483648E9,2.147483648E9]
+ * 	
+ * 		-2.147483648E9
+ * 		2.147483647E9
+ * 	
+ * 	dobson units³
+ * 	
+ *  		REAL_32BITS
+ *  	
+ * 
+ *  }
+ * 
+ * + * @author Henry Rotzoll (henry.rotzoll@dlr.de) + * + */ +public class GSCoverageDimensionEncoder extends XmlElement { + + /** + * A class to filter the GSCoverageDimension by content + * + * + */ + private static class filterByContent implements Filter { + + final private String key; + + public filterByContent(String content) { + this.key = content; + } + + private static final long serialVersionUID = 1L; + + public boolean matches(Object obj) { + Element el = ((Element) obj).getChild("name"); + if (el != null && el.getTextTrim().equals(key)) { + return true; + } + return false; + } + } + + /** + * Get a Filter using the GSCoverageDimensionEncoder content (GSCoverageDimensionEncoder name) + * + * @param content + * @return the filter + */ + public static Filter getFilterByContent(String content) { + return new filterByContent(content); + } + + /** + * Constructs a new GSCoverageDimensionEncoder + * + */ + public GSCoverageDimensionEncoder() { + super("coverageDimension"); + } + + /** + * Constructs quickly a GSCoverageDimensionEncoder info + * + * @param name + * @param description + * @param rangeMin + * @param rangeMax + * @param unit + * @param dimensionTypeName + */ + public GSCoverageDimensionEncoder(String name, String description, String rangeMin, + String rangeMax, String unit, String dimensionTypeName) { + super("coverageDimension"); + this.setup(name, description, rangeMin, rangeMax, unit, dimensionTypeName); + } + + /** + * Set-up quickly a GSCoverageDimensionEncoder info + * + * @param name + * @param description + * @param rangeMin + * @param rangeMax + * @param unit + * @param dimensionTypeName + */ + protected void setup(String name, String description, String rangeMin, String rangeMax, + String unit, String dimensionTypeName) { + // name + setName(name); + + // description + setDescription(description); + + // range + setRange(rangeMin, rangeMax); + + // unit + setUnit(unit); + + // dimension Type + setDimensionType(dimensionTypeName); + } + + /** + * Get the value of the GSCoverageDimensionEncoder member + * + * @param memberName + * @return the value of the GSCoverageDimensionEncoder member + */ + protected String getMember(String memberName) { + Element el = this.getRoot().getChild(memberName.toString()); + if (el != null) + return el.getTextTrim(); + else + return null; + } + + /** + * Deletes a GSCoverageDimensionEncoder member + * + * @param memberName + * @return true if the GSCoverageDimensionEncoder member is removed + */ + protected boolean delMemberIfExists(String memberName) { + if (ElementUtils.contains(getRoot(), memberName) != null) { + return ElementUtils.remove(this.getRoot(), + this.getRoot().getChild(memberName.toString())); + } + + return false; + } + + /** + * Set a GSCoverageDimensionEncoder member + * + * @param memberName + * @param memberValue + */ + protected void setMember(String memberName, String memberValue) { + if (memberName != null && !memberName.isEmpty() && memberValue != null + && !memberValue.isEmpty()) { + delMemberIfExists(memberName); // delete the element if it already exists + addMember(memberName.toString(), memberValue); + } + } + + /** + * adds a GSCoverageDimensionEncoder member + * + * @param memberName + * @param memberValue + */ + protected void addMember(String memberName, String memberValue) { + if (memberName != null && !memberName.isEmpty() && memberValue != null + && !memberValue.isEmpty()) { + set(memberName.toString(), memberValue); + } + } + + /** + * Set the name + * + * @param name + */ + public void setName(String name) { + setMember("name", name); + } + + /** + * Deletes the name + * + * @param name + * @return true if removed + */ + public boolean delName() { + return this.delMemberIfExists("name"); + } + + /** + * Get the description + * + * @return description + */ + public String getName() { + return this.getMember("name"); + } + + /** + * Set the description + * + * @param description + */ + public void setDescription(String description) { + setMember("description", description); + } + + /** + * Deletes the description + * + * @param description + * @return true if removed + */ + public boolean delDescription() { + return this.delMemberIfExists("description"); + } + + /** + * Get the description + * + * @return description + */ + public String getDescription() { + return this.getMember("description"); + } + + /** + * Set the range + * + * @param range + */ + public void setRange(String rangeMin, String rangeMax) { + if (rangeMin != null && !rangeMin.isEmpty() && rangeMax != null && !rangeMax.isEmpty()) { + remove("range"); + + final Element rangeElement = new Element("range"); + final Element rangeMinElement = new Element("min"); + rangeMinElement.setText(rangeMin); + final Element rangeMaxElement = new Element("max"); + rangeMaxElement.setText(rangeMax); + rangeElement.addContent(rangeMinElement); + rangeElement.addContent(rangeMaxElement); + addContent(rangeElement); + } + } + + /** + * Deletes the range + * + * @param range + * @return true if removed + */ + public boolean delRange() { + return this.delMemberIfExists("range"); + } + + /** + * Get the range min + * + * @return range min + */ + public String getRangeMin() { + final Element range = this.getRoot().getChild("range"); + if (range != null) { + return range.getChildText("min"); + } + + return null; + } + + /** + * Get the range max + * + * @return range max + */ + public String getRangeMax() { + final Element range = this.getRoot().getChild("range"); + if (range != null) { + return range.getChildText("max"); + } + + return null; + } + + /** + * Set the unit + * + * @param unit + */ + public void setUnit(String unit) { + setMember("unit", unit); + } + + /** + * Deletes the type + * + * @param type + * @return true if removed + */ + public boolean delUnit() { + return this.delMemberIfExists("unit"); + } + + /** + * Get the unit + * + * @return unit + */ + public String getUnit() { + return this.getMember("unit"); + } + + /** + * Set the dimensionType + * + * @param dimensionType + */ + public void setDimensionType(String dimensionTypeName) { + if (dimensionTypeName != null && !dimensionTypeName.isEmpty()) { + remove("dimensionType"); + + final Element dimensionTypeElement = new Element("dimensionType"); + final Element dimensionNameElement = new Element("name"); + dimensionNameElement.setText(dimensionTypeName); + dimensionTypeElement.addContent(dimensionNameElement); + addContent(dimensionTypeElement); + } + } + + /** + * Deletes the dimensionType + * + * @param dimensionType + * @return true if removed + */ + public boolean delDimensionType() { + return this.delMemberIfExists("dimensionType"); + } + + /** + * Get the dimensionType name + * + * @return dimensionType name + */ + public String getDimensionTypeName() { + final Element dimensionType = this.getRoot().getChild("dimensionType"); + if (dimensionType != null) { + return dimensionType.getChildText("name"); + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStyleManager.java b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStyleManager.java index d06492a..18ff1ad 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStyleManager.java +++ b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStyleManager.java @@ -316,7 +316,9 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager { if(styleName.contains(":")) LOGGER.warn("Style name is going to be changed ["+styleName+"]"); styleName = styleName.replaceAll(":", "_"); - styleName = URLEncoder.encode(styleName); + + // currently REST interface does't support URLencoded URL +// styleName = URLEncoder.encode(styleName); String sUrl = buildUrl(null, styleName, null); if (purge) { diff --git a/src/test/java/it/geosolutions/geoserver/decoder/ResourceDecoderTest.java b/src/test/java/it/geosolutions/geoserver/decoder/ResourceDecoderTest.java index c06325e..84f4be2 100644 --- a/src/test/java/it/geosolutions/geoserver/decoder/ResourceDecoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/decoder/ResourceDecoderTest.java @@ -1,7 +1,7 @@ package it.geosolutions.geoserver.decoder; import it.geosolutions.geoserver.rest.decoder.RESTCoverage; -import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder; +import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder; import it.geosolutions.geoserver.rest.encoder.metadatalink.GSMetadataLinkInfoEncoder; import java.io.File; @@ -18,98 +18,112 @@ import org.springframework.core.io.ClassPathResource; * ResourceDecoderTest * * @author eblondel - * + * @author Henry Rotzoll (henry.rotzoll@dlr.de) + * */ public class ResourceDecoderTest { - - - RESTCoverage coverage; - - @Before - public void setup() throws IOException{ - File coverageFile = new ClassPathResource("testdata/coverageExample.xml").getFile(); - String coverageString = FileUtils.readFileToString(coverageFile); - coverage = RESTCoverage.build(coverageString); - } - - @Test - public void testName(){ - Assert.assertEquals(coverage.getName(),"granuleTestMosaic"); - } - - @Test - public void testNativeName(){ - Assert.assertEquals(coverage.getNativeName(), "granuleTestMosaic"); - } - - @Test - public void testTitle(){ - Assert.assertEquals(coverage.getNativeName(), "granuleTestMosaic"); - } - - @Test - public void testAbstract(){ - Assert.assertEquals(coverage.getAbstract(), "this is an abstract"); - } - - @Test - public void testKeywords(){ - List keywords = coverage.getKeywords(); - Assert.assertEquals(keywords.get(0), "keyword1"); - Assert.assertEquals(keywords.get(1), "keyword2"); - Assert.assertEquals(keywords.get(2), "keyword3"); - } - - @Test - public void testNameSpace(){ - Assert.assertEquals(coverage.getNameSpace(),"topp"); - } - - @Test - public void testStoreName(){ - Assert.assertEquals(coverage.getStoreName(), "granuleTestMosaic"); - } - - @Test - public void testStoreType(){ - Assert.assertEquals(coverage.getStoreType(), "coverageStore"); - } - - @Test - public void testStoreUrl(){ - Assert.assertEquals(coverage.getStoreUrl(), "http://localhost:8080/geoserver/rest/workspaces/topp/coveragestores/granuleTestMosaic.xml"); - } - - @Test - public void testCRS(){ - Assert.assertEquals(coverage.getCRS(), "EPSG:4326"); - } - - @Test - public void testBoundingBox(){ - Assert.assertEquals(coverage.getMinX(), -180.0, 0); - Assert.assertEquals(coverage.getMaxX(), 180.0, 0); - Assert.assertEquals(coverage.getMinY(), -90, 0); - Assert.assertEquals(coverage.getMaxY(), 90, 0); - } - - - @Test - public void testMetadataLinkInfo() throws IOException{ - + + RESTCoverage coverage; + + @Before + public void setup() throws IOException { + File coverageFile = new ClassPathResource("testdata/coverageExample.xml").getFile(); + String coverageString = FileUtils.readFileToString(coverageFile); + coverage = RESTCoverage.build(coverageString); + } + + @Test + public void testName() { + Assert.assertEquals(coverage.getName(), "granuleTestMosaic"); + } + + @Test + public void testNativeName() { + Assert.assertEquals(coverage.getNativeName(), "granuleTestMosaic"); + } + + @Test + public void testTitle() { + Assert.assertEquals(coverage.getNativeName(), "granuleTestMosaic"); + } + + @Test + public void testAbstract() { + Assert.assertEquals(coverage.getAbstract(), "this is an abstract"); + } + + @Test + public void testKeywords() { + List keywords = coverage.getKeywords(); + Assert.assertEquals(keywords.get(0), "keyword1"); + Assert.assertEquals(keywords.get(1), "keyword2"); + Assert.assertEquals(keywords.get(2), "keyword3"); + } + + @Test + public void testNameSpace() { + Assert.assertEquals(coverage.getNameSpace(), "topp"); + } + + @Test + public void testStoreName() { + Assert.assertEquals(coverage.getStoreName(), "granuleTestMosaic"); + } + + @Test + public void testStoreType() { + Assert.assertEquals(coverage.getStoreType(), "coverageStore"); + } + + @Test + public void testStoreUrl() { + Assert.assertEquals(coverage.getStoreUrl(), + "http://localhost:8080/geoserver/rest/workspaces/topp/coveragestores/granuleTestMosaic.xml"); + } + + @Test + public void testCRS() { + Assert.assertEquals(coverage.getCRS(), "EPSG:4326"); + } + + @Test + public void testBoundingBox() { + Assert.assertEquals(coverage.getMinX(), -180.0, 0); + Assert.assertEquals(coverage.getMaxX(), 180.0, 0); + Assert.assertEquals(coverage.getMinY(), -90, 0); + Assert.assertEquals(coverage.getMaxY(), 90, 0); + } + + @Test + public void testMetadataLinkInfo() throws IOException { + List list = coverage.getEncodedMetadataLinkInfoList(); - + GSMetadataLinkInfoEncoder metadataLinkInfo1 = list.get(0); Assert.assertEquals("text/xml", metadataLinkInfo1.getType()); Assert.assertEquals("ISO19115:2003", metadataLinkInfo1.getMetadataType()); Assert.assertEquals("http://www.organization.org/metadata1", metadataLinkInfo1.getContent()); - + GSMetadataLinkInfoEncoder metadataLinkInfo2 = list.get(1); - Assert.assertEquals("text/html",metadataLinkInfo2.getType()); - Assert.assertEquals("ISO19115:2003",metadataLinkInfo2.getMetadataType()); - Assert.assertEquals("http://www.organization.org/metadata2",metadataLinkInfo2.getContent()); - - } - - + Assert.assertEquals("text/html", metadataLinkInfo2.getType()); + Assert.assertEquals("ISO19115:2003", metadataLinkInfo2.getMetadataType()); + Assert.assertEquals("http://www.organization.org/metadata2", metadataLinkInfo2.getContent()); + + } + + @Test + public void testCoverageDimension() throws IOException { + + List list = coverage.getEncodedDimensionsInfoList(); + + GSCoverageDimensionEncoder coverageDimension1 = list.get(0); + Assert.assertEquals("GRAY_INDEX", coverageDimension1.getName()); + Assert.assertEquals("GridSampleDimension[-Infinity,Infinity]", + coverageDimension1.getDescription()); + Assert.assertEquals("-inf", coverageDimension1.getRangeMin()); + Assert.assertEquals("inf", coverageDimension1.getRangeMax()); + Assert.assertEquals("dobson units³", coverageDimension1.getUnit()); + Assert.assertEquals("REAL_32BITS", coverageDimension1.getDimensionTypeName()); + } + } diff --git a/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java b/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java index 1e5149a..c9dd3b0 100644 --- a/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java @@ -78,10 +78,10 @@ public class VersionDecoderTest extends GeoserverRESTTest { if (!enabled()) return; GSVersionDecoder geoserver = reader.getGeoserverVersion(); - if (GSVersionDecoder.VERSION.v22.equals(GSVersionDecoder.VERSION.getVersion(VERSION))) { + if (GSVersionDecoder.VERSION.v22.equals(GSVersionDecoder.VERSION.getVersion(GS_VERSION))) { Assert.assertEquals(geoserver.getVersion(), GSVersionDecoder.VERSION.v22); } else if (GSVersionDecoder.VERSION.UNRECOGNIZED.equals(GSVersionDecoder.VERSION - .getVersion(VERSION))) { + .getVersion(GS_VERSION))) { Assert.assertEquals(geoserver.getVersion(), GSVersionDecoder.VERSION.UNRECOGNIZED); } // print(dec.getRoot()); diff --git a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java index f460f50..8157afc 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java @@ -32,6 +32,7 @@ import it.geosolutions.geoserver.rest.decoder.RESTFeatureType; import it.geosolutions.geoserver.rest.decoder.RESTLayer; import it.geosolutions.geoserver.rest.decoder.RESTLayerGroup; import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder; +import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder.VERSION; import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import java.net.MalformedURLException; @@ -39,6 +40,8 @@ import java.net.URL; import java.util.List; import static org.junit.Assert.*; + +import org.jdom.output.EscapeStrategy; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; @@ -77,7 +80,7 @@ public abstract class GeoserverRESTTest { public static final String RESTPW; // geoserver target version - public static final String VERSION; + public static final String GS_VERSION; public static URL URL; @@ -95,7 +98,7 @@ public abstract class GeoserverRESTTest { RESTURL = getenv("gsmgr_resturl", "http://localhost:8080/geoserver"); RESTUSER = getenv("gsmgr_restuser", "admin"); RESTPW = getenv("gsmgr_restpw", "geoserver"); - VERSION = getenv("gsmgr_version", "2.4"); + GS_VERSION = getenv("gsmgr_version", "2.4"); // These tests will destroy data, so let's make sure we do want to run them enabled = getenv("gsmgr_resttest", "false").equalsIgnoreCase("true"); @@ -132,15 +135,15 @@ public abstract class GeoserverRESTTest { LOGGER.info("Using geoserver instance " + RESTUSER + ":" + RESTPW + " @ " + RESTURL); } - } else { + } else if (existgs == false){ System.out.println("Failing tests : geoserver not found"); fail("GeoServer not found"); } GSVersionDecoder v=reader.getGeoserverVersion(); - if (!v.getVersion().equals(GSVersionDecoder.VERSION.getVersion(VERSION))){ - System.out.println("Failing tests : geoserver version does not match.\nAccepted versions: "+GSVersionDecoder.VERSION.print()); - fail("GeoServer version ("+v.getVersion()+") does not match the desired one (+VERSION+)"); + if (v.compareTo(VERSION.getVersion(GS_VERSION))!=0){ + System.out.println("Failing tests : geoserver version does not match.\nAccepted versions: "+VERSION.print()); + fail("GeoServer version ("+v.getVersion()+") does not match the desired one ("+GS_VERSION+")"); } } else { System.out.println("Skipping tests "); @@ -186,30 +189,32 @@ public abstract class GeoserverRESTTest { LOGGER.info("Found " + groups.size() + " layerGroups"); for (String groupName : groups) { RESTLayerGroup group = reader.getLayerGroup(groupName); - StringBuilder sb = new StringBuilder("Group: ").append(groupName).append(":"); - for (NameLinkElem layer : group.getLayerList()) { - sb.append(" ").append(layer); + if (groups != null) { + StringBuilder sb = new StringBuilder("Group: ").append(groupName).append(":"); + for (NameLinkElem layer : group.getLayerList()) { + sb.append(" ").append(layer); + } + + boolean removed = publisher.removeLayerGroup(groupName); + LOGGER.info(sb.toString() + ": removed: " + removed); + assertTrue("LayerGroup not removed: " + groupName, removed); } - - boolean removed = publisher.removeLayerGroup(groupName); - LOGGER.info(sb.toString() + ": removed: " + removed); - assertTrue("LayerGroup not removed: " + groupName, removed); } - } private void deleteAllLayers() { List layers = reader.getLayers().getNames(); - for (String layerName : layers) { - RESTLayer layer = reader.getLayer(layerName); - if (layer.getType() == RESTLayer.Type.VECTOR) - deleteFeatureType(layer); - else if (layer.getType() == RESTLayer.Type.RASTER) - deleteCoverage(layer); - else - LOGGER.error("Unknown layer type " + layer.getType()); + if (layers != null) { + for (String layerName : layers) { + RESTLayer layer = reader.getLayer(layerName); + if (layer.getType() == RESTLayer.Type.VECTOR) + deleteFeatureType(layer); + else if (layer.getType() == RESTLayer.Type.RASTER) + deleteCoverage(layer); + else + LOGGER.error("Unknown layer type " + layer.getType()); + } } - } private void deleteAllCoverageStores() { @@ -269,11 +274,12 @@ public abstract class GeoserverRESTTest { protected void deleteAllStyles() { List styles = reader.getStyles().getNames(); - for (String style : styles) { - LOGGER.warn("Deleting Style " + style); - boolean removed = publisher.removeStyle(style,true); - assertTrue("Style not removed " + style, removed); - + if (styles != null) { + for (String style : styles) { + LOGGER.warn("Deleting Style " + style); + boolean removed = publisher.removeStyle(style, true); + assertTrue("Style not removed " + style, removed); + } } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/datastore/GSArcSDEDatastoreEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/datastore/GSArcSDEDatastoreEncoderTest.java index c330afe..25ea83f 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/datastore/GSArcSDEDatastoreEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/datastore/GSArcSDEDatastoreEncoderTest.java @@ -60,7 +60,7 @@ public class GSArcSDEDatastoreEncoderTest extends StoreIntegrationTest { public GSArcSDEDatastoreEncoderTest() throws IllegalArgumentException, MalformedURLException { - super(System.getProperty("Ignore", "false").equalsIgnoreCase("true")); + super(System.getProperty("Ignore", "true").equalsIgnoreCase("true")); } @Override diff --git a/src/test/java/it/geosolutions/geoserver/rest/datastore/GSOracleNGDatastoreEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/datastore/GSOracleNGDatastoreEncoderTest.java index 1a2e3a5..aa5db70 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/datastore/GSOracleNGDatastoreEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/datastore/GSOracleNGDatastoreEncoderTest.java @@ -61,7 +61,7 @@ public class GSOracleNGDatastoreEncoderTest extends StoreIntegrationTest { // private final static Logger LOGGER = LoggerFactory.getLogger(GSOracleNGDatastoreEncoderTest.class); public GSOracleNGDatastoreEncoderTest() throws IllegalArgumentException, MalformedURLException { - super(System.getProperty("pgIgnore", "false").equalsIgnoreCase("true")); + super(System.getProperty("pgIgnore", "true").equalsIgnoreCase("true")); } diff --git a/src/test/java/it/geosolutions/geoserver/rest/datastore/StoreIntegrationTest.java b/src/test/java/it/geosolutions/geoserver/rest/datastore/StoreIntegrationTest.java index 42b0442..67c4ccf 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/datastore/StoreIntegrationTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/datastore/StoreIntegrationTest.java @@ -44,104 +44,93 @@ import org.slf4j.LoggerFactory; *

* Since these tests require a running Store instance, this is more like integration tests.
* - * For testing that a datastore is properly configured, a layer publication has - * to be attempted. For this, the 'states' data (states shapefile - available in - * testdata/states.zip) has to be imported in the corresponding store. - * Note: For Oracle NG this name has to be uppercase (STATES). + * For testing that a datastore is properly configured, a layer publication has to be attempted. For this, the 'states' data (states shapefile - + * available in testdata/states.zip) has to be imported in the corresponding store. Note: For Oracle NG this name has to be uppercase (STATES). * * @author carlo cancellieri - GeoSolutions * @author emmanuel blondel - * + * * @see GeoserverRESTTest */ public abstract class StoreIntegrationTest extends GeoserverRESTTest { protected final GeoServerRESTStoreManager storeManager; - + /** * ignore integration tests */ protected final boolean ignore; private final static Logger LOGGER = LoggerFactory.getLogger(StoreIntegrationTest.class); - + public boolean isIgnore() { return ignore; } /** * - * @param ignore false if this test shoudl be disabled + * @param ignore true if this test should be disabled * @throws IllegalArgumentException * @throws MalformedURLException */ - public StoreIntegrationTest(boolean ignore) throws IllegalArgumentException, MalformedURLException { + public StoreIntegrationTest(boolean ignore) throws IllegalArgumentException, + MalformedURLException { super(); this.storeManager = new GeoServerRESTStoreManager(URL, RESTUSER, RESTPW); - this.ignore=ignore; + this.ignore = ignore; } - + public abstract GSAbstractStoreEncoder getStoreEncoderTest(); @Test - public void testCreateDeleteDatastore() throws IllegalArgumentException, MalformedURLException { - if (!enabled()) { - return; - } - deleteAll(); - - assertTrue(publisher.createWorkspace(DEFAULT_WS)); - - // creation test - GSAbstractStoreEncoder storeEncoder=getStoreEncoderTest(); - - String storeName = storeEncoder.getName(); - // String description = storeEncoder.getDescription(); - - boolean created = storeManager.create(DEFAULT_WS, storeEncoder); - - if( ! ignore ) - assertTrue("Datastore not created", created); - else if( ! created) - LOGGER.error("*** store " + storeName + " has not been created."); - - - RESTDataStore datastore = reader.getDatastore(DEFAULT_WS, storeName); - assertNotNull(datastore); - LOGGER.info("The type of the created datastore is: " + datastore.getStoreType()); - - //check if the datastore is properly configured in GS for publishing layers - String layername = "states"; - if(storeEncoder instanceof GSOracleNGDatastoreEncoder) - layername = layername.toUpperCase(); - - GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder(); - fte.setName(layername); - fte.setTitle(layername); - fte.setNativeCRS("EPSG:4326"); - fte.setDescription("desc"); - fte.setEnabled(true); - GSLayerEncoder layerEncoder = new GSLayerEncoder(); - layerEncoder.setEnabled(true); - layerEncoder.setQueryable(true); - layerEncoder.setDefaultStyle("polygon"); - - boolean published = publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder); - if(!ignore){ - assertTrue("Test layer not published", published); - }else if(!published){ - LOGGER.error("*** Test layer " - + layername - + " has not been published. Problem in datastore configuration"); - } - - // removing test - boolean removed = storeManager.remove(DEFAULT_WS, storeEncoder, true); - if( ! ignore ) - assertTrue("Datastore not removed", removed); - else if( ! removed ) - LOGGER.error("*** Datastore " + storeName + " has not been removed."); - - assertTrue(publisher.removeWorkspace(DEFAULT_WS, false)); + public void testCreateDeleteDatastore() throws IllegalArgumentException, MalformedURLException { + if (!enabled() || ignore) { + return; } + deleteAll(); + + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + // creation test + GSAbstractStoreEncoder storeEncoder = getStoreEncoderTest(); + + String storeName = storeEncoder.getName(); + // String description = storeEncoder.getDescription(); + + boolean created = storeManager.create(DEFAULT_WS, storeEncoder); + + assertTrue("*** store " + storeName + " has not been created.", created); + + RESTDataStore datastore = reader.getDatastore(DEFAULT_WS, storeName); + assertNotNull(datastore); + LOGGER.info("The type of the created datastore is: " + datastore.getStoreType()); + + // check if the datastore is properly configured in GS for publishing layers + String layername = "states"; + + if (storeEncoder instanceof GSOracleNGDatastoreEncoder) + layername = layername.toUpperCase(); + + GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder(); + fte.setName(layername); + fte.setNativeName(layername); + fte.setTitle(layername+"_TITLE"); + fte.setNativeCRS("EPSG:4326"); + fte.setDescription("desc"); + fte.setEnabled(true); + GSLayerEncoder layerEncoder = new GSLayerEncoder(); + layerEncoder.setEnabled(true); + layerEncoder.setQueryable(true); + layerEncoder.setDefaultStyle("polygon"); + + boolean published = publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder); + + assertTrue("*** Test layer " + layername + + " has not been published. Problem in datastore configuration", published); + + // removing test + boolean removed = storeManager.remove(DEFAULT_WS, storeEncoder, true); + assertTrue("*** Datastore " + storeName + " has not been removed.", removed); + assertTrue(publisher.removeWorkspace(DEFAULT_WS, false)); + } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java index 2803ca4..bb52927 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java @@ -21,6 +21,7 @@ package it.geosolutions.geoserver.rest.encoder.coverage; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; +import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; @@ -105,6 +106,8 @@ public class GSCoverageEncoderTest extends TestCase { encoder.addKeyword("..."); encoder.addKeyword("KEYWORD_N"); + + // setting dimensions (into metadata) final GSDimensionInfoEncoder timeDimension=new GSDimensionInfoEncoder(true); timeDimension.setPresentation(Presentation.CONTINUOUS_INTERVAL); encoder.setMetadata("time", timeDimension); @@ -119,6 +122,12 @@ public class GSCoverageEncoderTest extends TestCase { final GSDimensionInfoEncoder elevationDimension=new GSDimensionInfoEncoder(true); elevationDimension.setPresentation(Presentation.LIST); encoder.setMetadata("elevation", elevationDimension); + + // setting dimensions (since gs-2.4.x) + GSCoverageDimensionEncoder gsCoverageDimensionEncoder = new GSCoverageDimensionEncoder( + "GRAY_INDEX", "GridSampleDimension[-Infinity,Infinity]", "-inf", "inf", + "dobson units³", "REAL_32BITS"); + encoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder); if (LOGGER.isInfoEnabled()) LOGGER.info(encoder.toString()); diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoderTest.java new file mode 100644 index 0000000..d6350a1 --- /dev/null +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoderTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2007 - 2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * GPLv3 + Classpath exception + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package it.geosolutions.geoserver.rest.encoder.dimensions; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; + +/** + * + * @author Henry Rotzoll (henry.rotzoll@dlr.de) + * + */ +public class GSCoverageDimensionEncoderTest { + + @Test + public void coverageDimensionTest() { + GSCoverageDimensionEncoder encoder = new GSCoverageDimensionEncoder("GRAY_INDEX", + "GridSampleDimension[-Infinity,Infinity]", "-inf", "inf", "dobson units³", + "REAL_32BITS"); + + Assert.assertEquals("GRAY_INDEX", encoder.getName()); + Assert.assertEquals("GridSampleDimension[-Infinity,Infinity]", encoder.getDescription()); + Assert.assertEquals("-inf", encoder.getRangeMin()); + Assert.assertEquals("inf", encoder.getRangeMax()); + Assert.assertEquals("dobson units³", encoder.getUnit()); + Assert.assertEquals("REAL_32BITS", encoder.getDimensionTypeName()); + + Assert.assertTrue(encoder.delName()); + Assert.assertTrue(encoder.delDescription()); + Assert.assertTrue(encoder.delRange()); + Assert.assertTrue(encoder.delUnit()); + Assert.assertTrue(encoder.delDimensionType()); + + Assert.assertNull(encoder.getName()); + Assert.assertNull(encoder.getDescription()); + Assert.assertNull(encoder.getRangeMin()); + Assert.assertNull(encoder.getRangeMax()); + Assert.assertNull(encoder.getUnit()); + Assert.assertNull(encoder.getDimensionTypeName()); + + encoder.setName("GRAY_INDEX"); + encoder.setDescription("GridSampleDimension[-Infinity,Infinity]"); + encoder.setRange("-inf", "inf"); + encoder.setUnit("dobson units³"); + encoder.setDimensionType("REAL_32BITS"); + + Assert.assertEquals("GRAY_INDEX", encoder.getName()); + Assert.assertEquals("GridSampleDimension[-Infinity,Infinity]", encoder.getDescription()); + Assert.assertEquals("-inf", encoder.getRangeMin()); + Assert.assertEquals("inf", encoder.getRangeMax()); + Assert.assertEquals("dobson units³", encoder.getUnit()); + Assert.assertEquals("REAL_32BITS", encoder.getDimensionTypeName()); + } + +} \ No newline at end of file diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java index e5f730b..9a5bc99 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java @@ -21,13 +21,16 @@ package it.geosolutions.geoserver.rest.encoder.feature; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; import it.geosolutions.geoserver.rest.GeoserverRESTTest; +import it.geosolutions.geoserver.rest.decoder.RESTFeatureType; import it.geosolutions.geoserver.rest.decoder.RESTLayer; import it.geosolutions.geoserver.rest.decoder.RESTResource; import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder; +import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder.VERSION; import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder21; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder; import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; @@ -52,14 +55,12 @@ import org.springframework.core.io.ClassPathResource; /** * - * Note on adding multiple available styles to the GSLayerEncoder: - to run the - * testIntegration(), 2 clones of the "point" style, named "point2" and "point3" - * have to be created. + * Note on adding multiple available styles to the GSLayerEncoder: - to run the testIntegration(), 2 clones of the "point" style, named "point2" and + * "point3" have to be created. * * @author ETj (etj at geo-solutions.it) * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it - * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | - * emmanuel.blondel@fao.org + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org */ public class GSFeatureEncoderTest extends GeoserverRESTTest { protected final static Logger LOGGER = LoggerFactory.getLogger(GSFeatureEncoderTest.class); @@ -72,9 +73,21 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { deleteAll(); GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(RESTURL, RESTUSER, RESTPW); - + String storeName = "resttestshp"; String layerName = "cities"; + + publisher.createWorkspace(DEFAULT_WS); + + File zipFile = new ClassPathResource("testdata/resttestshp.zip").getFile(); + + // test insert + boolean published = publisher.publishShp(DEFAULT_WS, storeName, layerName, zipFile); + assertTrue("publish() failed", published); + assertTrue(existsLayer(layerName)); + + publisher.publishStyle(new File(new ClassPathResource("testdata").getFile(), + "default_point.sld")); GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder(); fte.setNativeName(layerName); @@ -85,70 +98,52 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { fte.setDescription("desc"); fte.setEnabled(true); - //metadataLink - GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder( - "text/xml", "ISO19115:2003", - "http://www.organization.org/metadata1"); + // metadataLink + GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder("text/xml", + "ISO19115:2003", "http://www.organization.org/metadata1"); fte.addMetadataLinkInfo(metadatalink); - - GSLayerEncoder layerEncoder = null; - if (!GSVersionDecoder.VERSION.getVersion(VERSION).equals( - GSVersionDecoder.VERSION.UNRECOGNIZED)) { - layerEncoder = new GSLayerEncoder(); - } else if (GSVersionDecoder.VERSION.getVersion(VERSION).equals( - GSVersionDecoder.VERSION.UNRECOGNIZED)) { - layerEncoder = new GSLayerEncoder21(); - } - layerEncoder.setEnabled(true); - layerEncoder.setQueryable(true); - layerEncoder.setAdvertised(true); - layerEncoder.setDefaultStyle("point"); - layerEncoder.addStyle("point2"); - layerEncoder.addStyle("point3"); + GSLayerEncoder layerEncoder = null; + if (VERSION.getVersion(GS_VERSION).compareTo(VERSION.UNRECOGNIZED) > 0) { + layerEncoder = new GSLayerEncoder(); + } else if (VERSION.getVersion(GS_VERSION).compareTo(VERSION.UNRECOGNIZED) == 0) { + layerEncoder = new GSLayerEncoder21(); + } + layerEncoder.setEnabled(true); + layerEncoder.setQueryable(true); + layerEncoder.setAdvertised(true); - // authorityURL - GSAuthorityURLInfoEncoder authorityURL = new GSAuthorityURLInfoEncoder( - "authority1", "http://www.authority1.org"); - layerEncoder.addAuthorityURL(authorityURL); + layerEncoder.setDefaultStyle("point"); + layerEncoder.addStyle("point2"); + layerEncoder.addStyle("point3"); - // identifier - GSIdentifierInfoEncoder identifier1 = new GSIdentifierInfoEncoder( - "authority1", "identifier1"); - GSIdentifierInfoEncoder identifier2 = new GSIdentifierInfoEncoder( - "authority1", "another_identifier"); - layerEncoder.addIdentifier(identifier1); - layerEncoder.addIdentifier(identifier2); + // authorityURL + GSAuthorityURLInfoEncoder authorityURL = new GSAuthorityURLInfoEncoder("authority1", + "http://www.authority1.org"); + layerEncoder.addAuthorityURL(authorityURL); - publisher.createWorkspace(DEFAULT_WS); + // identifier + GSIdentifierInfoEncoder identifier1 = new GSIdentifierInfoEncoder("authority1", + "identifier1"); + GSIdentifierInfoEncoder identifier2 = new GSIdentifierInfoEncoder("authority1", + "another_identifier"); + layerEncoder.addIdentifier(identifier1); + layerEncoder.addIdentifier(identifier2); - File zipFile = new ClassPathResource("testdata/resttestshp.zip") - .getFile(); - // test insert - boolean published = publisher.publishShp(DEFAULT_WS, storeName, - layerName, zipFile); - assertTrue("publish() failed", published); - assertTrue(existsLayer(layerName)); + // optionally select the attributes to publish + RESTLayer layer = reader.getLayer(DEFAULT_WS, layerName); + RESTFeatureType resource = reader.getFeatureType(layer); + List attrs = resource.getEncodedAttributeList(); + assertNotNull(attrs); + for (GSAttributeEncoder enc : attrs) { + fte.setAttribute(enc); + } - publisher.publishStyle(new File(new ClassPathResource("testdata") - .getFile(), "default_point.sld")); - - // optionally select the attributes to publish - RESTLayer layer = reader.getLayer(layerName); - RESTResource resource = reader.getResource(layer); - List attrs = resource.getEncodedAttributeList(); - assertNotNull(attrs); - for (GSAttributeEncoder enc : attrs) { - fte.setAttribute(enc); - } - - assertTrue(publisher.publishDBLayer(DEFAULT_WS, storeName, fte, - layerEncoder)); + assertTrue(publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder)); } - @Test public void testFeatureTypeEncoder() { @@ -157,9 +152,9 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { encoder.addKeyword("KEYWORD_2"); encoder.addKeyword("..."); encoder.addKeyword("KEYWORD_N"); - + encoder.setName("Layername"); - + encoder.setTitle("title"); encoder.addKeyword("TODO"); encoder.setNativeCRS("EPSG:4326"); @@ -172,24 +167,24 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { attribute.setAttribute(FeatureTypeAttribute.maxOccurs, "1"); attribute.setAttribute(FeatureTypeAttribute.minOccurs, "0"); attribute.setAttribute(FeatureTypeAttribute.nillable, "true"); - + encoder.setAttribute(attribute); - + encoder.delAttribute("NAME"); - + attribute.setAttribute(FeatureTypeAttribute.name, "NEW_NAME"); - + encoder.setAttribute(attribute); - + // TODO encoder.getAttribute("NAME"); - + GSFeatureDimensionInfoEncoder dim2 = new GSFeatureDimensionInfoEncoder("ELE"); - + encoder.setMetadataDimension("elevation", dim2); dim2.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); Element el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION); assertNotNull(el); - + LOGGER.info("contains_key:" + el.toString()); dim2.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(12)); @@ -198,7 +193,7 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { assertEquals("12", el.getText()); dim2.setPresentation(Presentation.CONTINUOUS_INTERVAL); - + encoder.setMetadataDimension("time", new GSFeatureDimensionInfoEncoder("time")); el = ElementUtils.contains(encoder.getRoot(), GSDimensionInfoEncoder.PRESENTATION); assertNotNull(el); @@ -217,32 +212,38 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { assertNull(el); if (el == null) LOGGER.info("REMOVED"); - + if (LOGGER.isInfoEnabled()) LOGGER.info(encoder.toString()); - assertEquals(encoder.getName(),"Layername"); + assertEquals(encoder.getName(), "Layername"); } @Test public void testModifyFeature() { GSFeatureTypeEncoder encoder = new GSFeatureTypeEncoder(); encoder.addKeyword("KEYWORD_1"); - encoder.addKeyword("KEYWORD_2"); + encoder.addKeyword("KEYWORD_1", "LAN_1", "VOCAB_1"); + assertTrue(encoder.delKeyword("KEYWORD_1", "LAN_1", "VOCAB_1")); + encoder.addKeyword("..."); encoder.addKeyword("KEYWORD_N"); - - assertTrue(encoder.delKeyword("KEYWORD_2")); assertFalse(encoder.delKeyword("KEYWORD_M")); - //metadataLinkInfo - encoder.addMetadataLinkInfo("text/xml", "ISO19115:2003","http://www.organization.org/metadata1"); - encoder.addMetadataLinkInfo("text/html", "ISO19115:2003","http://www.organization.org/metadata2"); - + encoder.addKeyword("KEYWORD_2"); + assertFalse(encoder.delKeyword("KEYWORD_2", "LAN_1", "VOCAB_1")); + assertTrue(encoder.delKeyword("KEYWORD_2")); + + // metadataLinkInfo + encoder.addMetadataLinkInfo("text/xml", "ISO19115:2003", + "http://www.organization.org/metadata1"); + encoder.addMetadataLinkInfo("text/html", "ISO19115:2003", + "http://www.organization.org/metadata2"); + assertTrue(encoder.delMetadataLinkInfo("http://www.organization.org/metadata2")); assertFalse(encoder.delMetadataLinkInfo("http://www.organization.org/metadata3")); - - //dimensions + + // dimensions final GSFeatureDimensionInfoEncoder elevationDimension = new GSFeatureDimensionInfoEncoder( "elevation_field"); @@ -252,8 +253,7 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { final String metadata = "elevation"; encoder.setMetadataDimension(metadata, elevationDimension); - elevationDimension.setPresentation(Presentation.DISCRETE_INTERVAL, - BigDecimal.valueOf(10)); + elevationDimension.setPresentation(Presentation.DISCRETE_INTERVAL, BigDecimal.valueOf(10)); if (LOGGER.isInfoEnabled()) LOGGER.info(encoder.toString()); @@ -270,82 +270,96 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { LOGGER.info("REMOVED"); } - + /** * Test method for virtual table encoding / SQL view layer integration * - * Settings information for integration tests - * - test is based on the data used in http://docs.geoserver.org/latest/en/user/data/database/sqlview.html#parameterizing-sql-views - * (states shapefile - available in testdata/states.zip) - * - create a postgis db - * - import the states shapefile (using shp2pgsql or Postgis shapefile uploader) - * - In Geoserver, create a postgis datastore for this DB, with the name "statesdb" + * Settings information for integration tests - test is based on the data used in + * http://docs.geoserver.org/latest/en/user/data/database/sqlview.html#parameterizing-sql-views (states shapefile - available in + * testdata/states.zip) - create a postgis db - import the states shapefile (using shp2pgsql or Postgis shapefile uploader) - In Geoserver, create + * a postgis datastore for this DB, with the name "statesdb" + * + * @throws IOException * */ @Test - public void testSQLViewIntegration(){ - - if (!enabled()) + public void testSQLViewIntegration() throws IOException { + + if (!enabled()) return; deleteAll(); + GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(RESTURL, RESTUSER, RESTPW); - - - String storeName = "statesdb"; //name of the datastore setup for tests - String layerName = "my_sqlviewlayer"; - String nativeName = "popstates"; + String storeName = "resttestshp"; + String layerName = "cities"; + + // build the store + publisher.createWorkspace(DEFAULT_WS); + + // test insert + File zipFile = new ClassPathResource("testdata/resttestshp.zip").getFile(); + boolean published = publisher.publishShp(DEFAULT_WS, storeName, layerName, zipFile); + assertTrue("publish() failed", published); + + publisher.publishStyle(new File(new ClassPathResource("testdata").getFile(), + "default_point.sld")); + + String nativeName = layerName; + layerName=layerName+"_NEW"; + GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder(); fte.setName(layerName); fte.setNativeName(nativeName); fte.setTitle("title"); - + fte.addKeyword("keyword1"); fte.addKeyword("keyword2"); fte.setNativeCRS("EPSG:4326"); fte.setDescription("desc"); fte.setEnabled(true); - //virtual table - //------------- + // virtual table + // ------------- // Set-up the vtGeom final VTGeometryEncoder vtGeom = new VTGeometryEncoder("the_geom", "Point", "4326"); - + // Set-up 2 virtual table parameters final VTParameterEncoder vtParam1 = new VTParameterEncoder("high", "100000000", "^[\\d]+$"); final VTParameterEncoder vtParam2 = new VTParameterEncoder("low", "0", "^[\\d]+$"); - + // sql String sql = "select gid, state_name, the_geom from pgstates where persons between %low% and %high% and state_abbr = '%state%'"; - - //set-up the virtual table + + // set-up the virtual table final GSVirtualTableEncoder vte = new GSVirtualTableEncoder(); vte.setName(nativeName); vte.setSql(sql); vte.addVirtualTableGeometry(vtGeom); vte.addVirtualTableParameter(vtParam1); vte.addVirtualTableParameter(vtParam2); - fte.setMetadataVirtualTable(vte); //Set the virtual table - - //modif the vte + + // modif the vte vte.delVirtualTableGeometry("the_geom"); vte.addVirtualTableGeometry("the_geom", "MultiPolygon", "4326"); - + final VTParameterEncoder vtParam3 = new VTParameterEncoder("state", "FL", "^[\\w\\d\\s]+$"); vte.addVirtualTableParameter(vtParam3); vte.addKeyColumn("gid"); - - //Layer encoder - //------------- + + fte.setMetadataVirtualTable(vte); // Set the virtual table + + // Layer encoder + // ------------- GSLayerEncoder layerEncoder = new GSLayerEncoder(); layerEncoder.setEnabled(true); layerEncoder.setQueryable(true); layerEncoder.setDefaultStyle("polygon"); - + // test insert - //------------ + // ------------ publisher.createWorkspace(DEFAULT_WS); - boolean published = publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder); + published = publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder); assertTrue("Publication unsuccessful", published); assertTrue("Layer does not exist", existsLayer(layerName)); diff --git a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java b/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java index a94759b..cf9dff7 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImageMosaicManagerTest.java @@ -39,27 +39,28 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { if (!enabled()) { return; } + deleteAll(); + + publisher.createWorkspace(DEFAULT_WS); + // crea the manager GeoServerRESTStructuredGridCoverageReaderManager manager = new GeoServerRESTStructuredGridCoverageReaderManager(new URL(RESTURL), RESTUSER, RESTPW); // create mosaic - 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()); + boolean create=manager.create(DEFAULT_WS, coverageStoreName,new ClassPathResource("testdata/granules/mosaic.zip").getFile().getAbsolutePath()); assertTrue(create); // enable dimension - fixDimensions(workspaceName, coverageStoreName, coverageName); + fixDimensions(DEFAULT_WS, coverageStoreName, coverageName); // check index format - RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema(workspaceName, coverageName,coverageName); - assertTrue(create); - + RESTStructuredCoverageIndexSchema indexFormat = manager.getGranuleIndexSchema(DEFAULT_WS, coverageName,coverageName); assertNotNull(indexFormat); assertFalse(indexFormat.isEmpty()); assertEquals(5, indexFormat.size()); @@ -95,14 +96,14 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { // get with paging - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName , null, 0, 1); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName , null, 0, 1); assertNotNull(granulesList); assertEquals(1, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, null, null, 2); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName, null, null, 2); assertNotNull(granulesList); assertEquals(2, granulesList.size()); assertFalse(granulesList.isEmpty()); @@ -110,7 +111,7 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { assertNotNull(granule); // get with no paging - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName); assertNotNull(granulesList); assertEquals(4, granulesList.size()); assertFalse(granulesList.isEmpty()); @@ -118,21 +119,21 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { assertNotNull(granule); // examples of filtering with CQL - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, "depth = 100", null, null); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName, "depth = 100", null, null); assertNotNull(granulesList); assertEquals(2, granulesList.size()); assertFalse(granulesList.isEmpty()); granule = granulesList.get(0); assertNotNull(granule); - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, "depth = 100 AND date='20081101T0000000'", null, null); + granulesList = manager.getGranules(DEFAULT_WS, 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); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName, "location LIKE 'NCOM_wattemp%'", 0, 1); assertNotNull(granulesList); assertEquals(1, granulesList.size()); assertFalse(granulesList.isEmpty()); @@ -141,21 +142,21 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { // remove by filter final String fileLocation = "NCOM_wattemp_100_20081101T0000000_12.tiff"; - boolean result = manager.removeGranulesByCQL(workspaceName, coverageStoreName, coverageName, "location = '" + fileLocation + "'"); + boolean result = manager.removeGranulesByCQL(DEFAULT_WS, coverageStoreName, coverageName, "location = '" + fileLocation + "'"); Assert.assertTrue(result); - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName); assertNotNull(granulesList); - assertEquals(3, granulesList.size()); assertFalse(granulesList.isEmpty()); + assertEquals(4, granulesList.size()); granule = granulesList.get(0); assertNotNull(granule); // Readding that granule with harvest - result = manager.harvestExternal(workspaceName, coverageStoreName, format, new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() ); + result = manager.harvestExternal(DEFAULT_WS, coverageStoreName, format, new ClassPathResource("testdata/granules/NCOM_wattemp_100_20081101T0000000_12.tiff").getFile().getAbsolutePath() ); Assert.assertTrue(result); - granulesList = manager.getGranules(workspaceName, coverageStoreName, coverageName, null, null, null); + granulesList = manager.getGranules(DEFAULT_WS, coverageStoreName, coverageName, null, null, null); assertNotNull(granulesList); assertEquals(4, granulesList.size()); assertFalse(granulesList.isEmpty()); @@ -164,7 +165,7 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { // delete - delete(workspaceName, coverageStoreName); + delete(DEFAULT_WS, coverageStoreName); } @@ -218,6 +219,8 @@ public class GeoServerRESTImageMosaicManagerTest extends GeoserverRESTTest { String csname) throws NumberFormatException { // get current config for the coverage to extract the params we want to set again final RESTCoverage coverage = reader.getCoverage(wsName, coverageStoreName, csname); + if (coverage==null) + return null; final Map params = coverage.getParametersList(); // prepare and fill the encoder diff --git a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java b/src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java index a7f916b..c09c085 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java @@ -79,8 +79,8 @@ public class GeoserverRESTDatastoreManagerTest extends StoreIntegrationTest { private static URL LOCATION_2; public GeoserverRESTDatastoreManagerTest() throws Exception { - super(true); - LOCATION_1 = new URL("file:data/1"); + super(false); + LOCATION_1 = new URL("file:data/shapefiles/"); LOCATION_2 = new URL("file:data/2"); } diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTGeoTiffTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTGeoTiffTest.java index fe79109..1eaf9df 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTGeoTiffTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTGeoTiffTest.java @@ -108,7 +108,7 @@ public class GeoserverRESTGeoTiffTest extends GeoserverRESTTest { assertTrue("publish() failed", pub); double[] bbox = {-103.85, 44.38, -103.62, 44.50}; - pub = publisher.publishGeoTIFF(DEFAULT_WS, storeName+"another_complex", "layername_complex", geotiff, "EPSG:4326", ProjectionPolicy.REPROJECT_TO_DECLARED, "raster", bbox); + pub = publisher.publishGeoTIFF(DEFAULT_WS, storeName+"another_complex", storeName+"another_complex", geotiff, "EPSG:4326", ProjectionPolicy.REPROJECT_TO_DECLARED, "raster", bbox); assertTrue("publish() failed", pub); diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImageMosaicTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImageMosaicTest.java index 491cfff..93582c3 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImageMosaicTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImageMosaicTest.java @@ -29,9 +29,11 @@ package it.geosolutions.geoserver.rest.publisher; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.ParameterConfigure; import it.geosolutions.geoserver.rest.GeoserverRESTTest; import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore; +import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder; import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; import it.geosolutions.geoserver.rest.encoder.coverage.GSImageMosaicEncoder; +import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; @@ -42,6 +44,7 @@ import java.io.IOException; import org.apache.commons.httpclient.NameValuePair; import org.junit.Test; import static org.junit.Assert.*; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; @@ -91,7 +94,7 @@ public class GeoserverRESTImageMosaicTest extends GeoserverRESTTest { * or create a new one from an existing store: * publisher.createCoverage(ce, wsname, csname); */ - coverageEncoder.setName("CoverageName"); +// coverageEncoder.setName("time_geotiff"); coverageEncoder.setAllowMultithreading(true); coverageEncoder.setBackgroundValues(""); @@ -105,13 +108,24 @@ public class GeoserverRESTImageMosaicTest extends GeoserverRESTTest { coverageEncoder.setSRS("EPSG:4326"); coverageEncoder.setSUGGESTED_TILE_SIZE("256,256"); coverageEncoder.setUSE_JAI_IMAGEREAD(true); - // activate time - final GSDimensionInfoEncoder time=new GSDimensionInfoEncoder(true); - time.setPresentation(Presentation.LIST); - // set time metadata - coverageEncoder.setMetadata("time", time); - // not active elevation - coverageEncoder.setMetadata("elevation", new GSDimensionInfoEncoder()); + + GSVersionDecoder v=reader.getGeoserverVersion(); + if (v.compareTo(GSVersionDecoder.VERSION.v24)>=0){ + GSCoverageDimensionEncoder gsCoverageDimensionEncoder = new GSCoverageDimensionEncoder( + "GRAY_INDEX", "GridSampleDimension[-Infinity,Infinity]", "-inf", "inf", + "dobson units³", "REAL_32BITS"); + coverageEncoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder); + } + + // activate time + final GSDimensionInfoEncoder time=new GSDimensionInfoEncoder(true); + time.setPresentation(Presentation.LIST); + // set time metadata + coverageEncoder.setMetadata("time", time); + // not active elevation + coverageEncoder.setMetadata("elevation", new GSDimensionInfoEncoder()); + + assertTrue(publisher.createWorkspace(wsName)); diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTPostgisDatastoreTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTPostgisDatastoreTest.java index c2e2ea8..fa39ecf 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTPostgisDatastoreTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTPostgisDatastoreTest.java @@ -62,7 +62,7 @@ public class GeoserverRESTPostgisDatastoreTest extends StoreIntegrationTest { public GeoserverRESTPostgisDatastoreTest() throws IllegalArgumentException, MalformedURLException { - super(System.getProperty("pgIgnore", "false").equalsIgnoreCase("true")); + super(System.getProperty("pgIgnore", "true").equalsIgnoreCase("true")); } diff --git a/src/test/resources/testdata/coverageExample.xml b/src/test/resources/testdata/coverageExample.xml index a049536..5a24090 100644 --- a/src/test/resources/testdata/coverageExample.xml +++ b/src/test/resources/testdata/coverageExample.xml @@ -1,115 +1,136 @@ - - granuleTestMosaic - granuleTestMosaic - this is an abstract - - topp - - - granuleTestMosaic - - keyword1 - keyword2 - keyword3 - - - - text/xml - ISO19115:2003 - http://www.organization.org/metadata1 - - - text/html - ISO19115:2003 - http://www.organization.org/metadata2 - - - GEOGCS["WGS 84", - DATUM["World Geodetic System 1984", - SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], - AUTHORITY["EPSG","6326"]], - PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], - UNIT["degree", 0.017453292519943295], - AXIS["Geodetic longitude", EAST], - AXIS["Geodetic latitude", NORTH], - AUTHORITY["EPSG","4326"]] - EPSG:4326 - - -180.0 - 180.0 - -90.0 - 90.0 - EPSG:4326 - - - -180.0 - 180.0 - -90.0 - 90.0 - EPSG:4326 - - NONE - true - true - - - - true - LIST - - - - - true - DISCRETE_INTERVAL - 2 - - - - - granuleTestMosaic - - - - - 0 0 - 540 270 - - - 0.6666666666666666 - -0.6666666666666666 - 0.0 - 0.0 - -179.66666666666666 - 89.66666666666667 - - EPSG:4326 - - - - AllowMultithreading - false - - - MaxAllowedTiles - 2147483647 - - - InputTransparentColor - - - - SUGGESTED_TILE_SIZE - 256,256 - - - USE_JAI_IMAGEREAD - false - - - BackgroundValues - -1.0 - - + granuleTestMosaic + granuleTestMosaic + this is an abstract + + topp + + + granuleTestMosaic + + keyword1 + keyword2 + keyword3 + + + + text/xml + ISO19115:2003 + http://www.organization.org/metadata1 + + + text/html + ISO19115:2003 + http://www.organization.org/metadata2 + + + GEOGCS["WGS 84", + DATUM["World Geodetic + System 1984", + SPHEROID["WGS 84", 6378137.0, + 298.257223563, + AUTHORITY["EPSG","7030"]], + AUTHORITY["EPSG","6326"]], + PRIMEM["Greenwich", 0.0, + AUTHORITY["EPSG","8901"]], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic + latitude", NORTH], + AUTHORITY["EPSG","4326"]] + EPSG:4326 + + -180.0 + 180.0 + -90.0 + 90.0 + EPSG:4326 + + + -180.0 + 180.0 + -90.0 + 90.0 + EPSG:4326 + + NONE + true + true + + + + true + LIST + + + + + true + DISCRETE_INTERVAL + 2 + + + + + granuleTestMosaic + + + + + 0 0 + 540 270 + + + 0.6666666666666666 + -0.6666666666666666 + 0.0 + 0.0 + -179.66666666666666 + 89.66666666666667 + + EPSG:4326 + + + + GRAY_INDEX + GridSampleDimension[-Infinity,Infinity] + + -inf + inf + + dobson units³ + + REAL_32BITS + + + + + + AllowMultithreading + false + + + MaxAllowedTiles + 2147483647 + + + InputTransparentColor + + + + SUGGESTED_TILE_SIZE + 256,256 + + + USE_JAI_IMAGEREAD + false + + + BackgroundValues + -1.0 + + \ No newline at end of file