package org.jboss.seam.rest.example.tasks.resource;
import java.net.URI;
import java.util.Date;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.jboss.seam.rest.example.tasks.entity.Category;
import org.jboss.seam.rest.example.tasks.entity.JaxbTaskWrapper;
import org.jboss.seam.rest.example.tasks.entity.Task;
import org.jboss.seam.rest.example.tasks.entity.TaskValidationGroup;
import org.jboss.seam.rest.validation.ValidateRequest;
/**
* CRUD resource for categories
*
* @author <a href="http://community.jboss.org/people/jharting">Jozef Hartinger</a>
*
*/
@Path("/category/{category}")
@Produces({ "application/xml", "application/json" })
@Consumes({ "application/xml", "application/json" })
@ValidateRequest(groups = TaskValidationGroup.class)
@Stateless
public class CategoryResource extends AbstractEntityResource {
@Inject
private TaskCollectionResource taskCollectionSubresource;
@Path("/")
// subresource locator
public TaskCollectionResource getTasks() {
return taskCollectionSubresource;
}
@PUT
public void putCategory(@PathParam("category") String categoryName) {
Category category = new Category(categoryName);
em.persist(category);
}
@DELETE
public void deleteCategory(@PathParam("category") String categoryName) {
em.remove(loadCategory(categoryName));
}
/**
* This method only makes sense at /category/{category}/task not /task
*
*
*/
@POST
@Path("/task")
public Response createTask(JaxbTaskWrapper incommingTask, @PathParam("category") String categoryName,
@Context UriInfo uriInfo) {
Category category = loadCategory(categoryName);
Task task = new Task();
task.setCategory(category);
task.setCreated(new Date());
task.setUpdated(task.getCreated()); // set update date to creation date
task.setName(incommingTask.getName());
task.setResolved(false); // not resolved by default
em.persist(task);
long id = task.getId();
URI uri = uriInfo.getBaseUriBuilder().path(TaskCollectionResource.class)
.path(TaskCollectionResource.class, "getTaskSubresource").build(String.valueOf(id));
return Response.created(uri).build();
}
}