Fixes #162: Improved style in workspace support for GeoTiffs and Shapefiles
This commit is contained in:
parent
bde93118d2
commit
28a72e2691
@ -1152,13 +1152,24 @@ public class GeoServerRESTPublisher {
|
||||
}
|
||||
|
||||
// config layer props (style, ...)
|
||||
final GSLayerEncoder layerEncoder = new GSLayerEncoder();
|
||||
if (defaultStyle != null && !defaultStyle.isEmpty())
|
||||
layerEncoder.setDefaultStyle(defaultStyle);
|
||||
final GSLayerEncoder layerEncoder = configureDefaultStyle(defaultStyle);
|
||||
|
||||
return configureLayer(workspace, datasetName, layerEncoder);
|
||||
}
|
||||
|
||||
private GSLayerEncoder configureDefaultStyle(String defaultStyle) {
|
||||
final GSLayerEncoder layerEncoder = new GSLayerEncoder();
|
||||
if (defaultStyle != null && !defaultStyle.isEmpty()) {
|
||||
if(defaultStyle.indexOf(":") != -1) {
|
||||
String[] wsAndName = defaultStyle.split(":");
|
||||
layerEncoder.setDefaultStyle(wsAndName[0], wsAndName[1]);
|
||||
} else {
|
||||
layerEncoder.setDefaultStyle(defaultStyle);
|
||||
}
|
||||
}
|
||||
return layerEncoder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish a shapefile.
|
||||
*
|
||||
@ -1621,8 +1632,7 @@ public class GeoServerRESTPublisher {
|
||||
}
|
||||
|
||||
// config layer props (style, ...)
|
||||
final GSLayerEncoder layerEncoder = new GSLayerEncoder();
|
||||
layerEncoder.setDefaultStyle(defaultStyle);
|
||||
final GSLayerEncoder layerEncoder = configureDefaultStyle(defaultStyle);
|
||||
|
||||
return configureLayer(workspace, coverageName, layerEncoder);
|
||||
}
|
||||
|
||||
@ -75,8 +75,10 @@ public class GSLayerEncoder extends PropertyXMLEncoder {
|
||||
public final static String STYLES = "styles";
|
||||
public final static String AUTHORITY_URLS="authorityURLs";
|
||||
public final static String IDENTIFIERS="identifiers";
|
||||
public final static String DEFAULT_STYLE = "defaultStyle";
|
||||
|
||||
final private Element stylesEncoder = new Element(STYLES);
|
||||
final private Element defaultStyleEncoder = new Element(DEFAULT_STYLE);
|
||||
final private Element authorityURLListEncoder = new Element(AUTHORITY_URLS);
|
||||
final private Element identifierListEncoder = new Element(IDENTIFIERS);
|
||||
|
||||
@ -165,6 +167,20 @@ public class GSLayerEncoder extends PropertyXMLEncoder {
|
||||
add("defaultStyle", defaultStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see {@link GSLayerEncoder#setDefaultStyle(String)}
|
||||
* @param defaultStyle
|
||||
*/
|
||||
protected void addDefaultStyle(String workspace, String defaultStyle) {
|
||||
addContent(defaultStyleEncoder);
|
||||
Element el = new Element("name");
|
||||
el.setText(defaultStyle);
|
||||
defaultStyleEncoder.addContent(el);
|
||||
el = new Element("workspace");
|
||||
el.setText(workspace);
|
||||
defaultStyleEncoder.addContent(el);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param defaultStyle The style that will be applied if no style is specified.
|
||||
* @throws IllegalArgumentException if defaultStyle is null or empty
|
||||
@ -175,6 +191,15 @@ public class GSLayerEncoder extends PropertyXMLEncoder {
|
||||
set("defaultStyle", defaultStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see {@link GSLayerEncoder#setDefaultStyle(String)}
|
||||
* @param defaultStyle
|
||||
*/
|
||||
public void setDefaultStyle(String workspace, String defaultStyle) {
|
||||
remove("defaultStyle");
|
||||
addDefaultStyle(workspace, defaultStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a style
|
||||
*
|
||||
|
||||
@ -528,7 +528,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
|
||||
*/
|
||||
public boolean publishStyleInWorkspace(final String workspace, String sldBody) {
|
||||
try {
|
||||
return publishStyleInWorkspace(workspace, sldBody);
|
||||
return publishStyleInWorkspace(workspace, sldBody, null);
|
||||
} catch (IllegalArgumentException e) {
|
||||
if (LOGGER.isErrorEnabled()) {
|
||||
LOGGER.error(e.getLocalizedMessage(), e);
|
||||
|
||||
@ -111,4 +111,12 @@ public class GSLayerEncoderTest {
|
||||
Assert.assertEquals("authority1", el.getChild("authority").getValue());
|
||||
Assert.assertEquals("identifier1", el.getChild("identifier").getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultStyleWithWorkspace(){
|
||||
layerEncoder.setDefaultStyle("ws", "style");
|
||||
Element el = (Element) layerEncoder.getRoot().getChild("defaultStyle");
|
||||
Assert.assertEquals("style", el.getChild("name").getValue());
|
||||
Assert.assertEquals("ws", el.getChild("workspace").getValue());
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,9 +25,14 @@
|
||||
|
||||
package it.geosolutions.geoserver.rest.publisher;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.StoreType;
|
||||
import it.geosolutions.geoserver.rest.GeoserverRESTTest;
|
||||
import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore;
|
||||
import it.geosolutions.geoserver.rest.decoder.RESTLayer;
|
||||
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy;
|
||||
|
||||
import java.io.File;
|
||||
@ -35,7 +40,6 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
@ -125,6 +129,38 @@ public class GeoserverRESTGeoTiffTest extends GeoserverRESTTest {
|
||||
assertFalse(reader.existsCoveragestore(DEFAULT_WS, storeName));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGeoTiffWithStyleInWorkspace() throws IOException {
|
||||
if (!enabled()) return;
|
||||
deleteAll();
|
||||
|
||||
File geotiff = new ClassPathResource("testdata/resttestdem.tif").getFile();
|
||||
|
||||
assertTrue(reader.getWorkspaces().isEmpty());
|
||||
assertTrue(publisher.createWorkspace(DEFAULT_WS));
|
||||
|
||||
File sldFile = new ClassPathResource("testdata/raster.sld").getFile();
|
||||
|
||||
|
||||
// insert style
|
||||
assertTrue(publisher.publishStyleInWorkspace(DEFAULT_WS, sldFile, "mystyle"));
|
||||
assertTrue(reader.existsStyle(DEFAULT_WS, "mystyle"));
|
||||
|
||||
// known state?
|
||||
assertFalse("Cleanup failed", existsLayer(layerName));
|
||||
|
||||
// test insert
|
||||
boolean pub = publisher.publishGeoTIFF(DEFAULT_WS, storeName, storeName,
|
||||
geotiff, "EPSG:4326", ProjectionPolicy.FORCE_DECLARED, DEFAULT_WS + ":" + "mystyle", null);
|
||||
|
||||
assertNotNull("publish() failed", pub);
|
||||
// Test exists
|
||||
assertTrue(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, layer.getDefaultStyleWorkspace());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReloadCoverageStore() throws FileNotFoundException, IOException {
|
||||
|
||||
@ -241,6 +241,52 @@ public class GeoserverRESTShapeTest extends GeoserverRESTTest {
|
||||
assertFalse(reader.existsStyle(styleName));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPublishDeleteStyledInWorkspaceShapeZip() throws FileNotFoundException, IOException {
|
||||
if (!enabled()) {
|
||||
return;
|
||||
}
|
||||
deleteAllWorkspacesRecursively();
|
||||
// Assume.assumeTrue(enabled);
|
||||
assertTrue(publisher.createWorkspace(DEFAULT_WS));
|
||||
|
||||
String ns = "geosolutions";
|
||||
String storeName = "resttestshp";
|
||||
String layerName = "cities";
|
||||
final String styleName = "restteststyle";
|
||||
|
||||
File zipFile = new ClassPathResource("testdata/resttestshp.zip").getFile();
|
||||
publisher.removeDatastore(DEFAULT_WS, storeName,true);
|
||||
publisher.removeStyleInWorkspace(DEFAULT_WS, styleName);
|
||||
|
||||
File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile();
|
||||
|
||||
// insert style
|
||||
boolean sldpublished = publisher.publishStyleInWorkspace(DEFAULT_WS, sldFile); // Will take the name from sld contents
|
||||
assertTrue("style publish() failed", sldpublished);
|
||||
assertTrue(reader.existsStyle(DEFAULT_WS, styleName));
|
||||
|
||||
// test insert
|
||||
boolean published = publisher.publishShp(ns, storeName, layerName, zipFile, "EPSG:4326", DEFAULT_WS + ":" + styleName);
|
||||
assertTrue("publish() failed", published);
|
||||
assertTrue(existsLayer(layerName));
|
||||
|
||||
RESTLayer layer = reader.getLayer(layerName);
|
||||
// RESTLayer layerDecoder = new RESTLayer(layer);
|
||||
LOGGER.info("Layer style is " + layer.getDefaultStyle());
|
||||
assertEquals("Style not assigned properly", styleName, layer.getDefaultStyle());
|
||||
assertEquals("Style not assigned properly", DEFAULT_WS, layer.getDefaultStyleWorkspace());
|
||||
|
||||
// remove also datastore
|
||||
boolean dsRemoved = publisher.removeDatastore(ns, storeName,true);
|
||||
assertTrue("removeDatastore() failed", dsRemoved);
|
||||
|
||||
//test delete style
|
||||
boolean oksld = publisher.removeStyleInWorkspace(DEFAULT_WS, styleName);
|
||||
assertTrue("Unpublish() failed", oksld);
|
||||
assertFalse(reader.existsStyle(styleName));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPublishDeleteShapeZipWithParams() throws FileNotFoundException, IOException {
|
||||
if (!enabled()) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user