Skip to content

Commit

Permalink
LayerGroupController does not encode links to contained layers and st…
Browse files Browse the repository at this point in the history
…yles
  • Loading branch information
aaime committed Apr 2, 2017
1 parent a561b77 commit 458cde6
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 9 deletions.
Expand Up @@ -10,6 +10,8 @@
import org.geoserver.catalog.CatalogFacade; import org.geoserver.catalog.CatalogFacade;
import org.geoserver.catalog.CatalogInfo; import org.geoserver.catalog.CatalogInfo;
import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.config.util.XStreamPersister; import org.geoserver.config.util.XStreamPersister;
import org.geoserver.rest.ResourceNotFoundException; import org.geoserver.rest.ResourceNotFoundException;
import org.geoserver.rest.RestBaseController; import org.geoserver.rest.RestBaseController;
Expand All @@ -33,6 +35,9 @@
import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;


import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
Expand Down Expand Up @@ -67,7 +72,7 @@ public RestWrapper getLayerGroups(@PathVariable( name = "workspace", required =
} }


@GetMapping(value = {"/layergroups/{layerGroup}", "/workspaces/{workspace}/layergroups/{layerGroup}"}, @GetMapping(value = {"/layergroups/{layerGroup}", "/workspaces/{workspace}/layergroups/{layerGroup}"},
produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_HTML_VALUE}) produces = {MediaType.APPLICATION_JSON_VALUE, CatalogController.TEXT_JSON, MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_XML_VALUE, MediaType.TEXT_HTML_VALUE})
public RestWrapper getLayerGroup(@PathVariable (name = "layerGroup") String layerGroupName, public RestWrapper getLayerGroup(@PathVariable (name = "layerGroup") String layerGroupName,
@PathVariable (name = "workspace", required = false) String workspaceName, @PathVariable (name = "workspace", required = false) String workspaceName,
@RequestParam (name = "quietOnNotFound", required = false) Boolean quietOnNotFound) { @RequestParam (name = "quietOnNotFound", required = false) Boolean quietOnNotFound) {
Expand Down Expand Up @@ -178,7 +183,7 @@ public boolean supports(MethodParameter methodParameter, Type targetType, Class<
} }


@Override @Override
public void configurePersister(XStreamPersister persister, XStreamMessageConverter xStreamMessageConverter) { public void configurePersister(XStreamPersister persister, XStreamMessageConverter converter) {
persister.setCallback(new XStreamPersister.Callback() { persister.setCallback(new XStreamPersister.Callback() {
@Override @Override
protected Class<LayerGroupInfo> getObjectClass() { protected Class<LayerGroupInfo> getObjectClass() {
Expand All @@ -196,6 +201,22 @@ protected CatalogInfo getCatalogObject() {
} }
return catalog.getLayerGroupByName(workspace, layerGroup); return catalog.getLayerGroupByName(workspace, layerGroup);
} }

@Override
protected void postEncodeReference(Object obj, String ref, String prefix,
HierarchicalStreamWriter writer, MarshallingContext context) {
if ( obj instanceof StyleInfo ) {
StringBuffer link = new StringBuffer();
if (prefix != null) {
link.append("/workspaces/").append(converter.encode(prefix));
}
link.append("/styles/").append(converter.encode(ref));
converter.encodeLink(link.toString(), writer);
}
if ( obj instanceof LayerInfo ) {
converter.encodeLink("/layers/" + converter.encode(ref), writer);
}
}
}); });
} }
} }
Expand Up @@ -7,17 +7,16 @@


import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo; import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists; import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
import static org.junit.Assert.assertEquals; import static org.hamcrest.Matchers.endsWith;
import static org.junit.Assert.assertFalse; import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.*;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;


import net.sf.json.JSON; import net.sf.json.JSON;
import net.sf.json.JSONArray; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.geoserver.catalog.Catalog; import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.PublishedInfo; import org.geoserver.catalog.PublishedInfo;
import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.StyleInfo;
import org.geoserver.rest.RestBaseController; import org.geoserver.rest.RestBaseController;
Expand Down Expand Up @@ -113,14 +112,28 @@ void addLayerGroupToWorkspace() {


@Test @Test
public void testGetAsXML() throws Exception { public void testGetAsXML() throws Exception {


print(get(RestBaseController.ROOT_PATH + "/layergroups/sfLayerGroup.xml")); print(get(RestBaseController.ROOT_PATH + "/layergroups/sfLayerGroup.xml"));
Document dom = getAsDOM( RestBaseController.ROOT_PATH + "/layergroups/sfLayerGroup.xml"); Document dom = getAsDOM( RestBaseController.ROOT_PATH + "/layergroups/sfLayerGroup.xml");
print(dom);

assertEquals( "layerGroup", dom.getDocumentElement().getNodeName() ); assertEquals( "layerGroup", dom.getDocumentElement().getNodeName() );
assertXpathEvaluatesTo("sfLayerGroup", "/layerGroup/name", dom ); assertXpathEvaluatesTo("sfLayerGroup", "/layerGroup/name", dom );
assertXpathEvaluatesTo( "2", "count(//published)", dom ); assertXpathEvaluatesTo( "2", "count(//published)", dom );
assertXpathEvaluatesTo( "2", "count(//style)", dom ); assertXpathEvaluatesTo( "2", "count(//style)", dom );

// check layer link
print(get(RestBaseController.ROOT_PATH + "/layergroups/citeLayerGroup.xml")); assertThat(xp.evaluate("//published[name='PrimitiveGeoFeature']/atom:link/@href", dom),
endsWith(RestBaseController.ROOT_PATH + "/layers/PrimitiveGeoFeature.xml"));
assertThat(xp.evaluate("//published[name='PrimitiveGeoFeature']/atom:link/@type", dom),
equalTo("application/xml"));
// check style link
assertThat(xp.evaluate("//style[1]/atom:link/@href", dom),
endsWith(RestBaseController.ROOT_PATH + "/styles/point.xml"));
assertThat(xp.evaluate("//style[1]/atom:link/@type", dom),
equalTo("application/xml"));


dom = getAsDOM( RestBaseController.ROOT_PATH + "/layergroups/citeLayerGroup.xml"); dom = getAsDOM( RestBaseController.ROOT_PATH + "/layergroups/citeLayerGroup.xml");
assertEquals( "layerGroup", dom.getDocumentElement().getNodeName() ); assertEquals( "layerGroup", dom.getDocumentElement().getNodeName() );
assertXpathEvaluatesTo("citeLayerGroup", "/layerGroup/name", dom ); assertXpathEvaluatesTo("citeLayerGroup", "/layerGroup/name", dom );
Expand Down

0 comments on commit 458cde6

Please sign in to comment.