Skip to content

Commit

Permalink
closes #233
Browse files Browse the repository at this point in the history
  • Loading branch information
justinhrobbins committed Apr 17, 2016
1 parent bf6c8d9 commit c8be9c8
Show file tree
Hide file tree
Showing 18 changed files with 261 additions and 299 deletions.
35 changes: 21 additions & 14 deletions FlashCards_WebServices/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</dependency>

<!-- JSR 330: Dependency Injection for Java -->
<dependency>
<groupId>javax.inject</groupId>
Expand All @@ -63,14 +58,18 @@

<!-- Jersey dependencies -->
<dependency>
<groupId>com.sun.jersey</groupId>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>

<!-- Jersey + Spring integration dependency -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
</dependency>

<!-- Code Generation Library -->
Expand All @@ -92,6 +91,18 @@
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
</dependency>

<!-- Spring -->
<dependency>
Expand Down Expand Up @@ -131,12 +142,8 @@

<!-- Swagger Stuff -->
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey-jaxrs_2.10</artifactId>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-annotations_2.10</artifactId>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
</dependency>

<!-- Runtime dependencies provided by servlet container -->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@

package org.robbins.flashcards.jersey.filters;

import java.util.List;
import org.robbins.flashcards.webservices.exceptions.GenericWebServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import java.util.List;

import org.robbins.flashcards.webservices.exceptions.GenericWebServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;

