CategoriesResource.java

  1. package ejava.examples.ejbwar.inventory.rs;

  2. import javax.inject.Inject;
  3. import javax.ws.rs.DELETE;
  4. import javax.ws.rs.DefaultValue;
  5. import javax.ws.rs.GET;
  6. import javax.ws.rs.Path;
  7. import javax.ws.rs.PathParam;
  8. import javax.ws.rs.Produces;
  9. import javax.ws.rs.QueryParam;
  10. import javax.ws.rs.core.Context;
  11. import javax.ws.rs.core.MediaType;
  12. import javax.ws.rs.core.Request;
  13. import javax.ws.rs.core.Response;
  14. import javax.ws.rs.core.UriInfo;

  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;

  17. import ejava.examples.ejbwar.inventory.bo.Categories;
  18. import ejava.examples.ejbwar.inventory.bo.Category;
  19. import ejava.examples.ejbwar.inventory.ejb.InventoryMgmtEJB;

  20. /**
  21.  * This class implements a web facade for the product catageories in the
  22.  * inventory management. It uses JAX-RS to implement the server-side HTTP
  23.  * communications.
  24.  */
  25. @Path("categories") //part of the method's final URI
  26. public class CategoriesResource {
  27.     private static final Logger log = LoggerFactory.getLogger(CategoriesResource.class);
  28.    
  29.     @Inject
  30.     private InventoryMgmtEJB ejb;
  31.     @Context
  32.     private Request request;
  33.     @Context
  34.     private UriInfo uriInfo;
  35.    
  36.     /**
  37.      * This method will respond to a GET of the base resource URI to
  38.      * return categories based on query parameters.
  39.      * @param name
  40.      * @param offset
  41.      * @param limit
  42.      * @return
  43.      */
  44.     @GET @Path("")
  45.     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
  46.     public Response findCategoriesByName(
  47.             @QueryParam("name") @DefaultValue("") String name,
  48.             @QueryParam("offset") @DefaultValue("0") int offset,
  49.             @QueryParam("limit") @DefaultValue("0") int limit) {
  50.         log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));

  51.         try {
  52.             Categories categories = ejb.findCategoryByName(name, offset, limit);
  53.                 //wrap java.lang.List in object that preserves type for marshalling
  54.             return Response.ok(categories)
  55.                     .build();
  56.         } catch (Exception ex) {
  57.             return ResourceHelper.serverError(log, "get categories", ex).build();
  58.         }
  59.     }
  60.    
  61.     /**
  62.      * This method will respond to a GET method for (root)/{id} URIs to get
  63.      * a specific category.
  64.      *  
  65.      * @param id
  66.      * @return
  67.      */
  68.     @GET @Path("{id}")
  69.     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
  70.     public Response getCategory(@PathParam("id")int id) {
  71.         log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));

  72.         try {
  73.             Category category = ejb.getCategory(id);
  74.             if (category != null) {
  75.                 return Response.ok(category)
  76.                         .tag("" + category.getVersion())
  77.                         .build();
  78.             }
  79.             else {
  80.                 return Response.status(Response.Status.NOT_FOUND)
  81.                         .entity(String.format("unable to locate category %d", id))
  82.                         .type(MediaType.TEXT_PLAIN)
  83.                         .build();
  84.             }
  85.         } catch (Exception ex) {
  86.             return ResourceHelper.serverError(log, "get category", ex).build();
  87.         }
  88.     }

  89.     /**
  90.      * This method responds to DELETE method calls to (root)/{id} URIs to
  91.      * delete a specific category.
  92.      * @param id
  93.      * @return
  94.      */
  95.     @DELETE @Path("{id}")
  96.     public Response deleteCategory(@PathParam("id")int id) {
  97.         log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));

  98.         try {
  99.             ejb.deleteCategory(id);
  100.             return Response.noContent().build();
  101.         } catch (Exception ex) {
  102.             return ResourceHelper.serverError(log, "delete category", ex).build();
  103.         }
  104.     }

  105. }