Compare commits

...

36 Commits

Author SHA1 Message Date
Simone Giannecchini
d518e9e5a4
Merge pull request #191 from chrismayer/ml-link
Correct link to user-mailing-list in README
2019-05-03 10:57:16 +02:00
mbarto
cf24d45760
Merge pull request #225 from alterdego/master
Fixed typos in README.md
2019-03-06 09:21:24 +01:00
Document Doctor
f10f027fb8 Fixed typos in README.md 2019-03-06 00:51:34 -05:00
afabiani
25759e86a5 - removing non ASCII characters form javadocs 2016-09-07 11:25:11 +02:00
afabiani
febd28bc3a - removing non ASCII characters form javadocs 2016-09-07 11:19:06 +02:00
afabiani
ad6fe87e81 - removing non ASCII characters form javadocs 2016-09-07 11:18:12 +02:00
Alessio Fabiani
318be5853e Add the Importer REST APIs to the GeoServer Manager (#198)
* Pull Request for Issue #148

* Enabled check for Importer Test Case

* Fixed Importer Test Case

* fixed importer to execute the import contextually

*  - add missing maven repo

*  - align and update version
2016-09-07 11:08:24 +02:00
Christian Mayer
c44eece1f1 Correct link to user-mailing-list in README 2016-04-28 09:19:14 +02:00
Simone Giannecchini
c588f2c66b Update pom.xml 2016-04-21 11:27:10 +02:00
Simone Giannecchini
0ec95f03f9 Update README.md 2016-04-21 11:26:37 +02:00
Simone Giannecchini
415df68d4b Merge pull request #189 from geosolutions-it/simboss-patch-2
Update pom.xml
2016-04-19 21:02:02 +02:00
Simone Giannecchini
12c2e09c0e Update pom.xml 2016-04-19 20:53:13 +02:00
Simone Giannecchini
8f0efbc5de Update pom.xml 2016-04-19 20:52:35 +02:00
Simone Giannecchini
baf27a6ed7 Merge pull request #187 from chrismayer/tests-code-optimization
Code optimizations for test sources
2016-04-19 20:46:30 +02:00
Simone Giannecchini
b12342007b Merge pull request #188 from chrismayer/fix-changelog-link
Add more links to README
2016-04-19 12:59:29 +02:00
Christian Mayer
e6c77e9508 Add links to current version in README 2016-04-19 12:53:44 +02:00
Christian Mayer
88668158f6 Remove System.out.print in test sources
This removes the 'System.out.print' commands in the test sources by
replacing them with simple LOGGER.debug commands (fixes #36).
2016-04-19 12:23:04 +02:00
Christian Mayer
c6d6c3d2b9 Remove Java warnings in test sources
This removes Java warnings from the test sources, which do not have a
functional impact, e.g. unused imports or unused variables.
2016-04-19 12:22:33 +02:00
Simone Giannecchini
61b914c610 Merge pull request #186 from geosolutions-it/simboss-patch-2
Update README.md
2016-04-18 18:13:06 +02:00
Simone Giannecchini
ebee7276b2 Update README.md 2016-04-18 18:12:59 +02:00
Simone Giannecchini
10bf4971b2 Merge pull request #183 from geosolutions-it/simboss-patch-5
Update README.md
2016-04-18 10:14:18 +02:00
Simone Giannecchini
9a736d2d7e Update README.md 2016-04-18 10:12:41 +02:00
Simone Giannecchini
8968e36673 Merge pull request #179 from geosolutions-it/simboss-patch-3
Update README.md
2016-04-17 16:52:48 +02:00
Simone Giannecchini
224061257f Update README.md 2016-04-17 16:14:37 +02:00
Simone Giannecchini
9e0e9490c2 Update README.md 2016-04-16 12:39:51 +02:00
Simone Giannecchini
62d34ac345 Merge pull request #178 from geosolutions-it/simboss-patch-2
Update GeoServerRESTManager.java
2016-04-16 12:30:54 +02:00
Simone Giannecchini
7490529d2d Update GeoServerRESTManager.java 2016-04-16 12:28:16 +02:00
Simone Giannecchini
7fdf019cd6 Update README.md 2016-04-16 12:26:59 +02:00
Simone Giannecchini
a8412ea7e9 Update README.md 2016-04-16 12:24:02 +02:00
etj
098999b9b2 Version 1.8-SNAPSHOT 2016-04-15 13:19:43 +02:00
etj
0259686b3c Release 1.7.0 2016-04-15 13:05:48 +02:00
etj
d2bbcc46a7 #176 Fix some more integration tests 2016-04-15 12:37:10 +02:00
Daniele Romagnoli
7af3899802 Fixing Header's year and removing a new method marked as deprecated (copy and paste from similar code) 2016-04-11 14:17:07 +02:00
etj
ff7f383591 #176 Fix tests related to styles in workspaces 2016-04-08 19:28:54 +02:00
etj
5447c06dbc Fix internal data ordering. Close #166. 2016-04-08 17:59:37 +02:00
Simone Giannecchini
db5d949e71 Update README.md 2016-04-06 18:06:47 +02:00
32 changed files with 1489 additions and 809 deletions

View File

@ -1,28 +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.
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.
## 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
<repository>
<id>GeoSolutions</id>
<url>http://maven.geo-solutions.it/</url>
</repository>
```
and the dependency tag for your pom is as follows:
```xml
<dependency>
<groupId>it.geosolutions</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.7.0</version>
</dependency>
```
### 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.
geoserver-manager is released under a permissive [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)
* [USERS](https://groups.google.com/group/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.

578
pom.xml
View File

@ -1,287 +1,361 @@
<!-- * 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. -->
<!--
* 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<groupId>it.geosolutions</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.7-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<groupId>it.geosolutions</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.8-SNAPSHOT</version>
<name>GeoServer 2 Manager - REST based</name>
<description>
GeoServer Manager is a library to interact with GeoServer 2.x.
<packaging>jar</packaging>
<name>GeoServer Manager - REST based</name>
<description>
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.
</description>
<inceptionYear>2007</inceptionYear>
<inceptionYear>2007</inceptionYear>
<organization>
<name>GeoSolutions</name>
<url>http://www.geo-solutions.it</url>
</organization>
<url>https://github.com/geosolutions-it/geoserver-manager</url>
<developers>
<developer>
<id>etj</id>
<name>Emanuele Tajariol</name>
<email>etj AT geosolutions.it</email>
<organization>GeoSolutions</organization>
<organizationUrl>http://www.geo-solutions.it</organizationUrl>
<roles>
<role>architect</role>
<role>developer</role>
</roles>
<timezone>+1</timezone>
</developer>
<developer>
<id>ccancellieri</id>
<name>Carlo Cancellieri</name>
<email>carlo.cancellieri AT geosolutions.it</email>
<organization>GeoSolutions</organization>
<organizationUrl>http://www.geo-solutions.it</organizationUrl>
<roles>
<role>architect</role>
<role>developer</role>
</roles>
<timezone>+1</timezone>
</developer>
</developers>
<organization>
<name>GeoSolutions</name>
<url>http://www.geo-solutions.it</url>
</organization>
<licenses>
<license>
<name>MIT License</name>
<url>http://opensource.org/licenses/mit-license.php</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>etj</id>
<name>Emanuele Tajariol</name>
<email>etj AT geosolutions.it</email>
<organization>GeoSolutions</organization>
<organizationUrl>http://www.geo-solutions.it</organizationUrl>
<roles>
<role>architect</role>
<role>developer</role>
</roles>
<timezone>+1</timezone>
</developer>
<developer>
<id>ccancellieri</id>
<name>Carlo Cancellieri</name>
<email>carlo.cancellieri AT geosolutions.it</email>
<organization>GeoSolutions</organization>
<organizationUrl>http://www.geo-solutions.it</organizationUrl>
<roles>
<role>architect</role>
<role>developer</role>
</roles>
<timezone>+1</timezone>
</developer>
</developers>
<url>http://code.google.com/p/geoserver-manager/</url>
<licenses>
<license>
<name>MIT License</name>
<url>http://opensource.org/licenses/mit-license.php</url>
<distribution>repo</distribution>
</license>
</licenses>
<issueManagement>
<system>googlecode</system>
<url>http://code.google.com/p/geoserver-manager/issues/list</url>
</issueManagement>
<issueManagement>
<system>GitHub</system>
<url>https://github.com/geosolutions-it/geoserver-manager/issues</url>
</issueManagement>
<mailingLists>
<mailingList>
<name>GeoServer Manager User List</name>
<post>geoserver-manager-users@googlegroups.com </post>
<archive>http://groups.google.com/group/geoserver-manager-users/topics</archive>
</mailingList>
</mailingLists>
<mailingLists>
<mailingList>
<name>GeoServer Manager User List</name>
<post>geoserver-manager-users@googlegroups.com </post>
<archive>http://groups.google.com/group/geoserver-manager-users/topics</archive>
</mailingList>
</mailingLists>
<scm>
<connection>scm:git:[fetch=]https://github.com/geosolutions-it/geoserver-manager.git[push=]git@github.com:geosolutions-it/geoserver-manager.git</connection>
<!--developerConnection>scm:git</developerConnection -->
<!--tag>master</tag -->
<url>https://github.com/geosolutions-it/geoserver-manager</url>
</scm>
<scm>
<connection>scm:git:[fetch=]https://github.com/geosolutions-it/geoserver-manager.git[push=]git@github.com:geosolutions-it/geoserver-manager.git</connection>
<url>https://github.com/geosolutions-it/geoserver-manager</url>
</scm>
<ciManagement>
<system>jenkins</system>
<url>http://ci.geo-solutions.it/</url>
</ciManagement>
<ciManagement>
<system>jenkins</system>
<url>http://build.geo-solutions.it/jenkins/view/GeoServer-manager/</url>
</ciManagement>
<distributionManagement>
<downloadUrl>http://maven.geo-solutions.it</downloadUrl>
<repository>
<uniqueVersion>false</uniqueVersion>
<id>geosolutions</id>
<url>ftp://maven.geo-solutions.it/</url>
</repository>
<site>
<id>demo.geosolutions</id>
<url>scp://demo.geo-solutions.it/var/www/share/github/gsman</url>
</site>
</distributionManagement>
<repositories>
<repository>
<id>boundless</id>
<name>Boundless Maven Repository</name>
<url>https://repo.boundlessgeo.com/main/</url>
<!-- contains snapshot and release (including third-party-dependences) -->
<!-- Restlet maven Repository (http://maven.restlet.org) -->
<!-- ucar (https://artifacts.unidata.ucar.edu/content/repositories/unidata-releases) -->
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>osgeo</id>
<name>Open Source Geospatial Foundation Repository</name>
<url>http://download.osgeo.org/webdav/geotools/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-restlet</id>
<name>Restlet Maven Repository</name>
<url>http://maven.restlet.org</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>geosolutions</id>
<name>geosolutions repository</name>
<url>http://maven.geo-solutions.it/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<distributionManagement>
<downloadUrl>http://maven.geo-solutions.it</downloadUrl>
<repository>
<uniqueVersion>false</uniqueVersion>
<id>geosolutions</id>
<url>ftp://maven.geo-solutions.it/</url>
</repository>
<site>
<id>demo.geosolutions</id>
<url>scp://demo.geo-solutions.it/var/www/share/github/gsman</url>
</site>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<configuration>
<detectLinks />
<!-- <links> <link>http://commons.apache.org/dbcp/apidocs/</link> <link>http://commons.apache.org/fileupload/apidocs/</link>
<link>http://download.oracle.com/javase/6/docs/api</link> </links> -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<configuration>
<detectLinks />
<!-- <links> <link>http://commons.apache.org/dbcp/apidocs/</link> <link>http://commons.apache.org/fileupload/apidocs/</link>
<link>http://download.oracle.com/javase/6/docs/api</link> </links> -->
</configuration>
</plugin>
<!-- ======================================================= -->
<!-- Source packaging. -->
<!-- ======================================================= -->
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- versioning -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
</configuration>
</plugin>
</plugins>
<!-- ======================================================= -->
<!-- Source packaging. -->
<!-- ======================================================= -->
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- versioning -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
</configuration>
</plugin>
</plugins>
<!-- ======================================================== -->
<!-- Extensions settings for Deployment -->
<!-- ======================================================== -->
<extensions>
<!--............................................. -->
<!-- geo-solutions (using wagon ftp) -->
<!--............................................. -->
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-beta-7</version>
</extension>
</extensions>
</build>
<!-- ======================================================== -->
<!-- Extensions settings for Deployment -->
<!-- ======================================================== -->
<extensions>
<!--............................................. -->
<!-- geo-solutions (using wagon ftp) -->
<!--............................................. -->
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>2.6</version>
</extension>
</extensions>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<links>
<link>http://commons.apache.org/lang/api</link>
<link>http://java.sun.com/j2se/1.5.0/docs/api</link>
<link>http://www.jdom.org/docs/apidocs</link>
</links>
</configuration>
</plugin>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<links>
<link>http://commons.apache.org/lang/api</link>
<link>http://java.sun.com/j2se/1.5.0/docs/api</link>
<link>http://www.jdom.org/docs/apidocs</link>
</links>
</configuration>
</plugin>
<!-- <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId>
<version>2.2</version> </plugin> -->
</plugins>
</reporting>
</plugins>
</reporting>
<properties>
<slf4j.version>1.5.11</slf4j.version>
</properties>
<properties>
<slf4j.version>1.5.11</slf4j.version>
</properties>
<dependencies>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.restlet</artifactId>
<version>1.1.10_3</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- commons-logging can be rather simply and conveniently excluded as
a dependency by declaring it in the provided scope within the pom.xml file
of your project. The actual commons-logging classes would be provided by
jcl-over-slf4j.
This translates into the following pom file snippet: -->
<!-- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependency>-->
<!--================================================================= -->
<!-- TEST -->
<!--================================================================= -->
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- commons-logging can be rather simply and conveniently excluded as
a dependency by declaring it in the provided scope within the pom.xml file
of your project. The actual commons-logging classes would be provided by
jcl-over-slf4j. This translates into the following pom file snippet: -->
<!-- <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId>
<version>1.1.1</version> <scope>provided</scope> </dependency> <dependency>
<groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version>
</dependency>
</dependency>-->
<!--================================================================= -->
<!-- TEST -->
<!--================================================================= -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.6.SEC02</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.6.SEC02</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -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

View File

@ -1,7 +1,7 @@
/*
* GeoServer-Manager - Simple Manager Library for GeoServer
*
* Copyright (C) 2007,2015,2016 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
@ -42,6 +42,7 @@ import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
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;
@ -58,6 +59,8 @@ 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.
* <P>
@ -91,6 +94,9 @@ public class GeoServerRESTPublisher {
private final GeoServerRESTStyleManager styleManager;
private final GeoServerRESTImporterManager importerManager;
/**
* Creates a <TT>GeoServerRESTPublisher</TT> to connect against a GeoServer instance with the given URL and user credentials.
*
@ -110,6 +116,7 @@ public class GeoServerRESTPublisher {
LOGGER.error("Bad URL: Calls to GeoServer are going to fail" , ex);
}
styleManager = new GeoServerRESTStyleManager(url, username, password);
importerManager = new GeoServerRESTImporterManager(url, username, password);
}
// ==========================================================================
@ -1567,19 +1574,6 @@ public class GeoServerRESTPublisher {
coverageName) } : (NameValuePair[]) null);
}
/**
* Same as {@link #publishArcGrid(String, String, String, File, String, ProjectionPolicy, String, double[])} but without the last parameter
* (bbox). Kept here for backwards compatibility.
*
* @deprecated use the former method with bbox set to null.
*/
public boolean publishArcGrid(String workspace, String storeName, String resourceName,
File arcgrid, String srs, ProjectionPolicy policy, String defaultStyle)
throws FileNotFoundException, IllegalArgumentException {
return publishArcGrid(workspace, storeName, resourceName, arcgrid, srs, policy,
defaultStyle, null);
}
/**
* Upload and publish a ArcGrid image.
*
@ -3158,4 +3152,58 @@ public class GeoServerRESTPublisher {
}
/**
* Refers to {@link it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager#postNewImport() postNewImport} method
*
* @throws Exception
*/
public int postNewImport() throws Exception {
return importerManager.postNewImport();
}
/**
* Refers to {@link it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager#postNewTaskAsMultiPartForm(int, String) postNewTaskAsMultiPartForm} method
*
* @throws Exception
*/
public int postNewTaskAsMultiPartForm(int i, String data) throws Exception {
return importerManager.postNewTaskAsMultiPartForm(i, data);
}
/**
* Refers to {@link it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager#getTask(int, int) getTask} method
*
* @throws Exception
*/
public JSONObject getTask(int i, int t) throws Exception {
return importerManager.getTask(i, t);
}
/**
* Refers to {@link it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager#putTask(int, int, String) putTask} method
*
* @throws Exception
*/
public void putTask(int i, int t, String json) throws Exception {
importerManager.putTask(i, t, json);
}
/**
* Refers to {@link it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager#putTaskLayer(int, int, String) putTaskLayer} method
*
* @throws Exception
*/
public void putTaskLayer(int i, int t, String json) throws Exception {
importerManager.putTaskLayer(i, t, json);
}
/**
* Refers to {@link it.geosolutions.geoserver.rest.manager.GeoServerRESTImporterManager#postImport(int) postImport} method
*
* @throws Exception
*/
public void postImport(int i) throws Exception {
importerManager.postImport(i);
}
}

View File

@ -25,6 +25,7 @@
package it.geosolutions.geoserver.rest;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@ -33,6 +34,11 @@ import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
@ -48,6 +54,9 @@ import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -117,6 +126,22 @@ public class HTTPUtils {
return null;
}
/**
* Executes a request using the GET method and parses the result as a json object.
*
* @param path The path to request.
*
* @return The result parsed as json.
*/
public static JSON getAsJSON(String url, String username, String pw) throws Exception {
String response = get(url, username, pw);
return json(response);
}
public static JSON json(String content) {
return JSONSerializer.toJSON(content);
}
/**
* PUTs a File to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
@ -175,6 +200,23 @@ public class HTTPUtils {
return put(url, content, "text/xml", username, pw);
}
/**
* PUTs a String representing an JSON Object to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
*
* @param url The URL where to connect to.
* @param content The JSON Object to be sent as a String.
* @param username Basic auth credential. No basic auth if null.
* @param pw Basic auth credential. No basic auth if null.
* @return The HTTP response as a String if the HTTP response code was 200
* (OK).
* @throws MalformedURLException
* @return the HTTP response or <TT>null</TT> on errors.
*/
public static String putJson(String url, String content, String username, String pw) {
return put(url, content, "application/json", username, pw);
}
/**
* Performs a PUT to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
@ -233,6 +275,38 @@ public class HTTPUtils {
}
}
/**
* POSTs a list of files as attachments to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
*
* @param url The URL where to connect to.
* @param dir The folder containing the attachments.
* @param username Basic auth credential. No basic auth if null.
* @param pw Basic auth credential. No basic auth if null.
* @return The HTTP response as a String if the HTTP response code was 200
* (OK).
* @throws MalformedURLException
* @return the HTTP response or <TT>null</TT> on errors.
*/
public static String postMultipartForm(String url, File dir, String username, String pw) {
try {
List<Part> parts = new ArrayList<Part>();
for (File f : dir.listFiles()) {
parts.add(new FilePart(f.getName(), f));
}
MultipartRequestEntity multipart = new MultipartRequestEntity(
parts.toArray(new Part[parts.size()]), new PostMethod().getParams());
ByteArrayOutputStream bout = new ByteArrayOutputStream();
multipart.writeRequest(bout);
return post(url, multipart, username, pw);
} catch (Exception ex) {
LOGGER.error("Cannot POST " + url, ex);
return null;
}
}
/**
* POSTs a String representing an XML document to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
@ -250,6 +324,23 @@ public class HTTPUtils {
return post(url, content, "text/xml", username, pw);
}
/**
* POSTs a String representing an JSON Object to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
*
* @param url The URL where to connect to.
* @param content The JSON content to be sent as a String.
* @param username Basic auth credential. No basic auth if null.
* @param pw Basic auth credential. No basic auth if null.
* @return The HTTP response as a String if the HTTP response code was 200
* (OK).
* @throws MalformedURLException
* @return the HTTP response or <TT>null</TT> on errors.
*/
public static String postJson(String url, String content, String username, String pw) {
return post(url, content, "application/json", username, pw);
}
/**
* Performs a POST to the given URL. <BR>
* Basic auth is used if both username and pw are not null.
@ -293,6 +384,7 @@ public class HTTPUtils {
httpMethod.setRequestEntity(requestEntity);
int status = client.executeMethod(httpMethod);
InputStream responseBody;
switch (status) {
case HttpURLConnection.HTTP_OK:
case HttpURLConnection.HTTP_CREATED:
@ -303,9 +395,10 @@ public class HTTPUtils {
LOGGER.info("HTTP " + httpMethod.getStatusText() + ": " + response);
return response;
default:
responseBody = httpMethod.getResponseBodyAsStream();
LOGGER.warn("Bad response: code[" + status + "]" + " msg[" + httpMethod.getStatusText() + "]"
+ " url[" + url + "]" + " method[" + httpMethod.getClass().getSimpleName()
+ "]: " + IOUtils.toString(httpMethod.getResponseBodyAsStream()));
+ "]: " + (responseBody != null ? IOUtils.toString(responseBody) : ""));
return null;
}
} catch (ConnectException e) {

View File

@ -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<RESTStyle> styles = new ArrayList<RESTStyle>();
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);

View File

@ -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) {

View File

@ -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<String,String>();
authorityURLList = new LinkedHashMap<String,String>();
}
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<String,List<String>>();
identifierList = new LinkedHashMap<String,List<String>>();
}
String authority = identifierInfo.getAuthority();

View File

@ -37,7 +37,7 @@ import org.jdom.filter.Filter;
* {@code
* final GSCoverageDimensionEncoder gsCoverageDimensionEncoder =
* new GSCoverageDimensionEncoder("GRAY_INDEX", "GridSampleDimension[-2.147483648E9,-2.147483648E9]",
* String.valueOf(Integer.MIN_VALUE), String.valueOf(Integer.MAX_VALUE), "dobson units³", "REAL_32BITS");
* String.valueOf(Integer.MIN_VALUE), String.valueOf(Integer.MAX_VALUE), "dobson units", "REAL_32BITS");
* coverageEncoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder);
* }
* </pre>
@ -53,7 +53,7 @@ import org.jdom.filter.Filter;
* <min>-2.147483648E9</min>
* <max>2.147483647E9</max>
* </range>
* <unit>dobson units³</unit>
* <unit>dobson units</unit>
* <dimensionType>
* <name>REAL_32BITS</name>
* </dimensionType>
@ -390,4 +390,4 @@ public class GSCoverageDimensionEncoder extends XmlElement {
return null;
}
}
}

View File

@ -0,0 +1,321 @@
/*
* 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.manager;
import it.geosolutions.geoserver.rest.HTTPUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import net.sf.json.JSON;
import net.sf.json.JSONObject;
import org.restlet.data.MediaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Alessio Fabiani, GeoSolutions S.A.S.
*
*/
public class GeoServerRESTImporterManager extends GeoServerRESTAbstractManager {
private final static Logger LOGGER = LoggerFactory.getLogger(GeoServerRESTImporterManager.class);
/**
* Default constructor.
*
* @param restURL GeoServer REST API endpoint
* @param username GeoServer REST API authorized username
* @param password GeoServer REST API password for the former username
*/
public GeoServerRESTImporterManager(URL restURL, String username, String password)
throws IllegalArgumentException {
super(restURL, username, password);
}
/**
* Retrieves the Import JSON Object given its identifier
*
* @param imp int: Import context number ID
*/
public JSONObject getImport(int imp) throws Exception {
JSON json = HTTPUtils.getAsJSON(String.format(buildUrl()+"/%d", imp), gsuser , gspass);
return ((JSONObject)json).getJSONObject("import");
}
/**
* Retrieves the Import Task JSON Object given its identifier and task number
*
* @param imp int: Import context number ID
* @param task int: Task number
*/
public JSONObject getTask(int imp, int task) throws Exception {
JSON json = HTTPUtils.getAsJSON(String.format(buildUrl()+"/%d/tasks/%d?expand=all", imp, task), gsuser , gspass);
return ((JSONObject)json).getJSONObject("task");
}
/**
* Example usage:
* <pre>
* // Creates a new Importer Context and gets back the ID
* int i = postNewImport();
*
* // Attaches to the new Importer Context a Task pointing to a shapefile's zip archive
* int t = postNewTaskAsMultiPartForm(i, "/path_to/shape/archsites_no_crs.zip");
*
* // Check that the Task was actually created and that the CRS has not recognized in this case
* JSONObject task = getTask(i, t);
* assertEquals("NO_CRS", task.getString("state"));
*
* // Prepare the JSON String instructing the Task about the SRS to use
* String json =
* "{" +
* "\"task\": {" +
* "\"layer\": {" +
* "\"srs\": \"EPSG:4326\"" +
* "}" +
* "}" +
* "}";
*
* // Performing the Task update
* putTask(i, t, json);
*
* // Double check that the Task is in the READY state
* task = getTask(i, t);
* assertEquals("READY", task.getString("state"));
* assertEquals("gs_archsites", task.getJSONObject("layer").getJSONObject("style").getString("name"));
*
* // Prepare the JSON String instructing the Task avout the SLD to use for the new Layer
* json =
* "{" +
* "\"task\": {" +
* "\"layer\": {" +
* "\"style\": {" +
* "\"name\": \"point\"" +
* "}" +
* "}" +
* "}" +
* "}";
*
* // Performing the Task update
* putTask(i, t,json);
*
* // Double check that the Task is in the READY state and that the Style has been correctly updated
* task = getTask(i, t);
* assertEquals("READY", task.getString("state"));
* assertEquals("point", task.getJSONObject("layer").getJSONObject("style").getString("name"));
*
* // Finally starts the Import ...
* postImport(i);
* </pre>
*
* @param imp int: Import context number ID
* @param task int: Task number
* @param json String: JSON containing the Task properties to be updated
* @throws Exception
*/
public void putTask(int imp, int task, final String json) throws Exception {
//HTTPUtils.putJson(String.format(buildUrl()+"/%d/tasks/%d", imp, task), json, gsuser, gspass);
HTTPUtils.put(String.format(buildUrl()+"/%d/tasks/%d", imp, task), json, "text/plain", gsuser, gspass);
}
/**
* Just update the Layers properties associated to a Task (t) in the Importer Context (i).
*
* e.g.:
* <pre>
* putTaskLayer(i, t, "{\"title\":\"Archsites\", \"abstract\":\"Archeological Sites\"}");
* </pre>
*
* @param imp int: Import context number ID
* @param task int: Task number
* @param json String: JSON containing the Layer properties to be updated
* @throws Exception
*/
public void putTaskLayer(int imp, int task, final String json) throws Exception {
HTTPUtils.putJson(String.format(buildUrl()+"/%d/tasks/%d/layer", imp, task), json, gsuser, gspass);
}
/**
* Just update the Layers properties associated to a Task (t) in the Importer Context (i).
*
* e.g.:
* <pre>
* putTaskLayer(i, t, "{\"title\":\"Archsites\", \"abstract\":\"Archeological Sites\"}");
* </pre>
*
* @param imp int: Import context number ID
* @param task int: Task number
* @param json String: JSON containing the Layer properties to be updated
* @throws Exception
*/
public void postTaskTransform(int imp, int task, final String json) throws Exception {
HTTPUtils.postJson(String.format(buildUrl()+"/%d/tasks/%d/transforms", imp, task), json, gsuser, gspass);
}
/**
* Creates an empty Importer Context.
*
* @return The new Importer Context ID
* @throws Exception
*/
public int postNewImport() throws Exception {
return postNewImport(null);
}
/**
* e.g.:
* <pre>
* String body =
* "{" +
* "\"import\": { " +
* "\"data\": {" +
* "\"type\": \"mosaic\", " +
* "\"time\": {" +
* " \"mode\": \"auto\"" +
* "}" +
* "}" +
* "}" +
* "}";
* </pre>
*
* @param body JSON String representing the Importer Context definition
* @return The new Importer Context ID
* @throws Exception
*/
public int postNewImport(String body) throws Exception {
String resp = body == null ? HTTPUtils.post(buildUrl(), "", "text/plain", gsuser, gspass)
: HTTPUtils.postJson(buildUrl(), body, gsuser, gspass);
JSONObject json = (JSONObject) HTTPUtils.json(resp);
JSONObject imprt = json.getJSONObject("import");
return imprt.getInt("id");
}
/**
* Actually starts the READY State Import.
*
* @param imp int: Import context number ID
* @throws Exception
*/
public void postImport(int imp) throws Exception {
HTTPUtils.post(buildUrl()+"/" + imp + "?exec=true", "", "text/plain", gsuser, gspass);
}
/**
*
* @param imp int: Import context number ID
* @param data
* @return
* @throws Exception
*/
public int postNewTaskAsMultiPartForm(int imp, String data) throws Exception {
String resp = HTTPUtils.postMultipartForm(buildUrl()+"/" + imp + "/tasks", unpack(data), gsuser, gspass);
JSONObject json = (JSONObject) HTTPUtils.json(resp);
JSONObject task = json.getJSONObject("task");
return task.getInt("id");
}
/**
* Allows to attach a new zip file to an existing Importer Context.
*
* @param imp int: Import context number ID
* @param path
* @return
* @throws Exception
*/
public int putNewTask(int imp, String path) throws Exception {
File zip = new File(path);
String resp = HTTPUtils.put(buildUrl()+"/" + imp + "/tasks/" + zip.getName(), zip, MediaType.APPLICATION_ZIP.toString(), gsuser, gspass);
JSONObject json = (JSONObject) HTTPUtils.json(resp);
JSONObject task = json.getJSONObject("task");
return task.getInt("id");
}
//=========================================================================
// Util methods
//=========================================================================
/**
* Creates the base REST URL for the imports
*/
protected String buildUrl() {
StringBuilder sUrl = new StringBuilder(gsBaseUrl.toString()).append("/rest/imports");
return sUrl.toString();
}
/**
* Creates a temporary file
*
* @return Path to the temporary file
* @throws Exception
*/
public static File tmpDir() throws Exception {
File dir = File.createTempFile("importer", "data", new File("target"));
dir.delete();
dir.mkdirs();
return dir;
}
/**
* Expands a zip archive into the temporary folder.
*
* @param path The absolute path to the source zip file
* @return Path to the temporary folder containing the expanded files
* @throws Exception
*/
public static File unpack(String path) throws Exception {
return unpack(path, tmpDir());
}
/**
* Expands a zip archive into the target folder.
*
* @param path The absolute path to the source zip file
* @param dir Full path of the target folder where to expand the archive
* @return Path to the temporary folder containing the expanded files
* @throws Exception
*/
public static File unpack(String path, File dir) throws Exception {
File file = new File(path);
//new VFSWorker().extractTo(file, dir);
if (!file.delete()) {
// fail early as tests will expect it's deleted
throw new IOException("deletion failed during extraction");
}
return dir;
}
}

View File

@ -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<GSAuthorityURLInfoEncoder> 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());

View File

@ -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;

View File

@ -156,7 +156,8 @@ public class ResourceDecoderTest {
coverageDimension1.getDescription());
Assert.assertEquals("-inf", coverageDimension1.getRangeMin());
Assert.assertEquals("inf", coverageDimension1.getRangeMax());
Assert.assertEquals("dobson units³", coverageDimension1.getUnit());
// Assert.assertEquals("dobson units", coverageDimension1.getUnit());
Assert.assertTrue(coverageDimension1.getUnit().startsWith("dobson units"));
Assert.assertEquals("REAL_32BITS", coverageDimension1.getDimensionTypeName());
}

View File

@ -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;

View File

@ -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));
}
}

View File

@ -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;

View File

@ -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<Element>)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("");
}
}

View File

@ -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", "2.4");
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.");
}
}

View File

@ -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<RESTStyle> 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<RESTStyle> 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());
}
}

View File

@ -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("\"", ""));
}
}

View File

@ -19,8 +19,6 @@
*/
package it.geosolutions.geoserver.rest.encoder.coverage;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder;
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy;
import it.geosolutions.geoserver.rest.encoder.dimensions.GSCoverageDimensionEncoder;
@ -128,7 +126,7 @@ public class GSCoverageEncoderTest extends TestCase {
// setting dimensions (since gs-2.4.x)
GSCoverageDimensionEncoder gsCoverageDimensionEncoder = new GSCoverageDimensionEncoder(
"GRAY_INDEX", "GridSampleDimension[-Infinity,Infinity]", "-inf", "inf",
"dobson units³", "REAL_32BITS");
"dobson units", "REAL_32BITS");
encoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder);
encoder.setNativeCoverageName("Sample native name");

View File

@ -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;
@ -39,14 +33,14 @@ public class GSCoverageDimensionEncoderTest {
@Test
public void coverageDimensionTest() {
GSCoverageDimensionEncoder encoder = new GSCoverageDimensionEncoder("GRAY_INDEX",
"GridSampleDimension[-Infinity,Infinity]", "-inf", "inf", "dobson units³",
"GridSampleDimension[-Infinity,Infinity]", "-inf", "inf", "dobson units",
"REAL_32BITS");
Assert.assertEquals("GRAY_INDEX", encoder.getName());
Assert.assertEquals("GridSampleDimension[-Infinity,Infinity]", encoder.getDescription());
Assert.assertEquals("-inf", encoder.getRangeMin());
Assert.assertEquals("inf", encoder.getRangeMax());
Assert.assertEquals("dobson units³", encoder.getUnit());
Assert.assertEquals("dobson units", encoder.getUnit());
Assert.assertEquals("REAL_32BITS", encoder.getDimensionTypeName());
Assert.assertTrue(encoder.delName());
@ -65,15 +59,15 @@ public class GSCoverageDimensionEncoderTest {
encoder.setName("GRAY_INDEX");
encoder.setDescription("GridSampleDimension[-Infinity,Infinity]");
encoder.setRange("-inf", "inf");
encoder.setUnit("dobson units³");
encoder.setUnit("dobson units");
encoder.setDimensionType("REAL_32BITS");
Assert.assertEquals("GRAY_INDEX", encoder.getName());
Assert.assertEquals("GridSampleDimension[-Infinity,Infinity]", encoder.getDescription());
Assert.assertEquals("-inf", encoder.getRangeMin());
Assert.assertEquals("inf", encoder.getRangeMax());
Assert.assertEquals("dobson units³", encoder.getUnit());
Assert.assertEquals("dobson units", encoder.getUnit());
Assert.assertEquals("REAL_32BITS", encoder.getDimensionTypeName());
}
}
}

View File

@ -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;

View File

@ -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.*;
* <li>Read again.
* <li>Test all new values.
* </ol>
*
*
* @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");

View File

@ -156,7 +156,7 @@ public class GeoserverRESTArcGridTest extends GeoserverRESTTest {
assertTrue(reader.existsCoveragestore(DEFAULT_WS, storeName));
assertTrue(reader.existsCoverage(DEFAULT_WS, storeName, storeName));
RESTLayer layer = reader.getLayer(DEFAULT_WS, storeName);
assertEquals("mystyle", layer.getDefaultStyle());
assertEquals(DEFAULT_WS + ":mystyle", layer.getDefaultStyle());
assertEquals(DEFAULT_WS, layer.getDefaultStyleWorkspace());
}

View File

@ -130,7 +130,8 @@ public class GeoserverRESTGeoTiffTest extends GeoserverRESTTest {
}
@Test
public void testGeoTiffWithStyleInWorkspace() throws IOException {
public void testGeoTiffWithStyleInWorkspace() throws IOException
{
if (!enabled()) return;
deleteAll();
@ -155,11 +156,11 @@ public class GeoserverRESTGeoTiffTest extends GeoserverRESTTest {
assertNotNull("publish() failed", pub);
// Test exists
assertTrue(reader.existsCoveragestore(DEFAULT_WS, storeName));
assertTrue(reader.existsCoverage(DEFAULT_WS, storeName, storeName));
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("mystyle", layer.getDefaultStyle());
assertEquals(DEFAULT_WS, layer.getDefaultStyleWorkspace());
assertEquals("Bad default style", DEFAULT_WS + ":mystyle", layer.getDefaultStyle());
assertEquals("Bad workspace for style", DEFAULT_WS, layer.getDefaultStyleWorkspace());
}
@Test

View File

@ -116,7 +116,7 @@ public class GeoserverRESTImageMosaicTest extends GeoserverRESTTest {
if (v.compareTo(GSVersionDecoder.VERSION.v24)>=0){
GSCoverageDimensionEncoder gsCoverageDimensionEncoder = new GSCoverageDimensionEncoder(
"GRAY_INDEX", "GridSampleDimension[-Infinity,Infinity]", "-inf", "inf",
"dobson units³", "REAL_32BITS");
"dobson units", "REAL_32BITS");
coverageEncoder.addCoverageDimensionInfo(gsCoverageDimensionEncoder);
}

View File

@ -0,0 +1,97 @@
/*
* 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.publisher;
import static org.junit.Assert.assertEquals;
import it.geosolutions.geoserver.rest.GeoserverRESTTest;
import net.sf.json.JSONObject;
import org.junit.After;
import org.junit.Test;
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 Alessio Fabiani, GeoSolutions S.A.S.
*
*/
public class GeoserverRESTImporterTest extends GeoserverRESTTest {
private final static Logger LOGGER = LoggerFactory.getLogger(GeoserverRESTImporterTest.class);
@After
public void cleanUp() {
}
@Test
public void testShapeFileImport() throws Exception {
if (!enabled())
return;
// Creates a new Importer Context and gets back the ID
int i = publisher.postNewImport();
// Attaches to the new Importer Context a Task pointing to a shapefile's zip archive
String data = new ClassPathResource("testdata/test_noepsg.zip").getFile().getAbsolutePath();
int t = publisher.postNewTaskAsMultiPartForm(i, data);
// Check that the Task was actually created and that the CRS has not recognized in this case
JSONObject task = publisher.getTask(i, t);
//assertEquals("NO_CRS", task.getString("state"));
assertEquals("READY", task.getString("state"));
// Prepare the JSON String instructing the Task about the SRS to use
String json = "{\"layer\":{\"srs\":\"EPSG:26713\"}}";
// Performing the Task update
publisher.putTaskLayer(i, t, json);
// Double check that the Task is in the READY state
task = publisher.getTask(i, t);
assertEquals("READY", task.getString("state"));
assertEquals("nurc_10m_populated_places", task.getJSONObject("layer").getJSONObject("style").getString("name"));
// Prepare the JSON String instructing the Task avout the SLD to use for the new Layer
json = "{\"layer\":{\"style\":{\"name\": \"point\"}}}";
// Performing the Task update
publisher.putTaskLayer(i, t,json);
// Double check that the Task is in the READY state and that the Style has been correctly updated
task = publisher.getTask(i, t);
assertEquals("READY", task.getString("state"));
assertEquals("point", task.getJSONObject("layer").getJSONObject("style").getString("name"));
// Finally starts the Import ...
publisher.postImport(i);
}
}

View File

@ -274,7 +274,7 @@ public class GeoserverRESTShapeTest extends GeoserverRESTTest {
RESTLayer layer = reader.getLayer(layerName);
// RESTLayer layerDecoder = new RESTLayer(layer);
LOGGER.info("Layer style is " + layer.getDefaultStyle());
assertEquals("Style not assigned properly", styleName, layer.getDefaultStyle());
assertEquals("Style not assigned properly", DEFAULT_WS + ":" + styleName, layer.getDefaultStyle());
assertEquals("Style not assigned properly", DEFAULT_WS, layer.getDefaultStyleWorkspace());
// remove also datastore

View File

@ -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(
"<sld:Title>STYLE FOR TESTING PURPOSES</sld:Title>",
"<sld:Title>MODIFIED STYLE FOR TESTING</sld:Title>");
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));
}
}
/*
* 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(
"<sld:Title>STYLE FOR TESTING PURPOSES</sld:Title>",
"<sld:Title>MODIFIED STYLE FOR TESTING</sld:Title>");
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));
}
}

View File

@ -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;

View File

@ -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 {