CategoriesResource.java
- package ejava.examples.ejbwar.inventory.rs;
- import javax.inject.Inject;
- import javax.ws.rs.DELETE;
- import javax.ws.rs.DefaultValue;
- import javax.ws.rs.GET;
- 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.Context;
- 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.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import ejava.examples.ejbwar.inventory.bo.Categories;
- import ejava.examples.ejbwar.inventory.bo.Category;
- import ejava.examples.ejbwar.inventory.ejb.InventoryMgmtEJB;
- /**
- * This class implements a web facade for the product catageories in the
- * inventory management. It uses JAX-RS to implement the server-side HTTP
- * communications.
- */
- @Path("categories") //part of the method's final URI
- public class CategoriesResource {
- private static final Logger log = LoggerFactory.getLogger(CategoriesResource.class);
-
- @Inject
- private InventoryMgmtEJB ejb;
- @Context
- private Request request;
- @Context
- private UriInfo uriInfo;
-
- /**
- * This method will respond to a GET of the base resource URI to
- * return categories based on query parameters.
- * @param name
- * @param offset
- * @param limit
- * @return
- */
- @GET @Path("")
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response findCategoriesByName(
- @QueryParam("name") @DefaultValue("") String name,
- @QueryParam("offset") @DefaultValue("0") int offset,
- @QueryParam("limit") @DefaultValue("0") int limit) {
- log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
- try {
- Categories categories = ejb.findCategoryByName(name, offset, limit);
- //wrap java.lang.List in object that preserves type for marshalling
- return Response.ok(categories)
- .build();
- } catch (Exception ex) {
- return ResourceHelper.serverError(log, "get categories", ex).build();
- }
- }
-
- /**
- * This method will respond to a GET method for (root)/{id} URIs to get
- * a specific category.
- *
- * @param id
- * @return
- */
- @GET @Path("{id}")
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response getCategory(@PathParam("id")int id) {
- log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
- try {
- Category category = ejb.getCategory(id);
- if (category != null) {
- return Response.ok(category)
- .tag("" + category.getVersion())
- .build();
- }
- else {
- return Response.status(Response.Status.NOT_FOUND)
- .entity(String.format("unable to locate category %d", id))
- .type(MediaType.TEXT_PLAIN)
- .build();
- }
- } catch (Exception ex) {
- return ResourceHelper.serverError(log, "get category", ex).build();
- }
- }
- /**
- * This method responds to DELETE method calls to (root)/{id} URIs to
- * delete a specific category.
- * @param id
- * @return
- */
- @DELETE @Path("{id}")
- public Response deleteCategory(@PathParam("id")int id) {
- log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
- try {
- ejb.deleteCategory(id);
- return Response.noContent().build();
- } catch (Exception ex) {
- return ResourceHelper.serverError(log, "delete category", ex).build();
- }
- }
- }