package com.lyndir.omicron.webapp.resource; import static com.lyndir.lhunath.opal.system.util.StringUtils.*; import com.google.inject.Inject; import com.lyndir.lhunath.opal.system.util.URLUtils; import com.lyndir.omicron.api.Color; import com.lyndir.omicron.webapp.data.User; import com.lyndir.omicron.webapp.data.service.EmailAddressUnavailableException; import com.lyndir.omicron.webapp.data.service.UserDAO; import edu.umd.cs.findbugs.annotations.*; import java.util.Collection; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * @author lhunath, 2013-10-15 */ @Path("/user") public class UserResource { private final UserDAO userDAO; @Inject public UserResource(final UserDAO userDAO) { this.userDAO = userDAO; } @GET @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Collection<User> list() { return userDAO.listUsers(); } @GET @Path("/{emailAddress}") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response get(@PathParam("emailAddress") final String emailAddress) { // Check input. User user = userDAO.findUser( emailAddress ); if (user == null) return Response.status( Response.Status.NOT_FOUND ).entity( str( "No user with `emailAddress`: {0}", emailAddress ) ).build(); // Response. return Response.ok( user ).build(); } @POST @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_FORM_URLENCODED }) public Response post(final PostObject input) throws EmailAddressUnavailableException { // Check input. if (input.emailAddress == null) return Response.serverError().entity( "Missing `emailAddress`." ).build(); // Handle. User user = userDAO.newUser( input.emailAddress, input.name ); // Response. return Response.created( URLUtils.newURI( "%s", user.getEmailAddresses().iterator().next().getAddress() ) ).build(); } @PUT @Path("/{emailAddress}") @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_FORM_URLENCODED }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response put(@PathParam("emailAddress") final String emailAddress, final PutObject input) { // Check input. User user = userDAO.findUser( emailAddress ); if (user == null) return Response.status( Response.Status.NOT_FOUND ).entity( str( "No user with `emailAddress`: {0}", emailAddress ) ).build(); // Handle. if (input.name != null) user.setName( input.name ); user.setPrimaryColor( input.primaryColor ); user.setPrimaryColor( input.secondaryColor ); // Response. return Response.ok( user ).build(); } @SuppressFBWarnings({ "UWF_UNWRITTEN_FIELD" }) public static class PostObject { String emailAddress; String name; } @SuppressFBWarnings({ "UWF_UNWRITTEN_FIELD" }) public static class PutObject { String name; Color primaryColor; Color secondaryColor; } }