Skip to content

Commit

Permalink
[GEOS-8869] Importer REST should not override default LayerInfo Rest …
Browse files Browse the repository at this point in the history
…converter
  • Loading branch information
tbarsballe committed Oct 9, 2018
1 parent 1366aee commit 249eae0
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 13 deletions.
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,23 @@
/* (c) 2018 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.importer.rest;

import org.geoserver.catalog.LayerInfo;

/**
* Wrapper for {@link org.geoserver.catalog.LayerInfo} to be used when converting the importer JSON
* representation to a Layer
*/
public class ImportLayer {
LayerInfo layer;

public ImportLayer(LayerInfo layer) {
this.layer = layer;
}

public LayerInfo getLayer() {
return layer;
}
}
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -247,11 +247,11 @@ public ImportWrapper layerPut(
@PathVariable Long id, @PathVariable Long id,
@PathVariable Integer taskId, @PathVariable Integer taskId,
@RequestParam(required = false) String expand, @RequestParam(required = false) String expand,
@RequestBody LayerInfo layer) { @RequestBody ImportLayer layer) {
ImportTask task = task(id, taskId); ImportTask task = task(id, taskId);


return (writer, builder, converter) -> { return (writer, builder, converter) -> {
updateLayer(task, layer, importer, converter); updateLayer(task, layer.getLayer(), importer, converter);
importer.changed(task); importer.changed(task);
converter.layer(builder, task, true, converter.expand(expand, 1)); converter.layer(builder, task, true, converter.expand(expand, 1));
}; };
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.geoserver.importer.ValidationException; import org.geoserver.importer.ValidationException;
import org.geoserver.importer.mosaic.Mosaic; import org.geoserver.importer.mosaic.Mosaic;
import org.geoserver.importer.mosaic.TimeMode; import org.geoserver.importer.mosaic.TimeMode;
import org.geoserver.importer.rest.ImportLayer;
import org.geoserver.importer.transform.AttributeComputeTransform; import org.geoserver.importer.transform.AttributeComputeTransform;
import org.geoserver.importer.transform.AttributeRemapTransform; import org.geoserver.importer.transform.AttributeRemapTransform;
import org.geoserver.importer.transform.AttributesToPointGeometryTransform; import org.geoserver.importer.transform.AttributesToPointGeometryTransform;
Expand Down Expand Up @@ -146,7 +147,7 @@ public ImportContext context(JSONObject json) throws IOException {
return context; return context;
} }


LayerInfo layer(JSONObject json) throws IOException { ImportLayer layer(JSONObject json) throws IOException {
CatalogFactory f = importer.getCatalog().getFactory(); CatalogFactory f = importer.getCatalog().getFactory();


if (json.has("layer")) { if (json.has("layer")) {
Expand Down Expand Up @@ -203,7 +204,7 @@ LayerInfo layer(JSONObject json) throws IOException {
l.setDefaultStyle(fromJSON(sobj, StyleInfo.class)); l.setDefaultStyle(fromJSON(sobj, StyleInfo.class));
} }
} }
return l; return new ImportLayer(l);
} }


