From 5accaa01ed17fea8b6f0cc442bb7c99a5d4a4656 Mon Sep 17 00:00:00 2001 From: carlo cancellieri Date: Fri, 7 Feb 2014 14:24:14 +0100 Subject: [PATCH] improve versions checking and junit related tests. improve keywords and add lang and vocabulary support. improve junit tests. --- .../rest/decoder/about/GSVersionDecoder.java | 11 ++- .../rest/encoder/GSLayerEncoder.java | 30 +++++++- .../rest/encoder/GSLayerEncoder21.java | 2 + .../rest/encoder/GSResourceEncoder.java | 68 +++++++++++++++++-- .../encoder/coverage/GSCoverageEncoder.java | 1 - .../geoserver/decoder/VersionDecoderTest.java | 4 +- .../geoserver/rest/GeoserverRESTTest.java | 11 +-- .../encoder/feature/GSFeatureEncoderTest.java | 14 ++-- .../GeoserverRESTImageMosaicTest.java | 2 +- 9 files changed, 121 insertions(+), 22 deletions(-) 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 7208762..963e2d2 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -166,9 +166,25 @@ public abstract class GSResourceEncoder extends PropertyXMLEncoder { } public void addKeyword(String keyword) { - final Element el = new Element("string"); - el.setText(keyword); - keywordsListEncoder.addContent(el); + checkKeyword(keyword); + putKeyword(keyword); + } + + /** + * {@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)); } /** @@ -178,13 +194,28 @@ public abstract class GSResourceEncoder extends PropertyXMLEncoder { * @return true if something is removed, false otherwise */ public boolean delKeyword(final String keyword) { - final Element el = new Element("string"); - el.setText(keyword); + return removeKeyword(keyword, null, null); + } + + /** + * 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); + } + + 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(keyword)) { + if (((Element) obj).getText().equals(text)) { return true; } return false; @@ -192,6 +223,31 @@ public abstract class GSResourceEncoder extends PropertyXMLEncoder { })).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 * 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 d549005..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 @@ -47,7 +47,6 @@ public class GSCoverageEncoder extends GSResourceEncoder { public GSCoverageEncoder() { super("coverage"); - addContent(dimensionsEncoder); } /** 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..a01ee78 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; @@ -77,7 +78,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 +96,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"); @@ -138,9 +139,9 @@ public abstract class GeoserverRESTTest { } 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 "); 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 691b60b..50cde70 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 @@ -90,10 +90,10 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { fte.addMetadataLinkInfo(metadatalink); GSLayerEncoder layerEncoder = null; - if (!GSVersionDecoder.VERSION.getVersion(VERSION).equals( + if (!GSVersionDecoder.VERSION.getVersion(GS_VERSION).equals( GSVersionDecoder.VERSION.UNRECOGNIZED)) { layerEncoder = new GSLayerEncoder(); - } else if (GSVersionDecoder.VERSION.getVersion(VERSION).equals( + } else if (GSVersionDecoder.VERSION.getVersion(GS_VERSION).equals( GSVersionDecoder.VERSION.UNRECOGNIZED)) { layerEncoder = new GSLayerEncoder21(); } @@ -224,12 +224,16 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest { 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")); + + 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", 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 45a2baa..a8f6633 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImageMosaicTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImageMosaicTest.java @@ -110,7 +110,7 @@ public class GeoserverRESTImageMosaicTest extends GeoserverRESTTest { coverageEncoder.setUSE_JAI_IMAGEREAD(true); GSVersionDecoder v=reader.getGeoserverVersion(); - if (v.getVersion().equals(GSVersionDecoder.VERSION.getVersion(GSVersionDecoder.VERSION.v24.toString()))){ + if (v.compareTo(GSVersionDecoder.VERSION.v24)>=0){ // New style dimensions (since gs-2.4.x) GSCoverageDimensionEncoder gsCoverageDimensionEncoder = new GSCoverageDimensionEncoder( "GRAY_INDEX", "GridSampleDimension[-Infinity,Infinity]", "-inf", "inf",