/**
* Overrides the 'accept' HTTP header with value parsed from the querystring 'accept'
Expand All @@ -23,6 +25,7 @@
* @author Justin Robbins
*
*/
@Provider
@Component("jerseyAcceptFilter")
public class AcceptFilter implements ContainerRequestFilter {

Expand All @@ -31,13 +34,13 @@ public class AcceptFilter implements ContainerRequestFilter {
private static String ACCEPT = "accept";

@Override
public ContainerRequest filter(final ContainerRequest request) {
public void filter(final ContainerRequestContext requestContext) throws IOException {
LOGGER.trace("AcceptFilter");

MultivaluedMap<String, String> queryParametersMap = request.getQueryParameters();
final MultivaluedMap<String, String> queryParametersMap = requestContext.getUriInfo().getQueryParameters();

if (queryParametersMap.containsKey(ACCEPT)) {
List<String> queryparmsList = queryParametersMap.get(ACCEPT);
final List<String> queryparmsList = queryParametersMap.get(ACCEPT);
LOGGER.debug(queryparmsList.toString());

// does the 'accept' header match either json or xml?
Expand All @@ -49,10 +52,8 @@ public ContainerRequest filter(final ContainerRequest request) {
+ MediaType.APPLICATION_XML);
}

MultivaluedMap<String, String> headers = request.getRequestHeaders();
final MultivaluedMap<String, String> headers = requestContext.getHeaders();
headers.put(HttpHeaders.ACCEPT, queryparmsList);
}

return request;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;
import java.io.IOException;

@Provider
@Component("jerseySecurityFilter")
public class SecurityFilter extends AbstractSecurityFilter implements
ContainerRequestFilter {

private static final Logger LOGGER = LoggerFactory.getLogger(SecurityFilter.class);

@Override
public ContainerRequest filter(final ContainerRequest request) {
public void filter(final ContainerRequestContext requestContext) throws IOException {
LOGGER.trace("SecurityFilter");

configureLoggedInUser();

return request;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public class DefaultExceptionHandler implements ExceptionMapper<WebApplicationEx

@Override
public Response toResponse(final WebApplicationException webApplicationException) {
ResponseBuilder builder;
GenericWebServiceException exception;
final ResponseBuilder builder;
final GenericWebServiceException exception;

if (webApplicationException instanceof GenericWebServiceException) {
exception = (GenericWebServiceException) webApplicationException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,6 @@

package org.robbins.flashcards.webservices;

import java.io.IOException;
import java.util.Properties;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

import org.robbins.flashcards.webservices.exceptions.GenericWebServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -19,6 +9,15 @@
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.stereotype.Component;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.util.Properties;

@Path("/")
@Component("flashCardsAppResource")
@Produces("text/plain")
Expand All @@ -30,7 +29,7 @@ public class FlashCardsAppResource {
@Inject
private ApplicationContext context;

public ApplicationContext getContext() {
private ApplicationContext getContext() {
return context;
}

Expand All @@ -40,16 +39,16 @@ public String getStatus() {
String version = getClass().getPackage().getImplementationVersion();
if (version == null) {
try {
Resource resource = getContext().getResource("/META-INF/MANIFEST.MF");
Properties prop = PropertiesLoaderUtils.loadProperties(resource);
final Resource resource = getContext().getResource("/META-INF/MANIFEST.MF");
final Properties prop = PropertiesLoaderUtils.loadProperties(resource);
version = prop.getProperty("Implementation-Version");
if (null == version) {
throw new GenericWebServiceException(
Response.Status.INTERNAL_SERVER_ERROR,
"Unable to determine status");
}
LOGGER.debug("Version: " + version);
} catch (IOException e) {
} catch (final IOException e) {
LOGGER.error(e.toString());
throw new GenericWebServiceException(
Response.Status.INTERNAL_SERVER_ERROR,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,9 @@

package org.robbins.flashcards.webservices;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.robbins.flashcards.dto.FlashCardDto;
Expand All @@ -34,9 +20,10 @@
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component;

import com.sun.jersey.api.JResponse;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.util.*;

@Path("/flashcards/")
@Component("flashCardsResource")
Expand Down Expand Up @@ -125,7 +112,7 @@ public Response put(@PathParam("id") final Long id, final FlashCardDto dto) {
// some client apps don't know the Created By and Created Date, so make
// sure we set it
if (dto.getCreatedBy().equals(0L)) {
FlashCardDto orig;
final FlashCardDto orig;
try {
orig = flashCardService.findOne(id, null);
} catch (FlashCardsException e) {
Expand All @@ -140,7 +127,7 @@ public Response put(@PathParam("id") final Long id, final FlashCardDto dto) {
}

@Override
public JResponse<List<FlashCardDto>> list(final Integer page, final Integer size,
public Response list(final Integer page, final Integer size,
final String sort, final String direction,
final String fields) {

Expand All @@ -153,19 +140,19 @@ public JResponse<List<FlashCardDto>> list(final Integer page, final Integer siz
LOGGER.error(e.getMessage(), e);
throw new GenericWebServiceException(Response.Status.BAD_REQUEST,
"Invalid sort parameter: '" + sort + "'", e);
} catch (FlashCardsException e) {
} catch (final FlashCardsException e) {
throw new GenericWebServiceException(Response.Status.INTERNAL_SERVER_ERROR, e);
}

if (CollectionUtils.isEmpty(entities)) {
entities = new ArrayList<>();
}

return JResponse.ok(entities).build();
return Response.ok(entities).build();
}

@GET
public JResponse<List<FlashCardDto>> list(@PathParam("tagId") final Long tagId,
public Response list(@PathParam("tagId") final Long tagId,
@PathParam("userId") final Long userId,
@QueryParam("page") final Integer page,
@DefaultValue("25") @QueryParam("size") final Integer size,
Expand All @@ -184,32 +171,32 @@ else if (userId != null) {
}
}

private JResponse<List<FlashCardDto>> listFlashCardsForTag(final Long tagId, final Integer page,
private Response listFlashCardsForTag(final Long tagId, final Integer page,
final Integer size, final String sort,
final String direction, final String fields) {
try {
List<FlashCardDto> entities = flashCardService.findFlashCardsForTag(tagId, this.getFieldsAsSet(fields));
final List<FlashCardDto> entities = flashCardService.findFlashCardsForTag(tagId, this.getFieldsAsSet(fields));
if (CollectionUtils.isEmpty(entities)) {
throw new GenericWebServiceException(Response.Status.NOT_FOUND,
"FlashCards not found for Tag: " + tagId);
}
return JResponse.ok(entities).build();
return Response.ok(entities).build();
} catch (FlashCardsException e) {
throw new GenericWebServiceException(Response.Status.INTERNAL_SERVER_ERROR, e);
}
}

private JResponse<List<FlashCardDto>> listFlashCardsForUser(final Long userId, final Integer page,
private Response listFlashCardsForUser(final Long userId, final Integer page,
final Integer size, final String sort,
final String direction, final String fields) {
try {
List<FlashCardDto> entities = flashCardService.findByCreatedBy(userId, this.getFieldsAsSet(fields));
final List<FlashCardDto> entities = flashCardService.findByCreatedBy(userId, this.getFieldsAsSet(fields));
if (CollectionUtils.isEmpty(entities)) {
throw new GenericWebServiceException(Response.Status.NOT_FOUND,
"FlashCards not found for User: " + userId);
}
return JResponse.ok(entities).build();
} catch (FlashCardsException e) {
return Response.ok(entities).build();
} catch (final FlashCardsException e) {
throw new GenericWebServiceException(Response.Status.INTERNAL_SERVER_ERROR, e);
}
}
Expand Down
Loading

0 comments on commit c8be9c8

Please sign in to comment.