/*
* GeoServer-Manager - Simple Manager Library for GeoServer
*
* Copyright (C) 2007,2012 GeoSolutions S.A.S.
* http://www.geo-solutions.it
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package it.geosolutions.geoserver.rest.encoder;
import it.geosolutions.geoserver.rest.GeoserverRESTTest;
import it.geosolutions.geoserver.rest.decoder.RESTLayerGroup;
import it.geosolutions.geoserver.rest.decoder.RESTLayerList;
import it.geosolutions.geoserver.rest.decoder.RESTPublished;
import it.geosolutions.geoserver.rest.decoder.RESTPublishedList;
import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
import java.io.IOException;
import java.net.URI;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.springframework.core.io.ClassPathResource;
/**
* @todo applied patch for https://github.com/geosolutions-it/geoserver-manager/issues/61
* still need to split test encoder from integration
*/
public class GSLayerGroupEncoderTest extends GeoserverRESTTest {
@Before
public void setup() throws Exception {
if (enabled()){
init();
}
}
private void init() throws IOException{
String ws = "topp";
String storeName = "testshpcollection";
// Delete all resources except styles
deleteAllWorkspacesRecursively();
// Create workspace
assertTrue(publisher.createWorkspace(ws));
// Publish shp collection
URI location = new ClassPathResource("testdata/multipleshp.zip").getFile().toURI();
assertTrue(publisher.publishShpCollection(ws, storeName, location));
String storeType = reader.getDatastore(ws, storeName).getStoreType();
assertEquals(storeType, "Shapefile");
// Test published layer names
List<String> layers = reader.getLayers().getNames();
assertTrue(layers.contains("cities"));
assertTrue(layers.contains("boundaries"));
// Publish style
publisher.publishStyle(new ClassPathResource("testdata/default_line.sld").getFile(), "default_line");
}
@Test
public void testCreateLayerGroup() throws Exception {
if (!enabled()) return;
String groupName = "my-tasmania";
GSLayerGroupEncoder groupWriter = new GSLayerGroupEncoder();
groupWriter.setBounds("EPSG:26713", 589425.93423656, 609518.6719560538, 4913959.224611808, 4928082.949945881);
groupWriter.addLayer("topp:boundaries");
groupWriter.addLayer("topp:cities");
assertTrue(publisher.createLayerGroup(groupName, groupWriter));
// Test exists
assertTrue(reader.existsLayerGroup(null, groupName));
try {
RESTLayerGroup groupReader = reader.getLayerGroup(groupName);
assertNull(groupReader.getWorkspace());
assertEquals(groupName, groupReader.getName());
RESTPublishedList publishedList = groupReader.getPublishedList();
if (publishedList != null) {
// GeoServer >= 2.3
assertEquals(2, publishedList.size());
for (RESTPublished published : publishedList) {
assertEquals("layer", published.getType());
assertTrue("boundaries".equals(published.getName()) || "cities".equals(published.getName()));
}
} else {
RESTLayerList layerList = groupReader.getLayerList();
assertEquals(2, layerList.size());
for (NameLinkElem layer : layerList) {
assertTrue("boundaries".equals(layer.getName()) || "cities".equals(layer.getName()));
}
}
} finally {
assertTrue(publisher.removeLayerGroup(groupName));
// Test not exists
assertFalse(reader.existsLayerGroup(null, groupName));
}
}
@Test
public void testCreateLayerGroupInWorkspace() throws Exception {
if (!enabled()) return;
String groupName = "my-tasmania-in-ws";
GSLayerGroupEncoder groupWriter = new GSLayerGroupEncoder();
groupWriter.setBounds("EPSG:26713", 589425.93423656, 609518.6719560538, 4913959.224611808, 4928082.949945881);
groupWriter.addLayer("topp:boundaries");
groupWriter.addLayer("topp:cities");
assertTrue(publisher.createLayerGroup("topp", groupName, groupWriter));
// Test exists
assertTrue(reader.existsLayerGroup("topp", groupName));
try {
RESTLayerGroup groupReader = reader.getLayerGroup("topp", groupName);
assertEquals("topp", groupReader.getWorkspace());
assertEquals(groupName, groupReader.getName());
RESTPublishedList publishedList = groupReader.getPublishedList();
if (publishedList != null) {
// GeoServer >= 2.3
assertEquals(2, publishedList.size());
for (RESTPublished published : publishedList) {
assertEquals("layer", published.getType());
assertTrue("boundaries".equals(published.getName()) || "cities".equals(published.getName()));
}
} else {
RESTLayerList layerList = groupReader.getLayerList();
assertEquals(2, layerList.size());
for (NameLinkElem layer : layerList) {
assertTrue("boundaries".equals(layer.getName()) || "cities".equals(layer.getName()));
}
}
} finally {
assertTrue(publisher.removeLayerGroup("topp", groupName));
// Test not exists
assertFalse(reader.existsLayerGroup("topp", groupName));
}
}
private void createTestLayerGroup(String workspace, String groupName) {
if (!enabled()) return;
GSLayerGroupEncoder groupWriter = new GSLayerGroupEncoder();
groupWriter.setBounds("EPSG:26713", 589425.93423656, 609518.6719560538, 4913959.224611808, 4928082.949945881);
groupWriter.addLayer("topp:boundaries");
groupWriter.addLayer("topp:cities");
assertTrue(publisher.createLayerGroup(workspace, groupName, groupWriter));
}
@Test
public void testConfigureLayerGroup() throws Exception {
if (!enabled()) return;
String groupName = "my-tasmania";
createTestLayerGroup(null, groupName);
try {
GSLayerGroupEncoder groupWriter = new GSLayerGroupEncoder();
groupWriter.addLayer("topp:boundaries");
assertTrue(publisher.configureLayerGroup(groupName, groupWriter));
RESTLayerGroup groupReader = reader.getLayerGroup(groupName);
assertNull(groupReader.getWorkspace());
assertEquals(groupName, groupReader.getName());
RESTPublishedList publishedList = groupReader.getPublishedList();
if (publishedList != null) {
// GeoServer >= 2.3
assertEquals(1, publishedList.size());
for (RESTPublished published : publishedList) {
assertEquals("layer", published.getType());
assertTrue("boundaries".equals(published.getName()));
}
} else {
RESTLayerList layerList = groupReader.getLayerList();
assertEquals(1, layerList.size());
for (NameLinkElem layer : layerList) {
assertTrue("boundaries".equals(layer.getName()));
}
}
} finally {
assertTrue(publisher.removeLayerGroup(groupName));
}
}
@Test
public void testConfigureLayerGroupInWorkspace() throws Exception {
if (!enabled()) return;
String groupName = "my-tasmania-in-ws";
createTestLayerGroup("topp", groupName);
try {
GSLayerGroupEncoder groupWriter = new GSLayerGroupEncoder();
groupWriter.addLayer("topp:boundaries");
assertTrue(publisher.configureLayerGroup("topp", groupName, groupWriter));
RESTLayerGroup groupReader = reader.getLayerGroup("topp", groupName);
assertEquals("topp", groupReader.getWorkspace());
assertEquals(groupName, groupReader.getName());
RESTPublishedList publishedList = groupReader.getPublishedList();
if (publishedList != null) {
// GeoServer >= 2.3
assertEquals(1, publishedList.size());
for (RESTPublished published : publishedList) {
assertEquals("layer", published.getType());
assertTrue("boundaries".equals(published.getName()));
}
} else {
RESTLayerList layerList = groupReader.getLayerList();
assertEquals(1, layerList.size());
for (NameLinkElem layer : layerList) {
assertTrue("boundaries".equals(layer.getName()));
}
}
} finally {
assertTrue(publisher.removeLayerGroup("topp", groupName));
}
}
@Test
public void testConfigureLayerGroup23() throws Exception {
if (!enabled()) return;
String groupName = "my-tasmania-23";
createTestLayerGroup(null, groupName);
try {
GSLayerGroupEncoder23 groupWriter = new GSLayerGroupEncoder23();
groupWriter.addLayer("topp:boundaries");
groupWriter.setMode(GSLayerGroupEncoder23.MODE_NAMED);
groupWriter.setTitle("my title");
groupWriter.setAbstract("my abstract");
assertTrue(publisher.configureLayerGroup(groupName, groupWriter));
RESTLayerGroup groupReader = reader.getLayerGroup(groupName);
assertNull(groupReader.getWorkspace());
assertEquals(groupName, groupReader.getName());
assertEquals("my title", groupReader.getTitle());
assertEquals("my abstract", groupReader.getAbstract());
assertEquals(GSLayerGroupEncoder23.MODE_NAMED, groupReader.getMode());
RESTPublishedList publishedList = groupReader.getPublishedList();
assertEquals(1, publishedList.size());
for (RESTPublished published : publishedList) {
assertEquals("layer", published.getType());
assertTrue("boundaries".equals(published.getName()));
}
} finally {
assertTrue(publisher.removeLayerGroup(groupName));
}
}
/**
* This test only works with GeoServer >= 2.3
*/
@Test
public void testCreateNestedLayerGroup23() throws Exception {
if (!enabled()) return;
String groupName = "my-tasmania-eo";
createTestLayerGroup(null, "tasmania");
try {
GSLayerGroupEncoder23 groupWriter = new GSLayerGroupEncoder23();
groupWriter.setTitle("my title");
groupWriter.setAbstract("my abstract");
groupWriter.setMode(GSLayerGroupEncoder23.MODE_EO);
groupWriter.setRootLayer("topp:boundaries", "default_line");
groupWriter.setBounds("EPSG:26713", 589425.93423656, 609518.6719560538, 4913959.224611808, 4928082.949945881);
groupWriter.addLayer("topp:cities");
groupWriter.addLayerGroup("tasmania");
assertTrue(publisher.createLayerGroup(groupName, groupWriter));
try {
RESTLayerGroup groupReader = reader.getLayerGroup(groupName);
assertNull(groupReader.getWorkspace());
assertEquals(groupName, groupReader.getName());
assertEquals("my title", groupReader.getTitle());
assertEquals("my abstract", groupReader.getAbstract());
assertEquals(GSLayerGroupEncoder23.MODE_EO, groupReader.getMode());
assertEquals("boundaries", groupReader.getRootLayer());
RESTPublishedList publishedList = groupReader.getPublishedList();
assertEquals(2, publishedList.size());
for (RESTPublished published : publishedList) {
if ("layer".equals(published.getType())) {
assertEquals("cities", published.getName());
} else {
assertEquals("layerGroup", published.getType());
assertEquals("tasmania", published.getName());
}
}
} finally {
assertTrue(publisher.removeLayerGroup(groupName));
}
} finally {
assertTrue(publisher.removeLayerGroup("tasmania"));
}
}
}