1 package ejava.examples.ejbwar.inventory.rs;
2
3 import java.net.URI;
4
5 import javax.inject.Inject;
6 import javax.ws.rs.Consumes;
7 import javax.ws.rs.DELETE;
8 import javax.ws.rs.DefaultValue;
9 import javax.ws.rs.FormParam;
10 import javax.ws.rs.GET;
11 import javax.ws.rs.POST;
12 import javax.ws.rs.PUT;
13 import javax.ws.rs.Path;
14 import javax.ws.rs.PathParam;
15 import javax.ws.rs.Produces;
16 import javax.ws.rs.QueryParam;
17 import javax.ws.rs.core.Context;
18 import javax.ws.rs.core.MediaType;
19 import javax.ws.rs.core.Request;
20 import javax.ws.rs.core.Response;
21 import javax.ws.rs.core.UriBuilder;
22 import javax.ws.rs.core.UriInfo;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 import ejava.examples.ejbwar.inventory.bo.Product;
28 import ejava.examples.ejbwar.inventory.bo.Products;
29 import ejava.examples.ejbwar.inventory.ejb.InventoryMgmtEJB;
30
31
32
33
34
35 @Path("/products")
36 public class ProductsResource {
37 private static final Log log = LogFactory.getLog(ProductsResource.class);
38 @Inject
39 private InventoryMgmtEJB ejb;
40 @Context
41 private Request request;
42 @Context
43 private UriInfo uriInfo;
44
45
46
47
48
49
50
51 @POST @Path("")
52 @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
53 @Produces(MediaType.APPLICATION_XML)
54 public Response createProduct(
55 @FormParam("name") String name,
56 @FormParam("quantity") Integer quantity,
57 @FormParam("price") Double price,
58 @FormParam("category") String category) {
59 log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
60
61 try {
62 Product product = new Product(name, quantity, price);
63 Product p = ejb.addProduct(product, category);
64
65 URI uri = UriBuilder.fromUri(uriInfo.getAbsolutePath())
66 .path(ProductsResource.class, "getProduct")
67 .build(p.getId());
68 return Response.created(uri)
69 .entity(p)
70 .tag("" + p.getVersion())
71 .build();
72 } catch (Exception ex) {
73 return ResourceHelper.serverError(log, "creating product", ex).build();
74 }
75 }
76
77
78
79
80
81
82 @GET @Path("{id}")
83 @Produces(MediaType.APPLICATION_XML)
84 public Response getProduct(@PathParam("id")int id) {
85 log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
86
87 try {
88 Product product = ejb.getProduct(id);
89 if (product != null) {
90 return Response.ok(product)
91 .tag("" + product.getVersion())
92 .build();
93 }
94 else {
95 return Response.status(Response.Status.NOT_FOUND)
96 .entity(String.format("unable to locate product %d", id))
97 .type(MediaType.TEXT_PLAIN)
98 .build();
99 }
100 } catch (Exception ex) {
101 return ResourceHelper.serverError(log, "getting product", ex).build();
102 }
103 }
104
105
106
107
108
109
110
111 @PUT @Path("{id}")
112 @Consumes(MediaType.APPLICATION_XML)
113 @Produces(MediaType.APPLICATION_XML)
114 public Response updateProduct(@PathParam("id") int id, Product product) {
115 log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
116
117 try {
118 Product p = ejb.updateProduct(product);
119 return Response.ok(p)
120 .tag("" + p.getVersion())
121 .build();
122 } catch (Exception ex) {
123 return ResourceHelper.serverError(log, "update product", ex).build();
124 }
125 }
126
127
128
129
130
131
132 @DELETE @Path("{id}")
133 public Response deleteProduct(@PathParam("id")int id) {
134 log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
135
136 try {
137 Product product = ejb.getProduct(id);
138 if (product != null) {
139 try {
140 ejb.deleteProduct(product);
141 return Response.noContent().build();
142 } catch (Exception ex) {
143 return ResourceHelper.serverError(log, "deleting product", ex).build();
144 }
145 }
146 else {
147 return Response.status(Response.Status.NOT_FOUND)
148 .entity(String.format("unable to locate product %d", id))
149 .type(MediaType.TEXT_PLAIN)
150 .build();
151 }
152 } catch (Exception ex) {
153 return ResourceHelper.serverError(log, "getting product", ex).build();
154 }
155 }
156
157
158
159
160
161
162 @GET @Path("")
163 @Produces(MediaType.APPLICATION_XML)
164 public Response findProductsByName(
165 @QueryParam("name")String name,
166 @QueryParam("offset") @DefaultValue("0") int offset,
167 @QueryParam("limit") @DefaultValue("0") int limit) {
168 log.debug(String.format("%s %s", request.getMethod(), uriInfo.getAbsolutePath()));
169
170 try {
171 Products products = ejb.findProductByName(name, offset, limit);
172 return Response.ok(products)
173 .build();
174 } catch (Exception ex) {
175 return ResourceHelper.serverError(log, "getting products", ex).build();
176 }
177 }
178 }