From 255fd8eb4bee0b7c0ab9a23eee956e3e96afb40e Mon Sep 17 00:00:00 2001 From: afabiani Date: Wed, 7 Sep 2016 10:49:29 +0200 Subject: [PATCH] - align and update version --- .travis.yml | 15 + License.txt | 2 +- README | 16 - README.md | 68 ++ pom.xml | 545 ++++++------- .../geoserver/rest/GeoServerRESTManager.java | 2 +- .../rest/GeoServerRESTPublisher.java | 238 +++++- .../geoserver/rest/GeoServerRESTReader.java | 151 ++++ .../it/geosolutions/geoserver/rest/Util.java | 11 +- .../geoserver/rest/decoder/RESTCoverage.java | 11 +- .../geoserver/rest/decoder/RESTWms.java | 306 +++++++ .../geoserver/rest/decoder/RESTWmsList.java | 59 ++ .../geoserver/rest/decoder/RESTWmsStore.java | 145 ++++ .../rest/decoder/RESTWmsStoreList.java | 60 ++ .../rest/encoder/GSAbstractStoreEncoder.java | 2 +- .../rest/encoder/GSLayerEncoder.java | 27 +- .../rest/encoder/GSLayerEncoder21.java | 8 +- .../encoder/coverage/GSCoverageEncoder.java | 76 ++ .../manager/GeoServerRESTImporterManager.java | 36 +- .../manager/GeoServerRESTStyleManager.java | 2 +- .../geoserver/decoder/LayerDecoder21Test.java | 9 +- .../decoder/MetadataDecoderTest.java | 1 - .../geoserver/decoder/VersionDecoderTest.java | 3 - .../decoder/WmsStoreDecoderTest.java | 85 ++ .../geoserver/rest/ConfigTest.java | 2 +- .../rest/GeoServerRESTClassTest.java | 2 - .../rest/GeoserverRESTReaderTest.java | 58 +- .../geoserver/rest/GeoserverRESTTest.java | 11 +- .../geosolutions/geoserver/rest/UtilTest.java | 81 +- .../rest/encoder/GSLayerEncoder21Test.java | 51 +- .../rest/encoder/GSLayerEncoderTest.java | 8 + .../coverage/GSCoverageEncoderTest.java | 7 +- .../GSCoverageDimensionEncoderTest.java | 6 - .../encoder/feature/GSFeatureEncoderTest.java | 3 - ...est.java => DirShapeStoreManagerTest.java} | 21 +- .../publisher/GeoserverRESTArcGridTest.java | 180 +++++ .../publisher/GeoserverRESTGeoTiffTest.java | 42 +- .../publisher/GeoserverRESTImporterTest.java | 37 +- .../publisher/GeoserverRESTShapeTest.java | 46 ++ .../publisher/GeoserverRESTStyleTest.java | 762 +++++++++--------- .../publisher/GeoserverRESTWorkspaceTest.java | 4 - .../GeoserverRESTWorldImageTest.java | 4 - src/test/resources/testdata/resttestdem.asc | 12 + .../resources/testdata/wmsstoreExample.xml | 22 + 44 files changed, 2386 insertions(+), 851 deletions(-) create mode 100644 .travis.yml delete mode 100644 README create mode 100644 README.md create mode 100644 src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsList.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStore.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java create mode 100644 src/test/java/it/geosolutions/geoserver/decoder/WmsStoreDecoderTest.java rename src/test/java/it/geosolutions/geoserver/rest/manager/{GeoserverRESTDatastoreManagerTest.java => DirShapeStoreManagerTest.java} (88%) create mode 100644 src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTArcGridTest.java create mode 100644 src/test/resources/testdata/resttestdem.asc create mode 100644 src/test/resources/testdata/wmsstoreExample.xml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..aec824a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +sudo: false +cache: + directories: + - "$HOME/.m2" +language: java +jdk: + - oraclejdk7 + - openjdk7 +script: + - mvn -B -T2 -fae clean install +notifications: + email: false + on_failure: never +after_success: + - mvn clean cobertura:cobertura coveralls:report diff --git a/License.txt b/License.txt index 8eb93e6..3e30bf1 100644 --- a/License.txt +++ b/License.txt @@ -1,4 +1,4 @@ -Copyright (c) 20007-2011 GeoSolutions +Copyright (c) 20007-2016 GeoSolutions Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README b/README deleted file mode 100644 index e6ed35b..0000000 --- a/README +++ /dev/null @@ -1,16 +0,0 @@ -REST client library to interact with GeoServer (http://www.geoserver.org) - -The purpose of this project is to hold a REST client library to interact with GeoServer; a requirement for this library is to depend as less as possible on external libraries. This library aims at being lean and mean. - -For general questions about this project feel free to use the mailing lists. - -Mailing Lists - -USERS - https://groups.google.com/forum/?fromgroups#!forum/geoserver-manager-users -DEVELOPERS - https://groups.google.com/forum/?fromgroups#!forum/geoserver-manager-devs - -For more information see this page: - -https://github.com/geosolutions-it/geoserver-manager/wiki diff --git a/README.md b/README.md new file mode 100644 index 0000000..63e0808 --- /dev/null +++ b/README.md @@ -0,0 +1,68 @@ +# geoserver-manager +## Status + * Master on travis [![Build Status](https://travis-ci.org/geosolutions-it/geoserver-manager.svg?branch=master)](https://travis-ci.org/geosolutions-it/geoserver-manager) + * Master on Linux + OracleJDK7 [![Build Status](http://build.geo-solutions.it/jenkins/view/GeoServer-manager/job/GeoServer-Manager-Master/badge/icon)](http://build.geo-solutions.it/jenkins/view/GeoServer-manager/job/GeoServer-Manager-Master/) + * Master on Windows + OracleJDK7 [![Build Status](http://winbuild.geo-solutions.it/jenkins/buildStatus/icon?job=GeoServer-Manager-Master)](http://winbuild.geo-solutions.it/jenkins/view/GeoServer-Manager/job/GeoServer-Manager-Master/) + * Stable on Linux + OracleJDK7 [![Build Status](http://build.geo-solutions.it/jenkins/view/GeoServer-manager/job/GeoServer-Manager-Stable/badge/icon)](http://build.geo-solutions.it/jenkins/view/GeoServer-manager/job/GeoServer-Manager-Stable/) + * Stable on Windows + OracleJDK7 [![Build Status](http://winbuild.geo-solutions.it/jenkins/buildStatus/icon?job=GeoServer-Manager-Stable)](http://winbuild.geo-solutions.it/jenkins/view/GeoServer-Manager/job/GeoServer-Manager-Stable/) + + + +## Intro +Client library written in Java to interact with [GeoServer](http://www.geoserver.org) through its [ReST administration interface](http://docs.geoserver.org/stable/en/user/rest/api/index.html). + +The purpose of this project is to hold a ReST client library to interact with GeoServer; a requirement for this library is to depend as less as possible on external libraries. This library aims at being lean and mean. + +For general questions about this project feel free to use the mailing lists. + +## Using the library + +### Working with Maven +In order to include the lib and its dependencies in a Maven project, the repository to point at is this one: + +```xml + + GeoSolutions + http://maven.geo-solutions.it/ + +``` + +and the dependency tag for your pom is as follows: + +```xml + + it.geosolutions + geoserver-manager + 1.7.0 + +``` +### Direct Link to JAR +If you are simply looking for the JAR to download and use you can find it [here](http://maven.geo-solutions.it/it/geosolutions/geoserver-manager/1.7.0/geoserver-manager-1.7.0.jar). + +### GeoServer Compatibility Matrix + + **GeoServer-Manager/GeoServer** | **2.6.x** |**2.7.x** |**2.8.x** |**2.9.x** +-------------------------------- | ----------|----------|----------|--------- + **1.6.0** | Y | Y | P | P + **1.7.0** | N | P | Y | Y + +### Documentation +You can find some examples in the wiki. +## License + +geoserver-manager is released under a permissinve [MIT](https://opensource.org/licenses/MIT) license. See [wikipedia](https://en.wikipedia.org/wiki/MIT_License) for more information. + + +## Mailing Lists + + * [USERS](https://groups.google.com/forum/?fromgroups#!forum/geoserver-manager-users]https://groups.google.com/forum/?fromgroups#!forum/geoserver-manager-users) + * [DEVELOPERS](https://groups.google.com/forum/?fromgroups#!forum/geoserver-manager-devs) + +For more information see [this](https://github.com/geosolutions-it/geoserver-manager/wiki) page. + +## Version +Current stable version is [1.7.0](https://github.com/geosolutions-it/geoserver-manager/releases/tag/v1.7.0) ([Changelog](https://github.com/geosolutions-it/geoserver-manager/wiki/Changelog)). + +## Credits +The work on this library has been initiated by GeoSolutions. Over the years it has been funded by various organizations like UN FAO, German Space Agency (DLR) and others. + diff --git a/pom.xml b/pom.xml index ca0a913..a5ff9f2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,105 +1,112 @@ - + - - 4.0.0 + - it.geosolutions - geoserver-manager - 1.7-SNAPSHOT + 4.0.0 - jar + it.geosolutions + geoserver-manager + 1.8-SNAPSHOT - GeoServer 2 Manager - REST based - - GeoServer Manager is a library to interact with GeoServer 2.x. + jar + + GeoServer Manager - REST based + + GeoServer Manager is a library to interact with GeoServer The scope of this library is to have a simple API, and use as few external libs as possible. - 2007 + 2007 - - GeoSolutions - http://www.geo-solutions.it - + https://github.com/geosolutions-it/geoserver-manager - - - etj - Emanuele Tajariol - etj AT geosolutions.it - GeoSolutions - http://www.geo-solutions.it - - architect - developer - - +1 - - - ccancellieri - Carlo Cancellieri - carlo.cancellieri AT geosolutions.it - GeoSolutions - http://www.geo-solutions.it - - architect - developer - - +1 - - + + GeoSolutions + http://www.geo-solutions.it + - - - MIT License - http://opensource.org/licenses/mit-license.php - repo - - + + + etj + Emanuele Tajariol + etj AT geosolutions.it + GeoSolutions + http://www.geo-solutions.it + + architect + developer + + +1 + + + ccancellieri + Carlo Cancellieri + carlo.cancellieri AT geosolutions.it + GeoSolutions + http://www.geo-solutions.it + + architect + developer + + +1 + + - http://code.google.com/p/geoserver-manager/ + + + MIT License + http://opensource.org/licenses/mit-license.php + repo + + - - googlecode - http://code.google.com/p/geoserver-manager/issues/list - + + GitHub + https://github.com/geosolutions-it/geoserver-manager/issues + - - - GeoServer Manager User List - geoserver-manager-users@googlegroups.com - http://groups.google.com/group/geoserver-manager-users/topics - - + + + GeoServer Manager User List + geoserver-manager-users@googlegroups.com + http://groups.google.com/group/geoserver-manager-users/topics + + - - scm:git:[fetch=]https://github.com/geosolutions-it/geoserver-manager.git[push=]git@github.com:geosolutions-it/geoserver-manager.git - - - https://github.com/geosolutions-it/geoserver-manager - + + scm:git:[fetch=]https://github.com/geosolutions-it/geoserver-manager.git[push=]git@github.com:geosolutions-it/geoserver-manager.git + https://github.com/geosolutions-it/geoserver-manager + - - jenkins - http://ci.geo-solutions.it/ - + + jenkins + http://build.geo-solutions.it/jenkins/view/GeoServer-manager/ + @@ -150,211 +157,207 @@ - - http://maven.geo-solutions.it - - false - geosolutions - ftp://maven.geo-solutions.it/ - - - demo.geosolutions - scp://demo.geo-solutions.it/var/www/share/github/gsman - - + + http://maven.geo-solutions.it + + false + geosolutions + ftp://maven.geo-solutions.it/ + + + demo.geosolutions + scp://demo.geo-solutions.it/var/www/share/github/gsman + + - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.0.2 - - 1.6 - 1.6 - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + + - - org.apache.maven.plugins - maven-javadoc-plugin - 2.7 - - - - - + + org.apache.maven.plugins + maven-javadoc-plugin + 2.7 + + + + + - - - - - true - org.apache.maven.plugins - maven-source-plugin - - true - - - - attach-sources - - jar - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.2.2 - - v@{project.version} - - - + + + + + true + org.apache.maven.plugins + maven-source-plugin + + true + + + + attach-sources + + jar + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.2.2 + + v@{project.version} + + + - - - - - - - - - org.apache.maven.wagon - wagon-ftp - 1.0-beta-7 - - - + + + + + + + + + org.apache.maven.wagon + wagon-ftp + 2.6 + + + - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - http://commons.apache.org/lang/api - http://java.sun.com/j2se/1.5.0/docs/api - http://www.jdom.org/docs/apidocs - - - + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + http://commons.apache.org/lang/api + http://java.sun.com/j2se/1.5.0/docs/api + http://www.jdom.org/docs/apidocs + + + - - - + + - - 1.5.11 - 2.8-SNAPSHOT - + + 1.5.11 + - + - - commons-io - commons-io - 2.0.1 - + + commons-io + commons-io + 2.0.1 + - - commons-httpclient - commons-httpclient - 3.1 - - - commons-logging - commons-logging - - - + + commons-httpclient + commons-httpclient + 3.1 + + + commons-logging + commons-logging + + + + + + jdom + jdom + 1.1 + + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + - - jdom - jdom - 1.1 - - - net.sf.json-lib - json-lib - 2.4 - jdk15 - org.apache.servicemix.bundles org.apache.servicemix.bundles.restlet 1.1.10_3 - + - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - - - - - + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + + + + + - - junit - junit - 4.8.2 - test - + + junit + junit + 4.8.2 + test + - - org.springframework - spring-core - 2.5.6.SEC02 - test - - - commons-logging - commons-logging - - - - - - - org.restlet - org.restlet.ext.fileupload - 1.0.8 - - - commons-fileupload - commons-fileupload - 1.2.1 - + + org.springframework + spring-core + 2.5.6.SEC02 + test + + + commons-logging + commons-logging + + + - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - test - - + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + test + + diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTManager.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTManager.java index ba48a58..7870491 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTManager.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTManager.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2013 GeoSolutions S.A.S. + * Copyright (C) 2007,2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index df8cf0c..c68c533 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2015 GeoSolutions S.A.S. + * Copyright (C) 2007 - 2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -39,10 +39,10 @@ import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy import it.geosolutions.geoserver.rest.encoder.GSWorkspaceEncoder; import it.geosolutions.geoserver.rest.encoder.coverage.GSCoverageEncoder; import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder; -import it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStructuredGridCoverageReaderManager; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStructuredGridCoverageReaderManager.ConfigureCoveragesOption; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStyleManager; +import it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager; import java.io.File; import java.io.FileNotFoundException; @@ -54,13 +54,13 @@ import java.net.URL; import java.net.URLEncoder; import java.util.zip.ZipFile; -import net.sf.json.JSONObject; - import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import net.sf.json.JSONObject; + /** * Connect to a GeoServer instance to publish or modify its contents via REST API. *

@@ -68,6 +68,7 @@ import org.slf4j.LoggerFactory; * * @author ETj (etj at geo-solutions.it) * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it + * @author Lennart Karsten - lennart.k@thinking-aloud.eu */ public class GeoServerRESTPublisher { @@ -93,7 +94,9 @@ public class GeoServerRESTPublisher { private final GeoServerRESTStyleManager styleManager; + private final GeoServerRESTImporterManager importerManager; + /** * Creates a GeoServerRESTPublisher to connect against a GeoServer instance with the given URL and user credentials. * @@ -766,7 +769,9 @@ public class GeoServerRESTPublisher { /** ImageMosaic */ IMAGEMOSAIC, /** Geo referenced image (JPEG,PNG,TIF) */ - WORLDIMAGE; + WORLDIMAGE, + /** Esri ArcGrid */ + ARCGRID; /** * Returns a lowercase representation of the parameter value, suitable to construct the rest call. @@ -1157,13 +1162,24 @@ public class GeoServerRESTPublisher { } // config layer props (style, ...) - final GSLayerEncoder layerEncoder = new GSLayerEncoder(); - if (defaultStyle != null && !defaultStyle.isEmpty()) - layerEncoder.setDefaultStyle(defaultStyle); + final GSLayerEncoder layerEncoder = configureDefaultStyle(defaultStyle); return configureLayer(workspace, datasetName, layerEncoder); } + private GSLayerEncoder configureDefaultStyle(String defaultStyle) { + final GSLayerEncoder layerEncoder = new GSLayerEncoder(); + if (defaultStyle != null && !defaultStyle.isEmpty()) { + if(defaultStyle.indexOf(":") != -1) { + String[] wsAndName = defaultStyle.split(":"); + layerEncoder.setDefaultStyle(wsAndName[0], wsAndName[1]); + } else { + layerEncoder.setDefaultStyle(defaultStyle); + } + } + return layerEncoder; + } + /** * Publish a shapefile. * @@ -1513,6 +1529,202 @@ public class GeoServerRESTPublisher { .toString()) } : (NameValuePair[]) null); } + // ========================================================================== + // === ARCGRID + // ========================================================================== + + /** + * Upload and publish a ArcGrid image. + * + * @param workspace Workspace to use + * @param storeName The store name to be used or created. + * @param arcgrid The ArcGrid file. + * @return true if success. + * @throws FileNotFoundException if ArcGrid file does not exist. + */ + public boolean publishArcGrid(String workspace, String storeName, File arcgrid) + throws FileNotFoundException { + return publishCoverage(workspace, storeName, CoverageStoreExtension.ARCGRID, + "image/arcgrid", arcgrid, ParameterConfigure.FIRST, (NameValuePair[]) null); + } + + /** + * Upload and publish a ArcGrid image. + * + * @param workspace Workspace to use + * @param storeName Name of the coveragestore (if null the file name will be used) + * @param coverageName the name of the coverage (if null the file name will be used) + * @param arcgrid file to upload + * @return true if the operation completed successfully. + * @throws FileNotFoundException if file does not exists + * @throws IllegalArgumentException if workspace or arcgrid are null + */ + public boolean publishArcGrid(final String workspace, final String storeName, + final String coverageName, final File arcgrid) throws FileNotFoundException, + IllegalArgumentException { + if (workspace == null || arcgrid == null) + throw new IllegalArgumentException("Unable to proceed, some arguments are null"); + + return publishCoverage( + workspace, + (storeName != null) ? storeName : FilenameUtils.getBaseName(arcgrid + .getAbsolutePath()), CoverageStoreExtension.ARCGRID, "image/arcgrid", + arcgrid, ParameterConfigure.FIRST, + (coverageName != null) ? new NameValuePair[] { new NameValuePair("coverageName", + coverageName) } : (NameValuePair[]) null); + } + + /** + * Upload and publish a ArcGrid image. + * + * @param workspace Workspace to use + * @param storeName Name of the coveragestore (if null the file name will be used) + * @param coverageName the name of the coverage (if null the file name will be used) + * @param arcgrid file to upload + * @param srs the native CRS + * @param policy projection policy. See {@link ProjectionPolicy}. + * @param defaultStyle the default style to apply. + * @param bbox An array of 4 doubles indicating envelope in EPSG:4326. Order is [Xmin, Ymin, Xmax, Ymax]. + * @return true if the operation completed successfully. + * @throws FileNotFoundException if file does not exists + * @throws IllegalArgumentException if workspace or arcgrid are null + * + */ + public boolean publishArcGrid(String workspace, String storeName, String coverageName, + File arcgrid, String srs, ProjectionPolicy policy, String defaultStyle, double[] bbox) + throws FileNotFoundException, IllegalArgumentException { + if (workspace == null || storeName == null || arcgrid == null || coverageName == null + || srs == null || policy == null || defaultStyle == null) + throw new IllegalArgumentException("Unable to run: null parameter"); + + if (!createCoverageStore( + workspace, + (storeName != null) ? storeName : FilenameUtils.getBaseName(arcgrid + .getAbsolutePath()), UploadMethod.FILE, CoverageStoreExtension.ARCGRID, + "image/arcgrid", arcgrid.toURI(), ParameterConfigure.NONE, (NameValuePair[]) null)) { + LOGGER.error("Unable to create coverage store for coverage: " + arcgrid); + return false; + } + + // config coverage props (srs) + final GSCoverageEncoder coverageEncoder = new GSCoverageEncoder(); + coverageEncoder.setName(coverageName); + coverageEncoder.setTitle(coverageName); + coverageEncoder.setSRS(srs); + coverageEncoder.setNativeFormat("ArcGrid"); + coverageEncoder.addSupportedFormats("ARCGRID"); + coverageEncoder.addKeyword("arcGrid"); + coverageEncoder.addKeyword("WCS"); + coverageEncoder.setNativeCRS(srs); + coverageEncoder.setProjectionPolicy(policy); + coverageEncoder.setRequestSRS(srs); + coverageEncoder.setResponseSRS(srs); + if (bbox != null && bbox.length == 4) { + coverageEncoder.setLatLonBoundingBox(bbox[0], bbox[1], bbox[2], bbox[3], DEFAULT_CRS); + } + + if (!createCoverage(workspace, storeName, coverageEncoder)) { + LOGGER.error("Unable to create a coverage store for coverage: " + arcgrid); + return false; + } + + // config layer props (style, ...) + final GSLayerEncoder layerEncoder = configureDefaultStyle(defaultStyle); + + return configureLayer(workspace, coverageName, layerEncoder); + } + + /** + * Publish a ArcGrid already in a filesystem readable by GeoServer. + * + * @param workspace an existing workspace + * @param storeName the coverageStore to be created + * @param arcgrid the arcGrid to be published + * @param srs the native CRS + * @param policy projection policy. See {@link ProjectionPolicy}. + * @param defaultStyle the default style to apply. + * + * @return true if the operation completed successfully. + * @throws FileNotFoundException if file does not exists + * @throws IllegalArgumentException if any of the mandatory parameters are null. + */ + public boolean publishExternalArcGrid(String workspace, String storeName, File arcgrid, + String coverageName, String srs, ProjectionPolicy policy, String defaultStyle) + throws FileNotFoundException, IllegalArgumentException { + if (workspace == null || storeName == null || arcgrid == null || coverageName == null + || srs == null || policy == null || defaultStyle == null) + throw new IllegalArgumentException("Unable to run: null parameter"); + + // config coverage props (srs) + final GSCoverageEncoder coverageEncoder = new GSCoverageEncoder(); + coverageEncoder.setName(coverageName); + coverageEncoder.setTitle(coverageName); + coverageEncoder.setSRS(srs); + coverageEncoder.setProjectionPolicy(policy); + + // config layer props (style, ...) + final GSLayerEncoder layerEncoder = new GSLayerEncoder(); + layerEncoder.setDefaultStyle(defaultStyle); + + return publishExternalArcGrid(workspace, storeName, arcgrid, coverageEncoder, layerEncoder) != null ? true + : false; + } + + /** + * Publish a ArcGrid already in a filesystem readable by GeoServer. + * + * @param workspace an existing workspace + * @param storeName the coverageStore to be created + * @param arcgrid the arcGrid to be published + * @param coverageEncoder coverage details. See {@link GSCoverageEncoder}. + * @param layerEncoder layer details, See {@link GSLayerEncoder}. + * + * @return true if the operation completed successfully. + * @throws FileNotFoundException if file does not exists + * @throws IllegalArgumentException if any of the mandatory parameters are null. + */ + public RESTCoverageStore publishExternalArcGrid(final String workspace, final String storeName, + final File arcgrid, final GSCoverageEncoder coverageEncoder, + final GSLayerEncoder layerEncoder) throws IllegalArgumentException, + FileNotFoundException { + + if (workspace == null || arcgrid == null || storeName == null || layerEncoder == null + || coverageEncoder == null) + throw new IllegalArgumentException("Unable to run: null parameter"); + + final String coverageName = coverageEncoder.getName(); + if (coverageName.isEmpty()) { + throw new IllegalArgumentException("Unable to run: empty coverage store name"); + } + + // create store + final boolean store = publishExternalCoverage(workspace, storeName, + CoverageStoreExtension.ARCGRID, "text/plain", arcgrid, ParameterConfigure.NONE, + ParameterUpdate.OVERWRITE); + if (!store) { + return null; + } + + // create Coverage Store + if (!createCoverage(workspace, storeName, coverageEncoder)) { + if (LOGGER.isErrorEnabled()) + LOGGER.error("Unable to create a coverage for the store:" + coverageName); + return null; + } + + // create Layer + if (configureLayer(workspace, coverageName, layerEncoder)) { + GeoServerRESTReader reader; + try { + reader = new GeoServerRESTReader(this.restURL, this.gsuser, this.gspass); + return reader.getCoverageStore(workspace, storeName); + } catch (MalformedURLException e) { + LOGGER.error(e.getMessage(), e); + } + } + return null; + } + // ========================================================================== // === GEOTIFF // ========================================================================== @@ -1608,7 +1820,14 @@ public class GeoServerRESTPublisher { coverageEncoder.setName(coverageName); coverageEncoder.setTitle(coverageName); coverageEncoder.setSRS(srs); + coverageEncoder.setNativeFormat("GeoTIFF"); + coverageEncoder.addSupportedFormats("GEOTIFF"); + coverageEncoder.addKeyword("geoTiff"); + coverageEncoder.addKeyword("WCS"); + coverageEncoder.setNativeCRS(srs); coverageEncoder.setProjectionPolicy(policy); + coverageEncoder.setRequestSRS(srs); + coverageEncoder.setResponseSRS(srs); if (bbox != null && bbox.length == 4) { coverageEncoder.setLatLonBoundingBox(bbox[0], bbox[1], bbox[2], bbox[3], DEFAULT_CRS); } @@ -1619,8 +1838,7 @@ public class GeoServerRESTPublisher { } // config layer props (style, ...) - final GSLayerEncoder layerEncoder = new GSLayerEncoder(); - layerEncoder.setDefaultStyle(defaultStyle); + final GSLayerEncoder layerEncoder = configureDefaultStyle(defaultStyle); return configureLayer(workspace, coverageName, layerEncoder); } diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java index 6197063..5aa06ef 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java @@ -45,6 +45,10 @@ import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema; import it.geosolutions.geoserver.rest.decoder.RESTStyle; import it.geosolutions.geoserver.rest.decoder.RESTStyleList; +import it.geosolutions.geoserver.rest.decoder.RESTWms; +import it.geosolutions.geoserver.rest.decoder.RESTWmsList; +import it.geosolutions.geoserver.rest.decoder.RESTWmsStore; +import it.geosolutions.geoserver.rest.decoder.RESTWmsStoreList; import it.geosolutions.geoserver.rest.decoder.RESTWorkspaceList; import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStructuredGridCoverageReaderManager; @@ -544,6 +548,153 @@ public class GeoServerRESTReader { return RESTCoverage.build(response); } + //========================================================================== + //=== WMSSTORES + //========================================================================== + + /** + * Get summary info about all WmsStore in a WorkSpace. + * + * @param workspace The name of the workspace + * + * @return summary info about CoverageStores as a {@link RESTWmsStoreList} + */ + public RESTWmsStoreList getWmsStores(String workspace) { + String url = "/rest/workspaces/" + workspace + "/wmsstores.xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving CS list from " + url); + } + return RESTWmsStoreList.build(load(url)); + } + + /** + * Get detailed info about a given WmsStore in a given Workspace. + * + * @param workspace The name of the workspace + * @param wsName The name of the WmsStore + * @return WmsStore details as a {@link RESTWmsStore} + */ + public RESTWmsStore getWmsStore(String workspace, String wsName) { + String url = "/rest/workspaces/" + workspace + "/wmsstores/" + wsName + ".xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving CS from " + url); + } + return RESTWmsStore.build(load(url)); + } + + /** + * Get detailed info about a Wms's Datastore. + * + * @param wms the RESTWms + * @return wmsStore details as a {@link RESTWmsStore} + */ + public RESTWmsStore getWmsStore(RESTWms wms) { + String url = wms.getStoreUrl(); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving CS from fullurl " + url); + } + String response = loadFullURL(url); + return RESTWmsStore.build(response); + } + + /** + * Checks if the selected Wms store is present. Parameter quietOnNotFound can be used for controlling the logging when 404 is returned. + * + * @param workspace workspace of the wmsstore + * @param wsName name of the wmsstore + * @param quietOnNotFound if true, no exception is logged + * @return boolean indicating if the wmsstore exists + */ + public boolean existsWmsstore(String workspace, String wsName, boolean quietOnNotFound){ + String url = baseurl + "/rest/workspaces/" + workspace + "/wmsstores/" + wsName + ".xml"; + String composed = Util.appendQuietOnNotFound(quietOnNotFound, url); + return HTTPUtils.exists(composed, username, password); + } + + /** + * Checks if the selected wms store is present. + * + * @param workspace workspace of the wmsstore + * @param wsName name of the wmsstore + * @return boolean indicating if the wmsstore exists + */ + public boolean existsWmsstore(String workspace, String wsName){ + return existsCoveragestore(workspace, wsName, Util.DEFAULT_QUIET_ON_NOT_FOUND); + } + + //========================================================================== + //=== WMSS + //========================================================================== + + /** + * Get list of wmss (usually only one). + * + * @param workspace The name of the workspace + * @param wsName The name of the WmsStore + * @return wms list as a {@link RESTWmsList} + */ + public RESTWmsList getWms(String workspace, String wsName) { + String url = "/rest/workspaces/" + workspace + "/wmsstores/" + wsName + "/wmslayers.xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving Wmss from " + url); + } + return RESTWmsList.build(load(url)); + } + + /** + * Get detailed info about a given Wms. + * + * @param workspace The name of the workspace + * @param store The name of the WmsStore + * @param name The name of the Wms + * @return wms details as a {@link RESTwms} + */ + public RESTWms getWms(String workspace, String store, String name) { + String url = "/rest/workspaces/" + workspace + "/wmsstores/" + store + "/wmslayers/"+name+".xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving Wmss from " + url); + } + return RESTWms.build(load(url)); + } + + /** + * Checks if the selected Wms is present. Parameter quietOnNotFound can be used for controlling the logging when 404 is returned. + * + * @param workspace workspace of the wmsstore + * @param wsName name of the wmsstore + * @param name name of the wms + * @param quietOnNotFound if true, no exception is logged + * @return boolean indicating if the coverage exists + */ + public boolean existsWms(String workspace, String store, String name, boolean quietOnNotFound){ + String url = baseurl + "/rest/workspaces/" + workspace + "/wmsstores/" + store + "/wmslayers/"+name+".xml"; + String composed = Util.appendQuietOnNotFound(quietOnNotFound, url); + return HTTPUtils.exists(composed, username, password); + } + + /** + * Checks if the selected wms is present. + * + * @param workspace workspace of the wmsstore + * @param store name of the wmsstore + * @param name name of the wms + * @return boolean indicating if the coverage exists + */ + public boolean existsWms(String workspace, String store, String name){ + return existsWms(workspace, store, name, Util.DEFAULT_QUIET_ON_NOT_FOUND); + } + + /** + * Get detailed info about a Wms given the Layer where it's published with. + * + * @param layer A layer publishing the wmsStore + * @return Wms details as a {@link RESTWms} + */ + public RESTWms getWms(RESTLayer layer) { + String response = loadFullURL(layer.getResourceUrl()); + return RESTWms.build(response); + } + //========================================================================== //========================================================================== diff --git a/src/main/java/it/geosolutions/geoserver/rest/Util.java b/src/main/java/it/geosolutions/geoserver/rest/Util.java index 56419bf..21e6d14 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/Util.java +++ b/src/main/java/it/geosolutions/geoserver/rest/Util.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2015 GeoSolutions S.A.S. + * Copyright (C) 2007 - 2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -50,8 +50,13 @@ public static final String QUIET_ON_NOT_FOUND_PARAM = "quietOnNotFound="; List styles = new ArrayList(); RESTStyle style = reader.getStyle(stylename); - if(style != null) - styles.add(style); + + // We don't want geoserver to be lenient here: take only the real global style if it exists + if(style != null) { + if(style.getWorkspace() == null || style.getWorkspace().isEmpty()) { + styles.add(style); + } + } for (String workspace : reader.getWorkspaceNames()) { style = reader.getStyle(workspace, stylename); diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java index 52b5083..19231fc 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTCoverage.java @@ -171,9 +171,9 @@ public class RESTCoverage extends RESTResource { // return rootElem.getChildText("name"); // } -// public String getNativeName() { -// return rootElem.getChildText("nativeName"); -// } + public String getNativeCoverageName() { + return rootElem.getChildText("nativeCoverageName"); + } public String getNativeFormat() { return rootElem.getChildText("nativeFormat"); @@ -282,6 +282,11 @@ public class RESTCoverage extends RESTResource { builder.append(getNativeName()); builder.append(", "); } + if (getNativeCoverageName() != null) { + builder.append("getNativeCoverageName()="); + builder.append(getNativeCoverageName()); + builder.append(", "); + } if (getAbstract() != null) { builder.append("getAbstract()="); builder.append(getAbstract()); diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java new file mode 100644 index 0000000..39834f6 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java @@ -0,0 +1,306 @@ +/* + * 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.decoder; + +import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.jdom.Element; + +/** + * Parse WMSs returned as XML REST objects. + * + *

This is the XML REST representation: + *

+ *{@code
+
+	comunilazio
+	lait:comunilazio
+	
+		arit
+		
+	
+	comunilazio
+	
+	
+		features
+		comunilazio
+	
+	
+		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
+	
+		11.4482128
+		14.0288013
+		40.7848334
+		42.8396541
+		EPSG:4326
+	
+	
+		11.4482128
+		14.0288013
+		40.7848334
+		42.8396541
+		
+			GEOGCS["WGS84(DD)", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH]]
+		
+	
+	FORCE_DECLARED
+	true
+	
+		false
+	
+	
+		regione
+		
+	
+
+ * }
+ * + * @author cip + */ +public class RESTWms extends RESTResource { + + + public static RESTWms build(String response) { + Element elem = JDOMBuilder.buildElement(response); + return elem == null? null : new RESTWms(elem); + } + + public RESTWms(Element resource) { + super(resource); + } + + public RESTWms(RESTResource resource) { + super(resource.rootElem); + } + +// public String getName() { +// return rootElem.getChildText("name"); +// } + +// public String getNativeName() { +// return rootElem.getChildText("nativeName"); +// } + + + +// public String getNameSpace() { +// return rootElem.getChild("namespace").getChildText("name"); +// } +// +// public String getTitle() { +// return rootElem.getChildText("title"); +// } + + public String getNativeCRS() { + return rootElem.getChildText("nativeCRS"); + } + + public String getSRS() { + return rootElem.getChildText("srs"); + } + + public RESTMetadataList getMetadataList() { + return new RESTMetadataList(rootElem.getChild("metadata")); + } + + public List getDimensionInfo() { + List listDim = new ArrayList(); + for (RESTMetadataList.RESTMetadataElement el : getMetadataList()){ + if(el.getKey().equals(RESTDimensionInfo.TIME) || el.getKey().equals(RESTDimensionInfo.ELEVATION)){ + listDim.add(new RESTDimensionInfo(el.getMetadataElem())); + } + } + return listDim; + } + + /** + * Retrieves the list of parameters for this wms. + * + * @return a {@link Map} where the key is the name for the parameter and the value is the value for the parameter. + */ + @SuppressWarnings("unchecked") + public Map getParametersList() { + Map paramsList = new HashMap(); + + final Element paramsRoot = rootElem.getChild("parameters"); + if (paramsRoot != null) { + final List params = paramsRoot.getChildren(); + if (params != null) { + for (Element param : params) { + final List values = param.getChildren(); + assert values.size()==2; + paramsList.put(values.get(0).getValue(), values.get(1).getValue()); // save key and value + } + } + } + return paramsList; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("RESTWms ["); + if (getNativeCRS() != null) { + builder.append("getNativeCRS()="); + builder.append(getNativeCRS()); + builder.append(", "); + } + if (getSRS() != null) { + builder.append("getSRS()="); + builder.append(getSRS()); + builder.append(", "); + } + if (getMetadataList() != null) { + builder.append("getMetadataList()="); + builder.append(getMetadataList()); + builder.append(", "); + } + if (getDimensionInfo() != null) { + builder.append("getDimensionInfo()="); + builder.append(getDimensionInfo()); + builder.append(", "); + } + if (getParametersList() != null) { + builder.append("getParametersList()="); + builder.append(getParametersList()); + builder.append(", "); + } + if (getName() != null) { + builder.append("getName()="); + builder.append(getName()); + builder.append(", "); + } + if (getTitle() != null) { + builder.append("getTitle()="); + builder.append(getTitle()); + builder.append(", "); + } + if (getNativeName() != null) { + builder.append("getNativeName()="); + builder.append(getNativeName()); + builder.append(", "); + } + if (getAbstract() != null) { + builder.append("getAbstract()="); + builder.append(getAbstract()); + builder.append(", "); + } + if (getNameSpace() != null) { + builder.append("getNameSpace()="); + builder.append(getNameSpace()); + builder.append(", "); + } + if (getStoreName() != null) { + builder.append("getStoreName()="); + builder.append(getStoreName()); + builder.append(", "); + } + if (getStoreType() != null) { + builder.append("getStoreType()="); + builder.append(getStoreType()); + builder.append(", "); + } + if (getStoreUrl() != null) { + builder.append("getStoreUrl()="); + builder.append(getStoreUrl()); + builder.append(", "); + } + if (getCRS() != null) { + builder.append("getCRS()="); + builder.append(getCRS()); + builder.append(", "); + } + builder.append("getMinX()="); + builder.append(getMinX()); + builder.append(", getMaxX()="); + builder.append(getMaxX()); + builder.append(", getMinY()="); + builder.append(getMinY()); + builder.append(", getMaxY()="); + builder.append(getMaxY()); + builder.append(", "); + if (getAttributeList() != null) { + builder.append("getAttributeList()="); + builder.append(getAttributeList()); + builder.append(", "); + } + if (getEncodedAttributeList() != null) { + builder.append("getEncodedAttributeList()="); + builder.append(getEncodedAttributeList()); + builder.append(", "); + } + if (getEncodedMetadataLinkInfoList() != null) { + builder.append("getEncodedMetadataLinkInfoList()="); + builder.append(getEncodedMetadataLinkInfoList()); + } + builder.append("]"); + return builder.toString(); + } + +// public String getStoreName() { +// return rootElem.getChild("store").getChildText("name"); +// } +// +// public String getStoreType() { +// return rootElem.getChild("store").getAttributeValue("class"); +// } + + +// public String getStoreUrl() { +// Element store = rootElem.getChild("store"); +// Element atom = store.getChild("link", Namespace.getNamespace("atom", "http://www.w3.org/2005/Atom")); +// return atom.getAttributeValue("href"); +// } + +// public String getBBCRS() { +// Element elBBox = rootElem.getChild("latLonBoundingBox"); +// return elBBox.getChildText("crs"); +// } +// +// protected double getLatLonEdge(String edge) { +// Element elBBox = rootElem.getChild("latLonBoundingBox"); +// return Double.parseDouble(elBBox.getChildText(edge)); +// } +// +// public double getMinX() { +// return getLatLonEdge("minx"); +// } +// public double getMaxX() { +// return getLatLonEdge("maxx"); +// } +// public double getMinY() { +// return getLatLonEdge("miny"); +// } +// public double getMaxY() { +// return getLatLonEdge("maxy"); +// } +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsList.java new file mode 100644 index 0000000..2d3f0b7 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsList.java @@ -0,0 +1,59 @@ +/* + * 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.decoder; + +import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + +import org.jdom.Element; + +/** + * Parses list of summary data about Wms. + * + *

This is the XML REST representation: + *

{@code 
+	
+		comunilazio
+		
+	
+
+ *
+}
+ * + * @author cip + */ +public class RESTWmsList extends RESTAbstractList { + + public static RESTWmsList build(String response) { + Element elem = JDOMBuilder.buildElement(response); + return elem == null? null : new RESTWmsList(elem); + } + + protected RESTWmsList(Element list) { + super(list); + } + +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStore.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStore.java new file mode 100644 index 0000000..bf2bba3 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStore.java @@ -0,0 +1,145 @@ +/* + * 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.decoder; + +import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + +import org.jdom.Element; + +/** + * Parse WmsStores returned as XML REST objects. + *

+ * This is the XML document returned by GeoServer when requesting a WmsStore: + *

+ * {@code 
+
+	regione
+	WMS
+	true
+	
+		arit
+		
+	
+	
+		true
+	
+	<__default>false
+	http://www.regione.lazio.it/geoserver/wms
+	admin
+	geoserver
+	6
+	60
+	30
+	
+		
+	
+
+ * }
+ * 
+ * + * Note: the whole XML fragment is stored in memory. At the moment, there are + * methods to retrieve only the more useful data. + * + * @author etj + */ +public class RESTWmsStore { + private final Element cs; + + + public RESTWmsStore(Element cs) { + this.cs = cs; + } + + public static RESTWmsStore build(String response) { + if(response == null) + return null; + if(response.isEmpty()) + return new RESTWmsStore(new Element("wmsStore")); // TODO check how to response + + Element pb = JDOMBuilder.buildElement(response); + if(pb != null) + return new RESTWmsStore(pb); + else + return null; + } + + public String getName() { + return cs.getChildText("name"); + } + + public String getType() { + return cs.getChildText("type"); + } + + public Boolean getEnabled() { + return Boolean.parseBoolean(cs.getChildText("enabled")); + } + + public String getWorkspaceName() { + return cs.getChild("workspace").getChildText("name"); + } + + public Boolean getUseConnectionPooling(){ + Element entry = cs.getChild("metadata").getChild("entry"); + return entry.getAttributeValue("key").equals("useConnectionPooling") && Boolean.parseBoolean(entry.getValue()); + } + + public String getCapabilitiesURL() { + return cs.getChildText("capabilitiesURL"); + } + + public String getMaxConnections() { + return cs.getChildText("maxConnections"); + } + + public String getReadTimeout() { + return cs.getChildText("readTimeout"); + } + + public String getConnectTimeout() { + return cs.getChildText("connectTimeout"); + } + + public String getUser() { + return cs.getChildText("user"); + } + + public String getPassword() { + return cs.getChildText("password"); + } + + public String toString() { + StringBuilder sb = new StringBuilder(getClass().getSimpleName()) + .append('['); + if(cs == null) + sb.append("null"); + else + sb.append("name:").append(getName()) + .append(" wsname:").append(getWorkspaceName()); + + return sb.toString(); + } +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java new file mode 100644 index 0000000..cad4f01 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java @@ -0,0 +1,60 @@ +/* + * 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.decoder; + +import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; + +import org.jdom.Element; + +/** + * Parses list of summary data about WmsStores. + * + *

This is the XML REST representation: + *

{@code 
+
+	
+		regione
+		
+	
+
+ *
+}
+ * + * @author cip + */ +public class RESTWmsStoreList extends RESTAbstractList { + + public static RESTWmsStoreList build(String response) { + Element elem = JDOMBuilder.buildElement(response); + return elem == null? null : new RESTWmsStoreList(elem); + } + + protected RESTWmsStoreList(Element list) { + super(list); + } + +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java index e869bd3..e38ecde 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSAbstractStoreEncoder.java @@ -56,7 +56,7 @@ public abstract class GSAbstractStoreEncoder extends PropertyXMLEncoder { } public String getType() { - return ElementUtils.contains(getRoot(), "name").getTextTrim(); + return ElementUtils.contains(getRoot(), "type").getTextTrim(); } public void setName(String name) { 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 b75b438..e022c2d 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder.java @@ -74,9 +74,11 @@ public class GSLayerEncoder extends PropertyXMLEncoder { public final static String STYLES = "styles"; public final static String AUTHORITY_URLS="authorityURLs"; - public final static String IDENTIFIERS="identifiers"; + public final static String IDENTIFIERS="identifiers"; + public final static String DEFAULT_STYLE = "defaultStyle"; final private Element stylesEncoder = new Element(STYLES); + final private Element defaultStyleEncoder = new Element(DEFAULT_STYLE); final private Element authorityURLListEncoder = new Element(AUTHORITY_URLS); final private Element identifierListEncoder = new Element(IDENTIFIERS); @@ -164,6 +166,20 @@ public class GSLayerEncoder extends PropertyXMLEncoder { protected void addDefaultStyle(String defaultStyle) { add("defaultStyle", defaultStyle); } + + /** + * @see {@link GSLayerEncoder#setDefaultStyle(String)} + * @param defaultStyle + */ + protected void addDefaultStyle(String workspace, String defaultStyle) { + addContent(defaultStyleEncoder); + Element el = new Element("name"); + el.setText(defaultStyle); + defaultStyleEncoder.addContent(el); + el = new Element("workspace"); + el.setText(workspace); + defaultStyleEncoder.addContent(el); + } /** * @param defaultStyle The style that will be applied if no style is specified. @@ -175,6 +191,15 @@ public class GSLayerEncoder extends PropertyXMLEncoder { set("defaultStyle", defaultStyle); } + /** + * @see {@link GSLayerEncoder#setDefaultStyle(String)} + * @param defaultStyle + */ + public void setDefaultStyle(String workspace, String defaultStyle) { + remove("defaultStyle"); + addDefaultStyle(workspace, defaultStyle); + } + /** * Add a style * 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 5c72ff9..f2e554c 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * Copyright (C) 2007-2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -26,7 +26,6 @@ package it.geosolutions.geoserver.rest.encoder; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -37,6 +36,7 @@ import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder import it.geosolutions.geoserver.rest.encoder.identifier.IdentifierInfo; import it.geosolutions.geoserver.rest.encoder.utils.NestedElementEncoder; import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; +import java.util.LinkedHashMap; /** * Layer encoder for Geoserver = 2.1 @@ -102,7 +102,7 @@ public class GSLayerEncoder21 extends GSLayerEncoder { */ public void addAuthorityURL(GSAuthorityURLInfoEncoder authorityURLInfo){ if(authorityURLList == null){ - authorityURLList = new HashMap(); + authorityURLList = new LinkedHashMap(); } authorityURLList.put(authorityURLInfo.getHref(), authorityURLInfo.getName()); String jsonStr = ""; @@ -152,7 +152,7 @@ public class GSLayerEncoder21 extends GSLayerEncoder { */ public void addIdentifier(GSIdentifierInfoEncoder identifierInfo){ if(identifierList == null){ - identifierList = new HashMap>(); + identifierList = new LinkedHashMap>(); } String authority = identifierInfo.getAuthority(); 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 e5077fd..4b506e1 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 @@ -41,12 +41,22 @@ import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; */ public class GSCoverageEncoder extends GSResourceEncoder { + public final static String NATIVECOVERAGENAME = "nativeCoverageName"; + + private final static String NATIVE_FORMAT="nativeFormat"; + private final static String SUPPORTED_FORMATS="supportedFormats"; + + private final static String REQUEST_SRS="requestSRS"; + private final static String RESPONSE_SRS="responseSRS"; + + private final Element supportedFormatsListEncoder = new Element(SUPPORTED_FORMATS); public final static String DIMENSIONS = "dimensions"; final private Element dimensionsEncoder = new Element(DIMENSIONS); public GSCoverageEncoder() { super("coverage"); + addContent(supportedFormatsListEncoder); } /** @@ -67,6 +77,40 @@ public class GSCoverageEncoder extends GSResourceEncoder { super.setMetadata(key, dimensionInfo); } + /** + * Add the 'nativeFormat' node with a text value + */ + public void setNativeFormat(String format) { + set(NATIVE_FORMAT, format); + } + + /** + * Add the 'supportedFormat' node with a text value + */ + public void addSupportedFormats(String format) { + final Element el = new Element("string"); + el.setText(format); + supportedFormatsListEncoder.addContent(el); + } + + /** + * Add the 'requestSRS' node with a text value + */ + public void setRequestSRS(String srs) { + final Element el = new Element("string"); + el.setText(srs); + set(REQUEST_SRS, el); + } + + /** + * Add the 'responseSRS' node with a text value + */ + public void setResponseSRS(String srs) { + final Element el = new Element("string"); + el.setText(srs); + set(RESPONSE_SRS, el); + } + /** * Adds a CoverageDimensionInfo to the GeoServer Resource * @@ -106,4 +150,36 @@ public class GSCoverageEncoder extends GSResourceEncoder { return (dimensionsEncoder.removeContent(GSCoverageDimensionEncoder .getFilterByContent(coverageDimensionName))).size() == 0 ? false : true; } + + /** + * Add the 'nativeCoverageName' node with a text value from 'name' + * + * + */ + public void addNativeCoverageName(final String nativeCoverageName) { + add(NATIVECOVERAGENAME, nativeCoverageName); + } + + /** + * Set the 'nativeCoverageName' node with a text value from 'name' + * + * + */ + public void setNativeCoverageName(final String nativeCoverageName) { + set(NATIVECOVERAGENAME, nativeCoverageName); + } + + /** + * Get the nativeCoverageName + * + * @return + */ + public String getNativeCoverageName() { + final Element nativeCoverageNameNode = ElementUtils.contains(getRoot(), NATIVECOVERAGENAME, 1); + if (nativeCoverageNameNode != null) + return nativeCoverageNameNode.getText(); + else + return null; + } + } diff --git a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImporterManager.java b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImporterManager.java index 6766ac2..ccf39e1 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImporterManager.java +++ b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTImporterManager.java @@ -1,18 +1,26 @@ /* - * GeoTools - The Open Source Java GIS Toolkit - * http://geotools.org + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it * - * (C) 2015, Open Source Geospatial Foundation (OSGeo) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * 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.manager; @@ -30,7 +38,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * @author Alessio Fabiani + * @author Alessio Fabiani, GeoSolutions S.A.S. * */ public class GeoServerRESTImporterManager extends GeoServerRESTAbstractManager { 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 00dc28d..769fcb3 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStyleManager.java +++ b/src/main/java/it/geosolutions/geoserver/rest/manager/GeoServerRESTStyleManager.java @@ -528,7 +528,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager { */ public boolean publishStyleInWorkspace(final String workspace, String sldBody) { try { - return publishStyleInWorkspace(workspace, sldBody); + return publishStyleInWorkspace(workspace, sldBody, null); } catch (IllegalArgumentException e) { if (LOGGER.isErrorEnabled()) { LOGGER.error(e.getLocalizedMessage(), e); diff --git a/src/test/java/it/geosolutions/geoserver/decoder/LayerDecoder21Test.java b/src/test/java/it/geosolutions/geoserver/decoder/LayerDecoder21Test.java index c31770a..01b5959 100644 --- a/src/test/java/it/geosolutions/geoserver/decoder/LayerDecoder21Test.java +++ b/src/test/java/it/geosolutions/geoserver/decoder/LayerDecoder21Test.java @@ -1,6 +1,5 @@ package it.geosolutions.geoserver.decoder; -import it.geosolutions.geoserver.rest.decoder.RESTLayer; import it.geosolutions.geoserver.rest.decoder.RESTLayer21; import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder; import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder; @@ -14,6 +13,8 @@ import junit.framework.Assert; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; /** @@ -24,7 +25,9 @@ import org.springframework.core.io.ClassPathResource; * */ public class LayerDecoder21Test{ - + + private final static Logger LOGGER = LoggerFactory.getLogger(LayerDecoder21Test.class); + RESTLayer21 layer; @Before @@ -43,7 +46,7 @@ public class LayerDecoder21Test{ public void testAuthorityURLs() { List authorityURLs = layer .getEncodedAuthorityURLInfoList(); - System.out.println(authorityURLs.size()); + LOGGER.debug("Number of authority URLs: " + authorityURLs.size()); Assert.assertEquals("authority1", authorityURLs.get(0).getName()); Assert.assertEquals("http://www.authority1.org", authorityURLs.get(0) .getHref()); diff --git a/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java b/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java index 55e6720..028c304 100644 --- a/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java @@ -23,7 +23,6 @@ package it.geosolutions.geoserver.decoder; import it.geosolutions.geoserver.rest.decoder.RESTCoverage; import it.geosolutions.geoserver.rest.decoder.RESTDimensionInfo; -import it.geosolutions.geoserver.rest.encoder.metadatalink.GSMetadataLinkInfoEncoder; import java.io.File; import java.io.IOException; diff --git a/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java b/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java index c9dd3b0..411129e 100644 --- a/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/decoder/VersionDecoderTest.java @@ -21,11 +21,8 @@ */ package it.geosolutions.geoserver.decoder; -import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; -import it.geosolutions.geoserver.rest.GeoServerRESTReader; import it.geosolutions.geoserver.rest.GeoserverRESTTest; import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder; -import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder.VERSION; import junit.framework.Assert; import org.jdom.Element; diff --git a/src/test/java/it/geosolutions/geoserver/decoder/WmsStoreDecoderTest.java b/src/test/java/it/geosolutions/geoserver/decoder/WmsStoreDecoderTest.java new file mode 100644 index 0000000..5efce3f --- /dev/null +++ b/src/test/java/it/geosolutions/geoserver/decoder/WmsStoreDecoderTest.java @@ -0,0 +1,85 @@ +package it.geosolutions.geoserver.decoder; + +import it.geosolutions.geoserver.rest.decoder.RESTWmsStore; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.springframework.core.io.ClassPathResource; + +/** + * WmsStoreDecoderTest + * + * @author cip (cippinofg at gmail.com) + * + */ +public class WmsStoreDecoderTest { + + RESTWmsStore wmsstore; + + @Before + public void setup() throws IOException { + File wmsstoreFile = new ClassPathResource("testdata/wmsstoreExample.xml").getFile(); + String wmsstoreContent = FileUtils.readFileToString(wmsstoreFile); + wmsstore = RESTWmsStore.build(wmsstoreContent); + } + + @Test + public void testName() { + Assert.assertEquals(wmsstore.getName(), "wmsstore001"); + } + + @Test + public void testType() { + Assert.assertEquals(wmsstore.getType(), "WMS"); + } + + @Test + public void testEnabled() { + Assert.assertEquals(wmsstore.getEnabled(), true); + } + + @Test + public void testWorkspace() { + Assert.assertEquals(wmsstore.getWorkspaceName(), "ws001"); + } + + @Test + public void testUseConnectionPooling() { + Assert.assertEquals(wmsstore.getUseConnectionPooling(),true); + } + + @Test + public void testCapabilitiesURL() { + Assert.assertEquals(wmsstore.getCapabilitiesURL(), "http://myhost/geoserver/wms"); + } + + @Test + public void testUser() { + Assert.assertEquals(wmsstore.getUser(), "admin"); + } + + @Test + public void testPassword() { + Assert.assertEquals(wmsstore.getPassword(), "geoserver"); + } + + @Test + public void testMaxConnections() { + Assert.assertEquals(wmsstore.getMaxConnections(), "6"); + } + + @Test + public void testReadTimeout() { + Assert.assertEquals(wmsstore.getReadTimeout(), "60"); + } + + @Test + public void testConnectTimeout() { + Assert.assertEquals(wmsstore.getConnectTimeout(), "30"); + } +} diff --git a/src/test/java/it/geosolutions/geoserver/rest/ConfigTest.java b/src/test/java/it/geosolutions/geoserver/rest/ConfigTest.java index ade73bf..02e97b6 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/ConfigTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/ConfigTest.java @@ -64,7 +64,7 @@ public class ConfigTest extends GeoserverRESTTest { LOGGER.info("Existing styles: " + reader.getStyles().getNames()); String basename = FilenameUtils.getBaseName(sldFile.toString()); LOGGER.info("Publishing style " + sldFile + " as " + basename); - assertTrue("Cound not publish " + sldFile, publisher.publishStyle(sldFile, basename)); + assertTrue("Could not publish " + sldFile, publisher.publishStyle(sldFile, basename)); } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/GeoServerRESTClassTest.java b/src/test/java/it/geosolutions/geoserver/rest/GeoServerRESTClassTest.java index e37a626..e1b9d5b 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/GeoServerRESTClassTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/GeoServerRESTClassTest.java @@ -25,12 +25,10 @@ package it.geosolutions.geoserver.rest; import static org.junit.Assert.*; -import static org.junit.Assert.assertTrue; import java.util.List; import it.geosolutions.geoserver.rest.decoder.RESTLayerGroup; -import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import org.junit.Test; import org.slf4j.Logger; diff --git a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTReaderTest.java b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTReaderTest.java index 0656f24..ab2dc7b 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTReaderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTReaderTest.java @@ -35,6 +35,9 @@ import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import java.util.List; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import static org.junit.Assert.*; @@ -44,6 +47,8 @@ import static org.junit.Assert.*; */ public class GeoserverRESTReaderTest extends GeoserverRESTTest { + private final static Logger LOGGER = LoggerFactory.getLogger(GeoserverRESTReaderTest.class); + /** * Test of getLayers method, of class GeoServerRESTReader. */ @@ -56,16 +61,16 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { // assertEquals(/*CHANGEME*/19, result.getChildren("layer").size()); // value in default gs installation // System.out.println("Layers:" + result.getChildren("layer").size()); - System.out.println("Layers:" + result.size()); - System.out.print("Layers:" ); + LOGGER.debug("Layers: " + result.size()); +// LOGGER.debug("Layers:" ); for (NameLinkElem shlayer : result) { assertNotNull(shlayer.getName()); - System.out.print(shlayer.getName() + " "); + LOGGER.debug(shlayer.getName() + " "); } // for (Element layer : (List)result.getChildren("layer")) { // System.out.print(layer.getChildText("name") + " "); // } - System.out.println(); + LOGGER.debug(""); } /** @@ -79,25 +84,25 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { assertNotNull(wslist); // assertEquals(7, wslist.size()); // value in default gs installation - System.out.println("Workspaces: " + wslist.size()); + LOGGER.debug("Workspaces: " + wslist.size()); int dsnum = 0; for (RESTWorkspaceList.RESTShortWorkspace ws : wslist) { - System.out.println("Getting DSlist for WS " + ws.getName() + "..." ); + LOGGER.debug("Getting DSlist for WS " + ws.getName() + "..." ); RESTDataStoreList result = reader.getDatastores(ws.getName()); assertNotNull(result); dsnum += result.size(); for (NameLinkElem ds : result) { assertNotNull(ds.getName()); - System.out.print(ds.getName() + " " ); + LOGGER.debug(ds.getName() + " " ); RESTDataStore datastore = reader.getDatastore(ws.getName(), ds.getName()); assertNotNull(datastore); assertEquals(ds.getName(), datastore.getName()); assertEquals(ws.getName(), datastore.getWorkspaceName()); } - System.out.println(); + LOGGER.debug(""); } - System.out.println(); - System.out.println("Datastores:" + dsnum); // value in default gs installation + LOGGER.debug(""); + LOGGER.debug("Datastores:" + dsnum); // value in default gs installation // assertEquals(4, dsnum); // value in default gs installation } @@ -116,7 +121,6 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { // assertEquals(7, wsnames.size()); // value in default gs installation // System.out.println("Workspaces: " + wslist.size()); - int dsnum = 0; int wscnt = 0; for (RESTWorkspaceList.RESTShortWorkspace ws : wslist) { String wsname = wsnames.get(wscnt++); @@ -158,14 +162,14 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { assertNotNull(names); assertEquals(names.size(), result.size()); // value in default gs installation - System.out.println("Namespaces:" + result.size()); - System.out.print("Namespaces:" ); + LOGGER.debug("Namespaces:" + result.size()); + LOGGER.debug("Namespaces:" ); int namesIdx = 0; for (RESTNamespaceList.RESTShortNamespace ns : result) { assertEquals("namespace mismatch", names.get(namesIdx++), ns.getName()); - System.out.print(ns.getName() + " " ); + LOGGER.debug(ns.getName() + " " ); } - System.out.println(); + LOGGER.debug(""); } /** @@ -179,12 +183,12 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { assertNotNull(names); // assertEquals(7, names.size()); // value in default gs installation - System.out.println("Namespaces:" + names.size()); - System.out.print("Namespaces:"); + LOGGER.debug("Namespaces:" + names.size()); + LOGGER.debug("Namespaces:"); for (String name : names) { - System.out.print(name + " "); + LOGGER.debug(name + " "); } - System.out.println(); + LOGGER.debug(""); } /** @@ -198,12 +202,12 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { assertNotNull(wslist); // assertEquals(7, wslist.size()); // value in default gs installation - System.out.println("Workspaces:" + wslist.size()); - System.out.print("Workspaces:"); + LOGGER.debug("Workspaces:" + wslist.size()); + LOGGER.debug("Workspaces:"); for (RESTWorkspaceList.RESTShortWorkspace ws : wslist) { - System.out.print(ws.getName() + " "); + LOGGER.debug(ws.getName() + " "); } - System.out.println(); + LOGGER.debug(""); assertEquals(wslist.size(), reader.getWorkspaceNames().size()); } @@ -218,12 +222,12 @@ public class GeoserverRESTReaderTest extends GeoserverRESTTest { assertNotNull(names); // assertEquals(7, names.size()); // value in default gs installation - System.out.println("Workspaces:" + names.size()); - System.out.print("Workspaces:"); + LOGGER.debug("Workspaces:" + names.size()); + LOGGER.debug("Workspaces:"); for (String name : names) { - System.out.print(name + " "); + LOGGER.debug(name + " "); } - System.out.println(); + LOGGER.debug(""); } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java index 47acd2b..3161492 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTTest.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * Copyright (C) 2007 - 2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -41,7 +41,6 @@ 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; @@ -98,7 +97,7 @@ public abstract class GeoserverRESTTest { RESTURL = getenv("gsmgr_resturl", "http://localhost:8080/geoserver"); RESTUSER = getenv("gsmgr_restuser", "admin"); RESTPW = getenv("gsmgr_restpw", "geoserver"); - GS_VERSION = getenv("gsmgr_version", "28"); + GS_VERSION = getenv("gsmgr_version", "2.8"); // These tests will destroy data, so let's make sure we do want to run them enabled = getenv("gsmgr_resttest", "false").equalsIgnoreCase("true"); @@ -136,17 +135,17 @@ public abstract class GeoserverRESTTest { + RESTURL); } } else if (existgs == false){ - System.out.println("Failing tests : geoserver not found"); + LOGGER.debug("Failing tests : geoserver not found"); fail("GeoServer not found"); } GSVersionDecoder v=reader.getGeoserverVersion(); if (v.compareTo(VERSION.getVersion(GS_VERSION))!=0){ - System.out.println("Failing tests : geoserver version does not match.\nAccepted versions: "+VERSION.print()); + LOGGER.debug("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 "); + LOGGER.debug("Skipping tests "); LOGGER.warn("Tests are disabled. Please read the documentation to enable them."); } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java b/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java index 06eb10e..69a12df 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2013 GeoSolutions S.A.S. + * Copyright (C) 2007 - 2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -22,20 +22,17 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ - package it.geosolutions.geoserver.rest; -import static it.geosolutions.geoserver.rest.GeoserverRESTTest.publisher; -import static it.geosolutions.geoserver.rest.GeoserverRESTTest.reader; import it.geosolutions.geoserver.rest.decoder.RESTStyle; import java.io.File; import java.io.IOException; -import java.util.List; import org.junit.Test; -import static org.junit.Assert.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import static org.junit.Assert.*; import org.springframework.core.io.ClassPathResource; /** @@ -44,52 +41,66 @@ import org.springframework.core.io.ClassPathResource; */ public class UtilTest extends GeoserverRESTTest { - private final static Logger LOGGER = LoggerFactory.getLogger(UtilTest.class); + private final static Logger LOGGER = LoggerFactory.getLogger(UtilTest.class); - - @Test - public void testSearchStyle() throws IOException { - if (!enabled()) - return; - deleteAll(); + @Test + public void testSearchStyle() throws IOException { + if (!enabled()) { + return; + } + deleteAll(); final String WORKSPACE = "testWorkspace"; - final String STYLENAME = "restteststyle"; + final String STYLENAME = "restteststyle"; - File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); + File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); publisher.createWorkspace(WORKSPACE); - assertEquals(0, reader.getStyles().size()); - assertEquals(0, reader.getStyles(WORKSPACE).size()); + assertEquals(0, reader.getStyles().size()); + assertEquals(0, reader.getStyles(WORKSPACE).size()); assertEquals(0, Util.searchStyles(reader, STYLENAME).size()); - // insert style in workspace - assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile, STYLENAME)); - assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); - assertFalse(reader.existsStyle(STYLENAME)); - assertEquals(0, reader.getStyles().size()); - assertEquals(1, reader.getStyles(WORKSPACE).size()); + // insert style in workspace + assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile, STYLENAME)); + assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); + + // GeoServer returns workspace specific names if hte name is not found as global + assertTrue(reader.existsStyle(STYLENAME)); + + assertEquals(0, reader.getStyles().size()); + assertEquals(1, reader.getStyles(WORKSPACE).size()); assertEquals(1, Util.searchStyles(reader, STYLENAME).size()); // insert global style - assertTrue(publisher.publishStyle(sldFile, STYLENAME)); + assertTrue(publisher.publishStyle(sldFile, STYLENAME)); assertTrue(reader.existsStyle(STYLENAME)); assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); - assertEquals(2, Util.searchStyles(reader, STYLENAME).size()); + for(RESTStyle style : Util.searchStyles(reader, STYLENAME)) + { + LOGGER.debug(style.getWorkspace() + " :: " + style.getName()); + } - assertEquals(1, reader.getStyles().size()); - assertEquals(1, reader.getStyles(WORKSPACE).size()); + // there's a bug in geoserver here: the global style will include workspace info + // https://osgeo-org.atlassian.net/browse/GEOS-7498 + // Commenting out all the concerned test code - List styles = Util.searchStyles(reader, STYLENAME); - - assertEquals(STYLENAME, styles.get(0).getName()); - assertEquals(null, styles.get(0).getWorkspace()); // first one is the global one, if any - - assertEquals(STYLENAME, styles.get(1).getName()); - assertEquals(WORKSPACE, styles.get(1).getWorkspace()); - } +// assertEquals(2, Util.searchStyles(reader, STYLENAME).size()); +// +// assertEquals(1, reader.getStyles().size()); +// assertEquals(1, reader.getStyles(WORKSPACE).size()); +// +// List styles = Util.searchStyles(reader, STYLENAME); +// +// assertEquals(STYLENAME, styles.get(0).getName()); +// +// +// // assertEquals(null, styles.get(0).getWorkspace()); // first one is the global one, if any +// +// assertEquals(STYLENAME, styles.get(1).getName()); +// assertEquals(WORKSPACE, styles.get(1).getWorkspace()); + } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21Test.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21Test.java index c821369..4db042b 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21Test.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoder21Test.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007 - 2011 GeoSolutions S.A.S. + * Copyright (C) 2007-2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * GPLv3 + Classpath exception @@ -19,7 +19,6 @@ */ package it.geosolutions.geoserver.rest.encoder; -import java.util.ArrayList; import java.util.List; import it.geosolutions.geoserver.rest.encoder.authorityurl.AuthorityURLInfo; @@ -46,16 +45,21 @@ public class GSLayerEncoder21Test { public void setup() { layerEncoder = new GSLayerEncoder21(); layerEncoder.setAdvertised(true); - layerEncoder.addAuthorityURL(new GSAuthorityURLInfoEncoder( + layerEncoder.addAuthorityURL( + new GSAuthorityURLInfoEncoder( "authority1", "http://www.authority1.org")); - layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority1", - "identifier1")); - layerEncoder.addAuthorityURL(new GSAuthorityURLInfoEncoder( + layerEncoder.addIdentifier( + new GSIdentifierInfoEncoder( + "authority1", "identifier1")); + layerEncoder.addAuthorityURL( + new GSAuthorityURLInfoEncoder( "authority2", "http://www.authority2.org")); - layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority2", - "identifier2")); - layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority2", - "additionalId")); + layerEncoder.addIdentifier( + new GSIdentifierInfoEncoder( + "authority2", "identifier2")); + layerEncoder.addIdentifier( + new GSIdentifierInfoEncoder( + "authority2", "additionalId")); } @@ -97,34 +101,33 @@ public class GSLayerEncoder21Test { }else if(key.matches("identifiers")){ String jsonStr = el.getValue(); jsonStr = jsonStr.substring(2); - jsonStr = jsonStr.substring(0, - jsonStr.length() - 3); + jsonStr = jsonStr.substring(0, jsonStr.length() - 3); String[] items = jsonStr.split("\\}(,)\\{"); String[] props1 = items[0].split(","); String[] kvp1_1 = props1[0].split("\":"); String[] kvp1_2 = props1[1].split("\":"); - Assert.assertEquals(IdentifierInfo.authority.name(), kvp1_1[0].replace("\"", "")); - Assert.assertEquals("authority2", kvp1_1[1].replace("\"", "")); - Assert.assertEquals(IdentifierInfo.identifier.name(), kvp1_2[0].replace("\"", "")); - Assert.assertEquals("identifier2", kvp1_2[1].replace("\"", "")); + Assert.assertEquals("idx0", IdentifierInfo.authority.name(), kvp1_1[0].replace("\"", "")); + Assert.assertEquals("idx0", "authority1", kvp1_1[1].replace("\"", "")); + Assert.assertEquals("idx0", IdentifierInfo.identifier.name(), kvp1_2[0].replace("\"", "")); + Assert.assertEquals("idx0", "identifier1", kvp1_2[1].replace("\"", "")); String[] props2 = items[1].split(","); String[] kvp2_1 = props2[0].split("\":"); String[] kvp2_2 = props2[1].split("\":"); - Assert.assertEquals(IdentifierInfo.authority.name(), kvp2_1[0].replace("\"", "")); - Assert.assertEquals("authority2", kvp2_1[1].replace("\"", "")); - Assert.assertEquals(IdentifierInfo.identifier.name(), kvp2_2[0].replace("\"", "")); - Assert.assertEquals("additionalId", kvp2_2[1].replace("\"", "")); + Assert.assertEquals("idx1", IdentifierInfo.authority.name(), kvp2_1[0].replace("\"", "")); + Assert.assertEquals("idx1", "authority2", kvp2_1[1].replace("\"", "")); + Assert.assertEquals("idx1", IdentifierInfo.identifier.name(), kvp2_2[0].replace("\"", "")); + Assert.assertEquals("idx1", "identifier2", kvp2_2[1].replace("\"", "")); String[] props3 = items[2].split(","); String[] kvp3_1 = props3[0].split("\":"); String[] kvp3_2 = props3[1].split("\":"); - Assert.assertEquals(IdentifierInfo.authority.name(), kvp3_1[0].replace("\"", "")); - Assert.assertEquals("authority1", kvp3_1[1].replace("\"", "")); - Assert.assertEquals(IdentifierInfo.identifier.name(), kvp3_2[0].replace("\"", "")); - Assert.assertEquals("identifier1", kvp3_2[1].replace("\"", "")); + Assert.assertEquals("idx2", IdentifierInfo.authority.name(), kvp3_1[0].replace("\"", "")); + Assert.assertEquals("idx2", "authority2", kvp3_1[1].replace("\"", "")); + Assert.assertEquals("idx2", IdentifierInfo.identifier.name(), kvp3_2[0].replace("\"", "")); + Assert.assertEquals("idx2", "additionalId", kvp3_2[1].replace("\"", "")); } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoderTest.java index 1d71e58..ed90fdf 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/GSLayerEncoderTest.java @@ -111,4 +111,12 @@ public class GSLayerEncoderTest { Assert.assertEquals("authority1", el.getChild("authority").getValue()); Assert.assertEquals("identifier1", el.getChild("identifier").getValue()); } + + @Test + public void testDefaultStyleWithWorkspace(){ + layerEncoder.setDefaultStyle("ws", "style"); + Element el = (Element) layerEncoder.getRoot().getChild("defaultStyle"); + Assert.assertEquals("style", el.getChild("name").getValue()); + Assert.assertEquals("ws", el.getChild("workspace").getValue()); + } } 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 bb52927..6a7374f 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 @@ -129,9 +129,14 @@ public class GSCoverageEncoderTest extends TestCase { "dobson units³", "REAL_32BITS"); encoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder); - if (LOGGER.isInfoEnabled()) + encoder.setNativeCoverageName("Sample native name"); + if (LOGGER.isInfoEnabled()) LOGGER.info(encoder.toString()); + Element nativeCoverageName = ElementUtils.contains(encoder.getRoot(), GSCoverageEncoder.NATIVECOVERAGENAME); + assertNotNull(nativeCoverageName); + assertEquals("Sample native name", nativeCoverageName.getText()); + final Element el2=ElementUtils.contains(encoder.getRoot(),GSDimensionInfoEncoder.PRESENTATION); Assert.assertNotNull(el2); LOGGER.info("contains_key:"+el2.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 index d6350a1..a4402c1 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/dimensions/GSCoverageDimensionEncoderTest.java @@ -19,12 +19,6 @@ */ 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; 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 d2c381c..61815f5 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 @@ -23,14 +23,11 @@ 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; diff --git a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java b/src/test/java/it/geosolutions/geoserver/rest/manager/DirShapeStoreManagerTest.java similarity index 88% rename from src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java rename to src/test/java/it/geosolutions/geoserver/rest/manager/DirShapeStoreManagerTest.java index c09c085..825ff91 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/manager/GeoserverRESTDatastoreManagerTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/manager/DirShapeStoreManagerTest.java @@ -1,7 +1,7 @@ /* * GeoServer-Manager - Simple Manager Library for GeoServer * - * Copyright (C) 2007,2012 GeoSolutions S.A.S. + * Copyright (C) 2007 - 2016 GeoSolutions S.A.S. * http://www.geo-solutions.it * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -37,6 +37,7 @@ import java.util.Map; import org.junit.Test; import static org.junit.Assert.*; +import org.junit.Ignore; /** * Test datastore handling (create, read and update): @@ -63,10 +64,12 @@ import static org.junit.Assert.*; *
  • Read again. *
  • Test all new values. * - * + * + * @deprecated ignored since dir of shapes cannot be uploaded * @author Oscar Fonts */ -public class GeoserverRESTDatastoreManagerTest extends StoreIntegrationTest { +@Ignore +public class DirShapeStoreManagerTest extends StoreIntegrationTest { private static final String WS_NAME = DEFAULT_WS; @@ -78,7 +81,7 @@ public class GeoserverRESTDatastoreManagerTest extends StoreIntegrationTest { private static URL LOCATION_2; - public GeoserverRESTDatastoreManagerTest() throws Exception { + public DirShapeStoreManagerTest() throws Exception { super(false); LOCATION_1 = new URL("file:data/shapefiles/"); LOCATION_2 = new URL("file:data/2"); @@ -104,7 +107,7 @@ public class GeoserverRESTDatastoreManagerTest extends StoreIntegrationTest { // Create a directory of spatial files with default parameters GSDirectoryOfShapefilesDatastoreEncoder create = new GSDirectoryOfShapefilesDatastoreEncoder( DS_NAME, LOCATION_1); - assertTrue(manager.getStoreManager().create(WS_NAME, create)); + assertTrue("Could not create create store", manager.getStoreManager().create(WS_NAME, create)); // Read the store from server; check all parameter values RESTDataStore read = reader.getDatastore(WS_NAME, DS_NAME); @@ -131,14 +134,14 @@ public class GeoserverRESTDatastoreManagerTest extends StoreIntegrationTest { update.setCacheAndReuseMemoryMaps(false); // update the store - assertTrue(manager.getStoreManager().update(WS_NAME, update)); + assertTrue("Could not update store " + WS_NAME, manager.getStoreManager().update(WS_NAME, update)); // Read again, check that all parameters have changed read = reader.getDatastore(WS_NAME, DS_NAME); - assertEquals(read.getWorkspaceName(), WS_NAME); - assertEquals(read.isEnabled(), false); + assertEquals("Bad workspace name", read.getWorkspaceName(), WS_NAME); + assertEquals("Datastore should not be enabled", read.isEnabled(), false); connParams = read.getConnectionParameters(); - assertEquals(connParams.get("url"), LOCATION_2.toString()); + assertEquals("Bad URL", connParams.get("url"), LOCATION_2.toString()); assertEquals(connParams.get("charset"), "UTF-8"); assertEquals(connParams.get("create spatial index"), "false"); assertEquals(connParams.get("memory mapped buffer"), "true"); diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTArcGridTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTArcGridTest.java new file mode 100644 index 0000000..b2eedb7 --- /dev/null +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTArcGridTest.java @@ -0,0 +1,180 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2016 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.publisher; + +import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType; +import it.geosolutions.geoserver.rest.GeoserverRESTTest; +import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore; +import it.geosolutions.geoserver.rest.decoder.RESTLayer; +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.ClassPathResource; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import static org.junit.Assert.*; + +/** + * Testcase for publishing layers on geoserver. + * We need a running GeoServer to properly run the tests. + * If such geoserver instance cannot be contacted, tests will be skipped. + * + * @author Lennart Karsten - lennart.k@thinking-aloud.eu + * inspired by: Carlo Cancellieri - carlo.cancellieri@geo-solutions.it + */ +public class GeoserverRESTArcGridTest extends GeoserverRESTTest { + + private final static Logger LOGGER = LoggerFactory.getLogger(GeoserverRESTArcGridTest.class); + + private String storeName = "testRESTStoreArcGrid"; + private String layerName = "resttestdem"; + + @Test + public void testExternalArcGrid() throws FileNotFoundException, IOException { + if (!enabled()) return; + deleteAll(); + + File arcgrid = new ClassPathResource("testdata/resttestdem.asc").getFile(); + + assertTrue(reader.getWorkspaces().isEmpty()); + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + + // known state? + assertFalse("Cleanup failed", existsLayer(layerName)); + + // Test exists + assertFalse(reader.existsLayer(DEFAULT_WS, layerName)); + + // test insert + boolean pc = publisher.publishExternalArcGrid(DEFAULT_WS, storeName, arcgrid, layerName,"EPSG:4326",ProjectionPolicy.FORCE_DECLARED,"raster"); + assertTrue("publish() failed", pc); + assertTrue(existsLayer(layerName)); + assertFalse(reader.existsLayer(DEFAULT_WS, layerName)); + LOGGER.info("Published "+pc); + RESTCoverageStore reloadedCS = reader.getCoverageStore(DEFAULT_WS, storeName); + + assertEquals(storeName, reloadedCS.getName()); + assertEquals(DEFAULT_WS, reloadedCS.getWorkspaceName()); + + //test delete + assertTrue("Unpublish() failed", publisher.unpublishCoverage(DEFAULT_WS, storeName, layerName)); + assertTrue("Unpublish() failed", publisher.removeCoverageStore(DEFAULT_WS, storeName)); + assertFalse("Bad unpublish()", publisher.unpublishCoverage(DEFAULT_WS, storeName, layerName)); + assertFalse(existsLayer(layerName)); + } + + @Test + public void testArcGrid() throws FileNotFoundException, IOException { + if (!enabled()) return; + deleteAll(); + + File arcgrid = new ClassPathResource("testdata/resttestdem.asc").getFile(); + + assertTrue(reader.getWorkspaces().isEmpty()); + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + // known state? + assertFalse("Cleanup failed", existsLayer(layerName)); + + // test insert + boolean pub = publisher.publishArcGrid(DEFAULT_WS, storeName, arcgrid); + + assertNotNull("publish() failed", pub); + // Test exists + assertTrue(reader.existsCoveragestore(DEFAULT_WS, storeName)); + assertTrue(reader.existsCoverage(DEFAULT_WS, storeName, storeName)); + + pub = publisher.publishArcGrid(DEFAULT_WS, storeName+"another", "layername", arcgrid); + + assertTrue("publish() failed", pub); + + double[] bbox = {-103.85, 44.38, -103.62, 44.50}; + pub = publisher.publishArcGrid(DEFAULT_WS, storeName+"another_complex", storeName+"another_complex", arcgrid, "EPSG:4326", ProjectionPolicy.REPROJECT_TO_DECLARED, "raster", bbox); + + assertTrue("publish() failed", pub); + + //delete + assertTrue("Unpublish() failed", publisher.removeCoverageStore(DEFAULT_WS, storeName,true)); + // Test not exists + assertFalse(reader.existsCoveragestore(DEFAULT_WS, storeName)); + } + + @Test + public void testArcGridWithStyleInWorkspace() throws IOException { + if (!enabled()) return; + deleteAll(); + + File arcgrid = new ClassPathResource("testdata/resttestdem.asc").getFile(); + + assertTrue(reader.getWorkspaces().isEmpty()); + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + File sldFile = new ClassPathResource("testdata/raster.sld").getFile(); + + + // insert style + assertTrue(publisher.publishStyleInWorkspace(DEFAULT_WS, sldFile, "mystyle")); + assertTrue(reader.existsStyle(DEFAULT_WS, "mystyle")); + + // known state? + assertFalse("Cleanup failed", existsLayer(layerName)); + + // test insert + boolean pub = publisher.publishArcGrid(DEFAULT_WS, storeName, storeName, + arcgrid, "EPSG:4326", ProjectionPolicy.FORCE_DECLARED, DEFAULT_WS + ":" + "mystyle", null); + + assertNotNull("publish() failed", pub); + // Test exists + assertTrue(reader.existsCoveragestore(DEFAULT_WS, storeName)); + assertTrue(reader.existsCoverage(DEFAULT_WS, storeName, storeName)); + RESTLayer layer = reader.getLayer(DEFAULT_WS, storeName); + assertEquals(DEFAULT_WS + ":mystyle", layer.getDefaultStyle()); + assertEquals(DEFAULT_WS, layer.getDefaultStyleWorkspace()); + } + + @Test + public void testReloadCoverageStore() throws FileNotFoundException, IOException { + if (!enabled()) return; + deleteAll(); + + File arcgrid = new ClassPathResource("testdata/resttestdem.asc").getFile(); + + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + // test insert + boolean pub = publisher.publishArcGrid(DEFAULT_WS, storeName, arcgrid); + + assertNotNull("publish() failed", pub); + + // test reload + assertTrue(publisher.reloadStore(DEFAULT_WS, storeName, StoreType.COVERAGESTORES)); + } +} 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 594a619..6e6a9ea 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTGeoTiffTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTGeoTiffTest.java @@ -25,9 +25,14 @@ package it.geosolutions.geoserver.rest.publisher; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType; import it.geosolutions.geoserver.rest.GeoserverRESTTest; import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore; +import it.geosolutions.geoserver.rest.decoder.RESTLayer; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; import java.io.File; @@ -35,7 +40,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import org.junit.Test; -import static org.junit.Assert.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; @@ -88,7 +92,7 @@ public class GeoserverRESTGeoTiffTest extends GeoserverRESTTest { assertFalse("Bad unpublish()", publisher.unpublishCoverage(DEFAULT_WS, storeName, layerName)); assertFalse(existsLayer(layerName)); } - + @Test public void testGeotiff() throws FileNotFoundException, IOException { if (!enabled()) return; @@ -125,6 +129,40 @@ public class GeoserverRESTGeoTiffTest extends GeoserverRESTTest { assertFalse(reader.existsCoveragestore(DEFAULT_WS, storeName)); } + @Test + public void testGeoTiffWithStyleInWorkspace() throws IOException + { + if (!enabled()) return; + deleteAll(); + + File geotiff = new ClassPathResource("testdata/resttestdem.tif").getFile(); + + assertTrue(reader.getWorkspaces().isEmpty()); + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + File sldFile = new ClassPathResource("testdata/raster.sld").getFile(); + + + // insert style + assertTrue(publisher.publishStyleInWorkspace(DEFAULT_WS, sldFile, "mystyle")); + assertTrue(reader.existsStyle(DEFAULT_WS, "mystyle")); + + // known state? + assertFalse("Cleanup failed", existsLayer(layerName)); + + // test insert + boolean pub = publisher.publishGeoTIFF(DEFAULT_WS, storeName, storeName, + geotiff, "EPSG:4326", ProjectionPolicy.FORCE_DECLARED, DEFAULT_WS + ":" + "mystyle", null); + + assertNotNull("publish() failed", pub); + // Test exists + assertTrue("New coverage not found", reader.existsCoveragestore(DEFAULT_WS, storeName)); + assertTrue("New Store not found", reader.existsCoverage(DEFAULT_WS, storeName, storeName)); + RESTLayer layer = reader.getLayer(DEFAULT_WS, storeName); + assertEquals("Bad default style", DEFAULT_WS + ":mystyle", layer.getDefaultStyle()); + assertEquals("Bad workspace for style", DEFAULT_WS, layer.getDefaultStyleWorkspace()); + } + @Test public void testReloadCoverageStore() throws FileNotFoundException, IOException { if (!enabled()) return; diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImporterTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImporterTest.java index 18dc34a..bcb962a 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImporterTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTImporterTest.java @@ -1,19 +1,28 @@ /* - * GeoTools - The Open Source Java GIS Toolkit - * http://geotools.org + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it * - * (C) 2015, Open Source Geospatial Foundation (OSGeo) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * 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.publisher; import static org.junit.Assert.assertEquals; @@ -31,7 +40,7 @@ import org.springframework.core.io.ClassPathResource; * We need a running GeoServer to properly run the tests. * If such geoserver instance cannot be contacted, tests will be skipped. * - * @author Alessio Fabiani + * @author Alessio Fabiani, GeoSolutions S.A.S. * */ public class GeoserverRESTImporterTest extends GeoserverRESTTest { diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTShapeTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTShapeTest.java index 39ceae0..ea7e11c 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTShapeTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTShapeTest.java @@ -240,6 +240,52 @@ public class GeoserverRESTShapeTest extends GeoserverRESTTest { assertTrue("Unpublish() failed", oksld); assertFalse(reader.existsStyle(styleName)); } + + @Test + public void testPublishDeleteStyledInWorkspaceShapeZip() throws FileNotFoundException, IOException { + if (!enabled()) { + return; + } + deleteAllWorkspacesRecursively(); +// Assume.assumeTrue(enabled); + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + String ns = "geosolutions"; + String storeName = "resttestshp"; + String layerName = "cities"; + final String styleName = "restteststyle"; + + File zipFile = new ClassPathResource("testdata/resttestshp.zip").getFile(); + publisher.removeDatastore(DEFAULT_WS, storeName,true); + publisher.removeStyleInWorkspace(DEFAULT_WS, styleName); + + File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); + + // insert style + boolean sldpublished = publisher.publishStyleInWorkspace(DEFAULT_WS, sldFile); // Will take the name from sld contents + assertTrue("style publish() failed", sldpublished); + assertTrue(reader.existsStyle(DEFAULT_WS, styleName)); + + // test insert + boolean published = publisher.publishShp(ns, storeName, layerName, zipFile, "EPSG:4326", DEFAULT_WS + ":" + styleName); + assertTrue("publish() failed", published); + assertTrue(existsLayer(layerName)); + + RESTLayer layer = reader.getLayer(layerName); +// RESTLayer layerDecoder = new RESTLayer(layer); + LOGGER.info("Layer style is " + layer.getDefaultStyle()); + assertEquals("Style not assigned properly", DEFAULT_WS + ":" + styleName, layer.getDefaultStyle()); + assertEquals("Style not assigned properly", DEFAULT_WS, layer.getDefaultStyleWorkspace()); + + // remove also datastore + boolean dsRemoved = publisher.removeDatastore(ns, storeName,true); + assertTrue("removeDatastore() failed", dsRemoved); + + //test delete style + boolean oksld = publisher.removeStyleInWorkspace(DEFAULT_WS, styleName); + assertTrue("Unpublish() failed", oksld); + assertFalse(reader.existsStyle(styleName)); + } @Test public void testPublishDeleteShapeZipWithParams() throws FileNotFoundException, IOException { diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTStyleTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTStyleTest.java index dc03abf..04e05a8 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTStyleTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTStyleTest.java @@ -1,380 +1,382 @@ -/* - * GeoServer-Manager - Simple Manager Library for GeoServer - * - * Copyright (C) 2007,2015 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.publisher; - -import it.geosolutions.geoserver.rest.GeoserverRESTTest; -import static it.geosolutions.geoserver.rest.GeoserverRESTTest.publisher; -import static it.geosolutions.geoserver.rest.GeoserverRESTTest.reader; -import it.geosolutions.geoserver.rest.decoder.RESTLayer; -import it.geosolutions.geoserver.rest.decoder.RESTStyle; -import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; -import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; - -import org.apache.commons.io.IOUtils; -import org.jdom.Element; -import org.jdom.Namespace; -import org.junit.Test; -import static org.junit.Assert.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.io.ClassPathResource; - -/** - * Testcase for publishing layers on geoserver. We need a running GeoServer to - * properly run the tests. If such geoserver instance cannot be contacted, tests - * will be skipped. - * - * @author etj - * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it - */ -public class GeoserverRESTStyleTest extends GeoserverRESTTest { - - private final static Logger LOGGER = LoggerFactory - .getLogger(GeoserverRESTStyleTest.class); - - @Test - public void testStyles() throws IOException { - if (!enabled()) - return; - deleteAll(); - - assertEquals(0, reader.getStyles().size()); - - final String STYLENAME = "restteststyle"; - File sldFile = new ClassPathResource("testdata/restteststyle.sld") - .getFile(); - - // insert style - assertTrue(publisher.publishStyle(sldFile)); - assertTrue(reader.existsStyle(STYLENAME)); - - assertFalse(publisher.publishStyle(sldFile)); - assertTrue(reader.existsStyle(STYLENAME)); - - // insert style v110 - final String STYLENAMEV110 = "restteststyleV110"; - File sldFileV110 = new ClassPathResource("testdata/" + STYLENAMEV110 + ".sld").getFile(); - - assertTrue(publisher.publishStyle(sldFileV110, STYLENAMEV110, true)); - assertTrue(reader.existsStyle(STYLENAMEV110)); - - assertFalse(publisher.publishStyle(sldFileV110, STYLENAMEV110, true)); - - RESTStyle style = reader.getStyle(STYLENAME); - assertEquals(STYLENAME, style.getName()); - assertNull(style.getWorkspace()); - - String sld = reader.getSLD(STYLENAME); - assertNotNull(sld); - - Element styleEl = JDOMBuilder.buildElement(sld); - assertNotNull(styleEl); - - Namespace SLDNS = Namespace.getNamespace("sld", - "http://www.opengis.net/sld"); - - try { - - assertEquals(STYLENAME, styleEl.getChild("NamedLayer", SLDNS) - .getChild("Name", SLDNS).getText()); - assertEquals("STYLE FOR TESTING PURPOSES", - styleEl.getChild("NamedLayer", SLDNS) - .getChild("UserStyle", SLDNS) - .getChild("Title", SLDNS).getText()); - } catch (NullPointerException npe) { - fail("Error in SLD"); - } - - // assertEquals(1475, sld.length()); - - assertEquals(2, reader.getStyles().size()); - } - - protected void cleanupTestStyle(final String styleName) { - // dry run delete to work in a known state - if (reader.existsStyle(styleName)) { - LOGGER.info("Clearing stale test style " + styleName); - boolean ok = publisher.removeStyle(styleName); - if (!ok) { - fail("Could not unpublish style " + styleName); - } - } - assertFalse("Cleanup failed", reader.existsStyle(styleName)); - } - - @Test - public void testPublishDeleteStyleFile() throws FileNotFoundException, - IOException { - if (!enabled()) { - return; - } - // Assume.assumeTrue(enabled); - final String styleName = "restteststyle"; - - File sldFile = new ClassPathResource("testdata/restteststyle.sld") - .getFile(); - - final String STYLENAMEV110 = "restteststyleV110"; - File sldFileV110 = new ClassPathResource("testdata/" + STYLENAMEV110 + ".sld") - .getFile(); - - // known state? - cleanupTestStyle(styleName); - cleanupTestStyle(STYLENAMEV110); - - // test insert - boolean published = publisher.publishStyle(sldFile); // Will take the - // name from sld - // contents - assertTrue("publish() failed", published); - assertTrue(reader.existsStyle(styleName)); - - sldFile = new ClassPathResource("testdata/restteststyle2.sld").getFile(); - published = publisher.updateStyle(sldFile, styleName); // update - assertTrue("update() failed", published); - - // test delete - boolean ok = publisher.removeStyle(styleName); - assertTrue("Unpublish() failed", ok); - assertFalse(reader.existsStyle(styleName)); - - published = publisher.publishStyle(sldFileV110, STYLENAMEV110, true); - - assertTrue("publish() failed", published); - assertTrue(reader.existsStyle(STYLENAMEV110)); - - boolean updated = publisher.updateStyle(sldFileV110, STYLENAMEV110, true); - assertTrue("update() failed", updated); - - // test delete - ok = publisher.removeStyle(STYLENAMEV110); - assertTrue("Unpublish() failed", ok); - assertFalse(reader.existsStyle(STYLENAMEV110)); - } - - @Test - public void testPublishDeleteStyleString() throws FileNotFoundException, - IOException { - if (!enabled()) { - return; - } - // Assume.assumeTrue(enabled); - String styleName = "restteststyle"; - - File sldFile = new ClassPathResource("testdata/restteststyle.sld") - .getFile(); - - // known state? - cleanupTestStyle(styleName); - - // test insert - String sldContent = IOUtils.toString(new FileInputStream(sldFile)); - - boolean published = publisher.publishStyle(sldContent); // Will take the - // name from sld - // contents - assertTrue("publish() failed", published); - assertTrue(reader.existsStyle(styleName)); - // test delete - boolean ok = publisher.removeStyle(styleName); - assertTrue("Unpublish() failed", ok); - assertFalse(reader.existsStyle(styleName)); - - styleName = "restteststyle_with_name"; - // test insert with name - published = publisher.publishStyle(sldContent, styleName); // Will set - // the name - assertTrue("publish() failed", published); - assertTrue(reader.existsStyle(styleName)); - String newSldContent = sldContent.replace( - "STYLE FOR TESTING PURPOSES", - "MODIFIED STYLE FOR TESTING"); - published = publisher.updateStyle(newSldContent, styleName); // update - assertTrue("publish() failed", published); - - // test delete - ok = publisher.removeStyle(styleName); - assertTrue("Unpublish() failed", ok); - assertFalse(reader.existsStyle(styleName)); - - } - - @Test - public void testUpdateDefaultStyle() throws FileNotFoundException, - IOException { - if (!enabled()) { - return; - } - deleteAll(); - - String storeName = "resttestshp"; - String layerName = "cities"; - - final String styleName = "restteststyle"; - { - File sldFile = new ClassPathResource("testdata/restteststyle.sld") - .getFile(); - cleanupTestStyle(styleName); - boolean sldpublished = publisher.publishStyle(sldFile); // Will take - // the name - // from sld - // contents - assertTrue("style publish() failed", sldpublished); - assertTrue(reader.existsStyle(styleName)); - } - - final String styleName2 = "restteststyle2"; - { - File sldFile = new ClassPathResource("testdata/restteststyle2.sld") - .getFile(); - cleanupTestStyle(styleName2); - boolean sldpublished = publisher.publishStyle(sldFile, styleName2); - assertTrue("style publish() failed", sldpublished); - assertTrue(reader.existsStyle(styleName2)); - } - - File zipFile = new ClassPathResource("testdata/resttestshp.zip") - .getFile(); - - assertTrue(publisher.createWorkspace(DEFAULT_WS)); - - // test insert - boolean published = publisher.publishShp(DEFAULT_WS, storeName, - layerName, zipFile, "EPSG:4326", styleName); - assertTrue("publish() failed", published); - assertTrue(existsLayer(layerName)); - - { - RESTLayer layer = reader.getLayer(layerName); - LOGGER.info("Layer style is " + layer.getDefaultStyle()); - assertEquals(styleName, layer.getDefaultStyle()); - } - - GSLayerEncoder le = new GSLayerEncoder(); - le.setDefaultStyle(styleName2); - publisher.configureLayer(DEFAULT_WS, layerName, le); - - { - RESTLayer layer = reader.getLayer(layerName); - LOGGER.info("Layer style is " + layer.getDefaultStyle()); - assertEquals(styleName2, layer.getDefaultStyle()); - } - - // remove layer and datastore - boolean dsRemoved = publisher.removeDatastore(DEFAULT_WS, storeName, - true); - assertTrue("removeDatastore() failed", dsRemoved); - } - - @Test - public void testStylesInWorkspace() throws IOException { - if (!enabled()) - return; - deleteAll(); - - final String WORKSPACE = "testWorkspace"; - final String STYLENAME = "restteststyle"; - File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); - - publisher.createWorkspace(WORKSPACE); - - assertEquals(0, reader.getStyles().size()); - assertEquals(0, reader.getStyles(WORKSPACE).size()); - - - // insert style - assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile)); - assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); - assertFalse(reader.existsStyle(STYLENAME)); - - // insert style again - assertFalse(publisher.publishStyleInWorkspace(WORKSPACE, sldFile)); - assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); - assertFalse(reader.existsStyle(STYLENAME)); - - String sld = reader.getSLD(WORKSPACE, STYLENAME); - assertNotNull(sld); - - RESTStyle style = reader.getStyle(WORKSPACE, STYLENAME); - assertEquals(STYLENAME, style.getName()); - assertEquals(WORKSPACE, style.getWorkspace()); - - Element styleEl = JDOMBuilder.buildElement(sld); - assertNotNull(styleEl); - - Namespace SLDNS = Namespace.getNamespace("sld", - "http://www.opengis.net/sld"); - - try { - - assertEquals(STYLENAME, styleEl.getChild("NamedLayer", SLDNS) - .getChild("Name", SLDNS).getText()); - assertEquals( - "STYLE FOR TESTING PURPOSES", - styleEl.getChild("NamedLayer", SLDNS) - .getChild("UserStyle", SLDNS) - .getChild("Title", SLDNS).getText()); - } catch (NullPointerException npe) { - fail("Error in SLD"); - } - - // assertEquals(1475, sld.length()); - - assertEquals(0, reader.getStyles().size()); - assertEquals(1, reader.getStyles(WORKSPACE).size()); - } - - @Test - public void testRemoveStylesInWorkspace() throws IOException { - if (!enabled()) - return; - deleteAll(); - - final String WORKSPACE = "testWorkspace"; - final String STYLENAME = "restteststyle"; - final File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); - - publisher.createWorkspace(WORKSPACE); - - assertEquals(0, reader.getStyles(WORKSPACE).size()); - - // insert style - assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile)); - assertEquals(1, reader.getStyles(WORKSPACE).size()); - assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); - - // remove style - assertTrue(publisher.removeStyleInWorkspace(WORKSPACE, STYLENAME, true)); - assertEquals(0, reader.getStyles(WORKSPACE).size()); - assertFalse(reader.existsStyle(WORKSPACE, STYLENAME)); - } - -} \ No newline at end of file +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007-2016 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.publisher; + +import it.geosolutions.geoserver.rest.GeoserverRESTTest; +import it.geosolutions.geoserver.rest.decoder.RESTLayer; +import it.geosolutions.geoserver.rest.decoder.RESTStyle; +import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; +import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.jdom.Element; +import org.jdom.Namespace; +import org.junit.Test; +import static org.junit.Assert.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.ClassPathResource; + +/** + * Testcase for publishing layers on geoserver. We need a running GeoServer to + * properly run the tests. If such geoserver instance cannot be contacted, tests + * will be skipped. + * + * @author etj + * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it + */ +public class GeoserverRESTStyleTest extends GeoserverRESTTest { + + private final static Logger LOGGER = LoggerFactory.getLogger(GeoserverRESTStyleTest.class); + + @Test + public void testStyles() throws IOException + { + if (!enabled()) { + return; + } + deleteAll(); + + assertEquals(0, reader.getStyles().size()); + + final String STYLENAME = "restteststyle"; + File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); + + // insert style + assertTrue(publisher.publishStyle(sldFile)); + assertTrue(reader.existsStyle(STYLENAME)); + + assertFalse(publisher.publishStyle(sldFile)); + assertTrue(reader.existsStyle(STYLENAME)); + + // insert style v110 + final String STYLENAMEV110 = "restteststyleV110"; + File sldFileV110 = new ClassPathResource("testdata/" + STYLENAMEV110 + ".sld").getFile(); + + assertTrue(publisher.publishStyle(sldFileV110, STYLENAMEV110, true)); + assertTrue(reader.existsStyle(STYLENAMEV110)); + + assertFalse(publisher.publishStyle(sldFileV110, STYLENAMEV110, true)); + + RESTStyle style = reader.getStyle(STYLENAME); + assertEquals(STYLENAME, style.getName()); + assertNull(style.getWorkspace()); + + String sld = reader.getSLD(STYLENAME); + assertNotNull(sld); + + Element styleEl = JDOMBuilder.buildElement(sld); + assertNotNull(styleEl); + + Namespace SLDNS = Namespace.getNamespace("sld", "http://www.opengis.net/sld"); + + try { + assertEquals(STYLENAME, styleEl.getChild("NamedLayer", SLDNS) + .getChild("Name", SLDNS).getText()); + assertEquals("STYLE FOR TESTING PURPOSES", + styleEl.getChild("NamedLayer", SLDNS) + .getChild("UserStyle", SLDNS) + .getChild("Title", SLDNS).getText()); + } catch (NullPointerException npe) { + fail("Error in SLD"); + } + + // assertEquals(1475, sld.length()); + assertEquals(2, reader.getStyles().size()); + } + + protected void cleanupTestStyle(final String styleName) + { + // dry run delete to work in a known state + if (reader.existsStyle(styleName)) { + LOGGER.info("Clearing stale test style " + styleName); + boolean ok = publisher.removeStyle(styleName); + if (!ok) { + fail("Could not unpublish style " + styleName); + } + } + assertFalse("Cleanup failed", reader.existsStyle(styleName)); + } + + @Test + public void testPublishDeleteStyleFile() throws FileNotFoundException, + IOException { + if (!enabled()) { + return; + } + // Assume.assumeTrue(enabled); + final String styleName = "restteststyle"; + + File sldFile = new ClassPathResource("testdata/restteststyle.sld") + .getFile(); + + final String STYLENAMEV110 = "restteststyleV110"; + File sldFileV110 = new ClassPathResource("testdata/" + STYLENAMEV110 + ".sld") + .getFile(); + + // known state? + cleanupTestStyle(styleName); + cleanupTestStyle(STYLENAMEV110); + + // test insert + boolean published = publisher.publishStyle(sldFile); // Will take the + // name from sld + // contents + assertTrue("publish() failed", published); + assertTrue(reader.existsStyle(styleName)); + + sldFile = new ClassPathResource("testdata/restteststyle2.sld").getFile(); + published = publisher.updateStyle(sldFile, styleName); // update + assertTrue("update() failed", published); + + // test delete + boolean ok = publisher.removeStyle(styleName); + assertTrue("Unpublish() failed", ok); + assertFalse(reader.existsStyle(styleName)); + + published = publisher.publishStyle(sldFileV110, STYLENAMEV110, true); + + assertTrue("publish() failed", published); + assertTrue(reader.existsStyle(STYLENAMEV110)); + + boolean updated = publisher.updateStyle(sldFileV110, STYLENAMEV110, true); + assertTrue("update() failed", updated); + + // test delete + ok = publisher.removeStyle(STYLENAMEV110); + assertTrue("Unpublish() failed", ok); + assertFalse(reader.existsStyle(STYLENAMEV110)); + } + + @Test + public void testPublishDeleteStyleString() + throws FileNotFoundException, IOException + { + if (!enabled()) { + return; + } + // Assume.assumeTrue(enabled); + String styleName = "restteststyle"; + + File sldFile = new ClassPathResource("testdata/restteststyle.sld") + .getFile(); + + // known state? + cleanupTestStyle(styleName); + + // test insert + String sldContent = IOUtils.toString(new FileInputStream(sldFile)); + + boolean published = publisher.publishStyle(sldContent); // Will take the + // name from sld + // contents + assertTrue("publish() failed", published); + assertTrue(reader.existsStyle(styleName)); + // test delete + boolean ok = publisher.removeStyle(styleName); + assertTrue("Unpublish() failed", ok); + assertFalse(reader.existsStyle(styleName)); + + styleName = "restteststyle_with_name"; + // test insert with name + published = publisher.publishStyle(sldContent, styleName); // Will set + // the name + assertTrue("publish() failed", published); + assertTrue(reader.existsStyle(styleName)); + String newSldContent = sldContent.replace( + "STYLE FOR TESTING PURPOSES", + "MODIFIED STYLE FOR TESTING"); + published = publisher.updateStyle(newSldContent, styleName); // update + assertTrue("publish() failed", published); + + // test delete + ok = publisher.removeStyle(styleName); + assertTrue("Unpublish() failed", ok); + assertFalse(reader.existsStyle(styleName)); + + } + + @Test + public void testUpdateDefaultStyle() + throws FileNotFoundException, IOException + { + if (!enabled()) { + return; + } + deleteAll(); + + String storeName = "resttestshp"; + String layerName = "cities"; + + final String styleName = "restteststyle"; + { + File sldFile = new ClassPathResource("testdata/restteststyle.sld") + .getFile(); + cleanupTestStyle(styleName); + boolean sldpublished = publisher.publishStyle(sldFile); // Will take + // the name + // from sld + // contents + assertTrue("style publish() failed", sldpublished); + assertTrue(reader.existsStyle(styleName)); + } + + final String styleName2 = "restteststyle2"; + { + File sldFile = new ClassPathResource("testdata/restteststyle2.sld") + .getFile(); + cleanupTestStyle(styleName2); + boolean sldpublished = publisher.publishStyle(sldFile, styleName2); + assertTrue("style publish() failed", sldpublished); + assertTrue(reader.existsStyle(styleName2)); + } + + File zipFile = new ClassPathResource("testdata/resttestshp.zip") + .getFile(); + + assertTrue(publisher.createWorkspace(DEFAULT_WS)); + + // test insert + boolean published = publisher.publishShp(DEFAULT_WS, storeName, + layerName, zipFile, "EPSG:4326", styleName); + assertTrue("publish() failed", published); + assertTrue(existsLayer(layerName)); + + { + RESTLayer layer = reader.getLayer(layerName); + LOGGER.info("Layer style is " + layer.getDefaultStyle()); + assertEquals(styleName, layer.getDefaultStyle()); + } + + GSLayerEncoder le = new GSLayerEncoder(); + le.setDefaultStyle(styleName2); + publisher.configureLayer(DEFAULT_WS, layerName, le); + + { + RESTLayer layer = reader.getLayer(layerName); + LOGGER.info("Layer style is " + layer.getDefaultStyle()); + assertEquals(styleName2, layer.getDefaultStyle()); + } + + // remove layer and datastore + boolean dsRemoved = publisher.removeDatastore(DEFAULT_WS, storeName, + true); + assertTrue("removeDatastore() failed", dsRemoved); + } + + @Test + public void testStylesInWorkspace() throws IOException + { + if (!enabled()) { + return; + } + deleteAll(); + + final String WORKSPACE = "testWorkspace"; + final String STYLENAME = "restteststyle"; + File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); + + publisher.createWorkspace(WORKSPACE); + + assertEquals(0, reader.getStyles().size()); + assertEquals(0, reader.getStyles(WORKSPACE).size()); + + // insert style + assertTrue("Error inserting style", publisher.publishStyleInWorkspace(WORKSPACE, sldFile)); + assertTrue("Style does not exist in workspace", reader.existsStyle(WORKSPACE, STYLENAME)); + + // this assertion is not enforced by geoserver, which is quite lenient in searching names + //assertFalse("Style should not be global", reader.existsStyle(STYLENAME)); + + // insert style again + assertFalse("Dup style not trapped", publisher.publishStyleInWorkspace(WORKSPACE, sldFile)); + assertTrue("Style does not exist in workspace (2)", reader.existsStyle(WORKSPACE, STYLENAME)); + // this assertion is not enforced by geoserver, which is quite lenient in searching names + //assertFalse("Style should not be global (2)", reader.existsStyle(STYLENAME)); + + String sld = reader.getSLD(WORKSPACE, STYLENAME); + assertNotNull(sld); + + RESTStyle style = reader.getStyle(WORKSPACE, STYLENAME); + assertEquals(STYLENAME, style.getName()); + assertEquals(WORKSPACE, style.getWorkspace()); + + Element styleEl = JDOMBuilder.buildElement(sld); + assertNotNull(styleEl); + + Namespace SLDNS = Namespace.getNamespace("sld", "http://www.opengis.net/sld"); + + try { + + assertEquals(STYLENAME, styleEl.getChild("NamedLayer", SLDNS) + .getChild("Name", SLDNS).getText()); + assertEquals( + "STYLE FOR TESTING PURPOSES", + styleEl.getChild("NamedLayer", SLDNS) + .getChild("UserStyle", SLDNS) + .getChild("Title", SLDNS).getText()); + } catch (NullPointerException npe) { + fail("Error in SLD"); + } + + // assertEquals(1475, sld.length()); + assertEquals(0, reader.getStyles().size()); + assertEquals(1, reader.getStyles(WORKSPACE).size()); + } + + @Test + public void testRemoveStylesInWorkspace() throws IOException + { + if (!enabled()) { + return; + } + deleteAll(); + + final String WORKSPACE = "testWorkspace"; + final String STYLENAME = "restteststyle"; + final File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); + + publisher.createWorkspace(WORKSPACE); + + assertEquals(0, reader.getStyles(WORKSPACE).size()); + + // insert style + assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile)); + assertEquals(1, reader.getStyles(WORKSPACE).size()); + assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); + + // remove style + assertTrue(publisher.removeStyleInWorkspace(WORKSPACE, STYLENAME, true)); + assertEquals(0, reader.getStyles(WORKSPACE).size()); + assertFalse(reader.existsStyle(WORKSPACE, STYLENAME)); + } + +} diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorkspaceTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorkspaceTest.java index 4f5ca12..a30ffc4 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorkspaceTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorkspaceTest.java @@ -33,8 +33,6 @@ import java.io.IOException; import org.junit.Test; import static org.junit.Assert.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; /** @@ -47,8 +45,6 @@ import org.springframework.core.io.ClassPathResource; */ public class GeoserverRESTWorkspaceTest extends GeoserverRESTTest { - private final static Logger LOGGER = LoggerFactory.getLogger(GeoserverRESTWorkspaceTest.class); - @Test public void testWorkspaces() { if (!enabled()) return; diff --git a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorldImageTest.java b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorldImageTest.java index ec176c8..9dd0724 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorldImageTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/publisher/GeoserverRESTWorldImageTest.java @@ -35,8 +35,6 @@ 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; /** @@ -48,8 +46,6 @@ import org.springframework.core.io.ClassPathResource; */ public class GeoserverRESTWorldImageTest extends GeoserverRESTTest { - private final static Logger LOGGER = LoggerFactory.getLogger(GeoserverRESTWorldImageTest.class); - @Test public void testPublishWorldImage() throws IOException { diff --git a/src/test/resources/testdata/resttestdem.asc b/src/test/resources/testdata/resttestdem.asc new file mode 100644 index 0000000..939f54a --- /dev/null +++ b/src/test/resources/testdata/resttestdem.asc @@ -0,0 +1,12 @@ +ncols 4 +nrows 6 +xllcorner 0.0 +yllcorner 0.0 +cellsize 50.0 +NODATA_value -9999 +-9999 -9999 5 2 +-9999 20 100 36 +3 8 35 10 +32 42 50 6 +88 75 27 9 +13 5 1 -9999 diff --git a/src/test/resources/testdata/wmsstoreExample.xml b/src/test/resources/testdata/wmsstoreExample.xml new file mode 100644 index 0000000..2898119 --- /dev/null +++ b/src/test/resources/testdata/wmsstoreExample.xml @@ -0,0 +1,22 @@ + + wmsstore001 + WMS + true + + ws001 + + + + true + + <__default>false + http://myhost/geoserver/wms + admin + geoserver + 6 + 60 + 30 + + + + \ No newline at end of file