From 8b409e07a60175ca5cce62808baf56f0168c8943 Mon Sep 17 00:00:00 2001 From: Eugen Date: Mon, 27 May 2013 18:30:54 +0300 Subject: [PATCH] discoverability work --- .../web/controller/ResourceCreated.java | 10 +++--- ...esourceCreatedDiscoverabilityListener.java | 35 +++++++++++++++++++ ...ourceRetrievedDiscoverabilityListener.java | 32 +++++++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreatedDiscoverabilityListener.java create mode 100644 spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrievedDiscoverabilityListener.java diff --git a/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java b/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java index 9baa0e2df8..a677888101 100644 --- a/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java +++ b/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java @@ -8,14 +8,14 @@ import org.springframework.context.ApplicationEvent; public class ResourceCreated extends ApplicationEvent { private final HttpServletResponse response; private final HttpServletRequest request; - private final long idOfCreatedResource; + private final long idOfNewResource; - public ResourceCreated(final Object source, final HttpServletRequest request, final HttpServletResponse response, final long idOfCreatedResource) { + public ResourceCreated(final Object source, final HttpServletRequest request, final HttpServletResponse response, final long idOfNewResource) { super(source); this.request = request; this.response = response; - this.idOfCreatedResource = idOfCreatedResource; + this.idOfNewResource = idOfNewResource; } // API @@ -28,8 +28,8 @@ public class ResourceCreated extends ApplicationEvent { return request; } - public long getIdOfCreatedResource() { - return idOfCreatedResource; + public long getIdOfNewResource() { + return idOfNewResource; } } diff --git a/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreatedDiscoverabilityListener.java b/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreatedDiscoverabilityListener.java new file mode 100644 index 0000000000..8d19ef82fc --- /dev/null +++ b/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreatedDiscoverabilityListener.java @@ -0,0 +1,35 @@ +package org.baeldung.web.controller; + +import java.net.URI; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; +import org.springframework.web.util.UriTemplate; + +import com.google.common.base.Preconditions; +import com.google.common.net.HttpHeaders; + +@Component +class ResourceCreatedDiscoverabilityListener implements ApplicationListener { + + @Override + public void onApplicationEvent(final ResourceCreated resourceCreatedEvent) { + Preconditions.checkNotNull(resourceCreatedEvent); + + final HttpServletRequest request = resourceCreatedEvent.getRequest(); + final HttpServletResponse response = resourceCreatedEvent.getResponse(); + final long idOfNewResource = resourceCreatedEvent.getIdOfNewResource(); + + addLinkHeaderOnResourceCreation(request, response, idOfNewResource); + } + + void addLinkHeaderOnResourceCreation(final HttpServletRequest request, final HttpServletResponse response, final long idOfNewResource) { + final String requestUrl = request.getRequestURL().toString(); + final URI uri = new UriTemplate("{requestUrl}/{idOfNewResource}").expand(requestUrl, idOfNewResource); + response.setHeader(HttpHeaders.LOCATION, uri.toASCIIString()); + } + +} \ No newline at end of file diff --git a/spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrievedDiscoverabilityListener.java b/spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrievedDiscoverabilityListener.java new file mode 100644 index 0000000000..b7384b0196 --- /dev/null +++ b/spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrievedDiscoverabilityListener.java @@ -0,0 +1,32 @@ +package org.baeldung.web.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +import com.google.common.base.Preconditions; + +@Component +class SingleResourceRetrievedDiscoverabilityListener implements ApplicationListener { + + @Override + public void onApplicationEvent(final SingleResourceRetrieved resourceRetrievedEvent) { + Preconditions.checkNotNull(resourceRetrievedEvent); + + final HttpServletRequest request = resourceRetrievedEvent.getRequest(); + final HttpServletResponse response = resourceRetrievedEvent.getResponse(); + addLinkHeaderOnSingleResourceRetrieval(request, response); + } + + void addLinkHeaderOnSingleResourceRetrieval(final HttpServletRequest request, final HttpServletResponse response) { + final StringBuffer requestURL = request.getRequestURL(); + final int positionOfLastSlash = requestURL.lastIndexOf("/"); + final String uriForResourceCreation = requestURL.substring(0, positionOfLastSlash); + + // final String linkHeaderValue = RESTURLUtil.createLinkHeader(uriForResourceCreation, "collection"); + // response.addHeader(LINK_HEADER, linkHeaderValue); + } + +} \ No newline at end of file