package org.karmaexchange.resources; import static java.lang.String.format; import javax.servlet.ServletContext; import javax.ws.rs.GET; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.karmaexchange.dao.User; import org.karmaexchange.dao.UserManagedEvent; import org.karmaexchange.resources.msg.ErrorResponseMsg; import org.karmaexchange.resources.msg.ListResponseMsg; import org.karmaexchange.resources.msg.ErrorResponseMsg.ErrorInfo; import org.karmaexchange.util.OfyUtil; import org.karmaexchange.util.PaginatedQuery; import org.karmaexchange.util.PaginatedQuery.FilterQueryClause; import com.google.common.collect.ImmutableList; import com.googlecode.objectify.Key; public class UserManagedEventResource extends ViewlessBaseDaoResource<UserManagedEvent> { private Key<User> userKey; public UserManagedEventResource(UriInfo uriInfo, Request request, ServletContext servletContext, Key<User> userKey) { super(uriInfo, request, servletContext); this.userKey = userKey; } @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public ListResponseMsg<UserManagedEvent> getResources() { PaginatedQuery.Result<UserManagedEvent> queryResult = EventResource.eventBaseQuery(UserManagedEvent.class, uriInfo, null, ImmutableList.<FilterQueryClause>of(), userKey); return ListResponseMsg.create(queryResult); } @Override public Response upsertResource(UserManagedEvent resource) { if (!resource.isKeyComplete() && (resource.getOwner() == null)) { resource.setOwner(userKey.getString()); } validateResource(resource); return super.upsertResource(resource); } @Override public Response updateResource(@PathParam("resource") String key, UserManagedEvent resource) { validateResource(resource); return super.updateResource(key, resource); } private void validateResource(UserManagedEvent resource) { Key<User> resourceOwnerKey = OfyUtil.createKey(resource.getOwner()); if (!resourceOwnerKey.equals(userKey)) { throw ErrorResponseMsg.createException( format("the resource owner key [%s] does not match the user path key [%s]", resource.getOwner(), userKey.getString()), ErrorInfo.Type.BAD_REQUEST); } } }