diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index a37644c..4a49f1d 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -27,6 +27,8 @@ package it.geosolutions.geoserver.rest; import it.geosolutions.geoserver.rest.decoder.RESTCoverage; import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore; import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList; +import it.geosolutions.geoserver.rest.decoder.RESTStyleList; +import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem; import it.geosolutions.geoserver.rest.encoder.GSBackupEncoder; import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; import it.geosolutions.geoserver.rest.encoder.GSLayerGroupEncoder; @@ -2102,6 +2104,9 @@ public class GeoServerRESTPublisher { workspace); if (recurse) url.append("?recurse=true"); + + deleteStylesForWorkspace(workspace); // !!! workaround + final URL deleteUrl = new URL(url.toString()); boolean deleted = HTTPUtils.delete(deleteUrl.toExternalForm(), gsuser, gspass); if (!deleted) { @@ -2118,6 +2123,17 @@ public class GeoServerRESTPublisher { } } + /** + * workaround: geoserver does not delete styles inside workspaces + * https://jira.codehaus.org/browse/GEOS-5986 + */ + private void deleteStylesForWorkspace(String workspace) { + RESTStyleList styles = styleManager.getStyles(workspace); + for (NameLinkElem nameLinkElem : styles) { + removeStyleInWorkspace(workspace, nameLinkElem.getName(), true); + } + } + /** * Remove a layer group. * diff --git a/src/main/java/it/geosolutions/geoserver/rest/Util.java b/src/main/java/it/geosolutions/geoserver/rest/Util.java index be27fe5..6cee565 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/Util.java +++ b/src/main/java/it/geosolutions/geoserver/rest/Util.java @@ -26,6 +26,8 @@ package it.geosolutions.geoserver.rest; import it.geosolutions.geoserver.rest.decoder.RESTStyle; +import java.util.ArrayList; +import java.util.List; /** * @@ -36,18 +38,20 @@ public class Util { /** * Search for a stylename in global and in all workspaces. */ - public static RESTStyle searchStyle(GeoServerRESTReader reader, String stylename) { + public static List searchStyles(GeoServerRESTReader reader, String stylename) { + + List styles = new ArrayList(); RESTStyle style = reader.getStyle(stylename); if(style != null) - return style; + styles.add(style); for (String workspace : reader.getWorkspaceNames()) { style = reader.getStyle(workspace, stylename); if(style != null) - return style; + styles.add(style); } - return null; + return styles; } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java b/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java index d5e6497..06eb10e 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/UtilTest.java @@ -31,6 +31,7 @@ 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; @@ -54,15 +55,14 @@ public class UtilTest extends GeoserverRESTTest { final String WORKSPACE = "testWorkspace"; final String STYLENAME = "restteststyle"; - final String STYLENAME2 = "restteststyle2"; + File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile(); publisher.createWorkspace(WORKSPACE); assertEquals(0, reader.getStyles().size()); assertEquals(0, reader.getStyles(WORKSPACE).size()); - assertNull(Util.searchStyle(reader, STYLENAME)); - assertNull(Util.searchStyle(reader, STYLENAME2)); + assertEquals(0, Util.searchStyles(reader, STYLENAME).size()); // insert style in workspace assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile, STYLENAME)); @@ -70,29 +70,26 @@ public class UtilTest extends GeoserverRESTTest { assertFalse(reader.existsStyle(STYLENAME)); assertEquals(0, reader.getStyles().size()); assertEquals(1, reader.getStyles(WORKSPACE).size()); - assertNotNull(Util.searchStyle(reader, STYLENAME)); - assertNull(Util.searchStyle(reader, STYLENAME2)); + assertEquals(1, Util.searchStyles(reader, STYLENAME).size()); // insert global style - assertTrue(publisher.publishStyle(sldFile, STYLENAME2)); - - assertFalse(reader.existsStyle(STYLENAME)); - assertTrue(reader.existsStyle(STYLENAME2)); + assertTrue(publisher.publishStyle(sldFile, STYLENAME)); + assertTrue(reader.existsStyle(STYLENAME)); assertTrue(reader.existsStyle(WORKSPACE, STYLENAME)); - assertFalse(reader.existsStyle(WORKSPACE, STYLENAME2)); + + assertEquals(2, Util.searchStyles(reader, STYLENAME).size()); assertEquals(1, reader.getStyles().size()); assertEquals(1, reader.getStyles(WORKSPACE).size()); - RESTStyle style; - style = Util.searchStyle(reader, STYLENAME); - assertEquals(STYLENAME, style.getName()); - assertEquals(WORKSPACE, style.getWorkspace()); + List styles = Util.searchStyles(reader, STYLENAME); - style = Util.searchStyle(reader, STYLENAME2); - assertEquals(STYLENAME2, style.getName()); - assertEquals(null, style.getWorkspace()); + 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()); } }