public ImportTask task(InputStream inputStream) throws IOException { public ImportTask task(InputStream inputStream) throws IOException {
Expand Down Expand Up @@ -252,7 +253,7 @@ public ImportTask task(JSONObject json) throws IOException {


LayerInfo layer = null; LayerInfo layer = null;
if (json.has("layer")) { if (json.has("layer")) {
layer = layer(json.getJSONObject("layer")); layer = layer(json.getJSONObject("layer")).getLayer();
} else { } else {
layer = importer.getCatalog().getFactory().createLayer(); layer = importer.getCatalog().getFactory().createLayer();
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.importer.ImportTask; import org.geoserver.importer.ImportTask;
import org.geoserver.importer.Importer; import org.geoserver.importer.Importer;
import org.geoserver.importer.rest.ImportLayer;
import org.geoserver.rest.converters.BaseMessageConverter; import org.geoserver.rest.converters.BaseMessageConverter;
import org.geoserver.rest.util.MediaTypeExtensions; import org.geoserver.rest.util.MediaTypeExtensions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -22,7 +22,7 @@


/** Convert {@link ImportTask} to/from JSON. */ /** Convert {@link ImportTask} to/from JSON. */
@Component @Component
public class ImportLayerJSONMessageConverter extends BaseMessageConverter<LayerInfo> { public class ImportLayerJSONMessageConverter extends BaseMessageConverter<ImportLayer> {


Importer importer; Importer importer;


Expand All @@ -39,7 +39,7 @@ public int getPriority() {


@Override @Override
protected boolean supports(Class<?> clazz) { protected boolean supports(Class<?> clazz) {
return LayerInfo.class.isAssignableFrom(clazz); return ImportLayer.class.isAssignableFrom(clazz);
} }


@Override @Override
Expand All @@ -51,23 +51,22 @@ public boolean canWrite(Class<?> clazz, MediaType mediaType) {
// Reading // Reading
// //
@Override @Override
protected LayerInfo readInternal( protected ImportLayer readInternal(
Class<? extends LayerInfo> clazz, HttpInputMessage inputMessage) Class<? extends ImportLayer> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException { throws IOException, HttpMessageNotReadableException {
try (InputStream in = inputMessage.getBody()) { try (InputStream in = inputMessage.getBody()) {
ImportJSONReader reader = new ImportJSONReader(importer); ImportJSONReader reader = new ImportJSONReader(importer);
JSONObject json = reader.parse(in); JSONObject json = reader.parse(in);
LayerInfo layer = reader.layer(json);


return layer; return reader.layer(json);
} }
} }


// //
// writing // writing
// //
@Override @Override
protected void writeInternal(LayerInfo layer, HttpOutputMessage outputMessage) protected void writeInternal(ImportLayer layer, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException { throws IOException, HttpMessageNotWritableException {


throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@
import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.MetadataMap; import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.ResourceInfo; import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.importer.ImportContext; import org.geoserver.importer.ImportContext;
import org.geoserver.importer.ImportTask; import org.geoserver.importer.ImportTask;
import org.geoserver.importer.Importer; import org.geoserver.importer.Importer;
Expand All @@ -54,6 +56,7 @@
import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.feature.FeatureCollection; import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator; import org.geotools.feature.FeatureIterator;
import org.geotools.feature.NameImpl;
import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.text.cql2.CQL;
import org.hamcrest.CoreMatchers; import org.hamcrest.CoreMatchers;
import org.junit.Assume; import org.junit.Assume;
Expand Down Expand Up @@ -1065,4 +1068,53 @@ public void testDirectImportTempCleanup() throws Exception {


assertTrue(new File(context.getUploadDirectory().getFile(), ".locking").exists()); assertTrue(new File(context.getUploadDirectory().getFile(), ".locking").exists());
} }

// GEOS-8869 - Importer Converter can override normal layer converter
@Test
public void testLayerRest() throws Exception {
Catalog catalog = getCatalog();
getTestData().addVectorLayer(MockData.BASIC_POLYGONS, catalog);

// Normal layer converter can handle styles, but the importer one ignores them,
// so we can use this to determine which one is getting used.
StyleInfo generic = catalog.getStyleByName("generic");
StyleInfo polygon = catalog.getStyleByName("polygon");

NameImpl basicPolygonsName =
new NameImpl(
MockData.BASIC_POLYGONS.getPrefix(),
MockData.BASIC_POLYGONS.getLocalPart());
LayerInfo basicPolygons = catalog.getLayerByName(basicPolygonsName);

// initialize to a known default style
basicPolygons.setDefaultStyle(generic);
catalog.save(basicPolygons);

assertEquals(
generic.getId(),
catalog.getLayerByName(basicPolygonsName).getDefaultStyle().getId());

// Do a JSON PUT to change the default style
String contextDefinition =
"{\"layer\": {\n"
+ " \"name\": \"BasicPolygons\",\n"
+ " \"defaultStyle\": {\n"
+ " \"name\": \"polygon\"\n"
+ " },\n"
+ "}}";

MockHttpServletResponse response =
putAsServletResponse(
"/rest/layers/" + basicPolygonsName.toString(),
contextDefinition,
"application/json");

assertEquals(200, response.getStatus());
assertEquals(
polygon.getName(),
catalog.getLayerByName(basicPolygonsName).getDefaultStyle().getName());
assertEquals(
polygon.getId(),
catalog.getLayerByName(basicPolygonsName).getDefaultStyle().getId());
}
} }

0 comments on commit 249eae0

Please sign in to comment.