diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index 0a88c6e..fe1d8e7 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -730,7 +730,7 @@ public class GeoServerRESTPublisher { * Allows to configure some layer attributes such as WmsPath and DefaultStyle * */ - protected boolean configureLayer(final GSLayerEncoder layer, final String layerName) { + public boolean configureLayer(final GSLayerEncoder layer, final String layerName) { if (layer.isEmpty()) { return true; diff --git a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTPublisherTest.java b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTPublisherTest.java index e83d082..c712f1e 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTPublisherTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTPublisherTest.java @@ -27,6 +27,8 @@ package it.geosolutions.geoserver.rest; import it.geosolutions.geoserver.rest.decoder.RESTLayer; import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore; +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; @@ -34,6 +36,8 @@ import java.io.IOException; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; +import org.jdom.Element; +import org.jdom.Namespace; import org.springframework.core.io.ClassPathResource; /** @@ -84,7 +88,21 @@ public class GeoserverRESTPublisherTest extends GeoserverRESTTest { String sld = reader.getSLD(styleName); assertNotNull(sld); - assertEquals(1475, sld.length()); + + 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(1, reader.getStyles().size()); } @@ -320,6 +338,70 @@ public class GeoserverRESTPublisherTest extends GeoserverRESTTest { assertFalse("removed not existing datastore", ok); } + + public void testUpdateDefaultStyle() throws FileNotFoundException, IOException { + if (!enabled()) { + return; + } + + String ns = "it.geosolutions"; + 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); // Will take the name from sld contents + assertTrue("style publish() failed", sldpublished); + assertTrue(reader.existsStyle(styleName2)); + } + + + File zipFile = new ClassPathResource("testdata/resttestshp.zip").getFile(); + + // known state? + cleanupTestFT(layerName, ns, storeName); + + // test insert + boolean published = publisher.publishShp(ns, 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.addDefaultStyle(styleName2); + publisher.configureLayer(le, layerName); + + { + RESTLayer layer = reader.getLayer(layerName); + LOGGER.info("Layer style is " + layer.getDefaultStyle()); + assertEquals(styleName2, layer.getDefaultStyle()); + } + + + // remove layer and datastore + boolean ok = publisher.unpublishFeatureType(ns, storeName, layerName); + assertFalse(existsLayer(layerName)); + boolean dsRemoved = publisher.removeDatastore(ns, storeName); + assertTrue("removeDatastore() failed", dsRemoved); + } + // public void testDeleteUnexistingFT() throws FileNotFoundException, IOException { // String wsName = "this_ws_does_not_exist"; // String storeName = "this_store_does_not_exist"; diff --git a/src/test/resources/testdata/restteststyle2.sld b/src/test/resources/testdata/restteststyle2.sld new file mode 100644 index 0000000..b06c44e --- /dev/null +++ b/src/test/resources/testdata/restteststyle2.sld @@ -0,0 +1,35 @@ + + + + country + + restteststyle2 + STYLE2 FOR TESTING PURPOSES + A sample style that just draws out a solid gray interior with a black 1px outline + + name2 + Feature + SemanticType[ANY] + + Polygon + + + + #C8B679 + + + 1.0 + + + + + #000000 + + + + + + + + +