1 package ordertracker.rs;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.ws.rs.GET;
7 import javax.ws.rs.POST;
8 import javax.ws.rs.PUT;
9 import javax.ws.rs.Path;
10 import javax.ws.rs.PathParam;
11 import javax.ws.rs.Produces;
12 import javax.ws.rs.QueryParam;
13 import javax.ws.rs.core.MediaType;
14 import javax.ws.rs.core.Response;
15
16 import ordertracker.Depot;
17 import ordertracker.Order;
18
19 @Path("/")
20 public class Service {
21
22 @POST
23 @Path("/order/{orderId}/create")
24 public Response createOrder(@PathParam("orderId") String orderId,
25 @QueryParam("description") String description,
26 @QueryParam("fromAddress") String fromAddress,
27 @QueryParam("toAddress") String toAddress,
28 @QueryParam("destinationEmail") String destinationEmail,
29 @QueryParam("senderEmail") String senderEmail,
30 @QueryParam("maxAttempts") Integer maxAttempts,
31 @QueryParam("comment") String comment) {
32 Order.create(new Order.Events.Create(orderId, description, fromAddress,
33 toAddress, destinationEmail, senderEmail, maxAttempts, comment));
34 return Response.ok("order created").build();
35 }
36
37 @PUT
38 @Path("/order/{orderId}/send")
39 public Response sendOrder(@PathParam("orderId") String orderId) {
40 Order order = Order.find(orderId).get();
41 order.signal(new Order.Events.Send());
42 return Response.ok("order sent").build();
43 }
44
45 @PUT
46 @Path("/order/{orderId}/assign")
47 public Response assignToCourier(@PathParam("orderId") String orderId) {
48 Order order = Order.find(orderId).get();
49 order.signal(new Order.Events.Assign());
50 return Response.ok("order assigned to a courier").build();
51 }
52
53 @PUT
54 @Path("/order/{orderId}/pickedUp")
55 public Response pickedUpByCourier(@PathParam("orderId") String orderId) {
56 Order order = Order.find(orderId).get();
57 order.signal(new Order.Events.PickedUp());
58 return Response.ok("order picked up by a courier").build();
59 }
60
61 @PUT
62 @Path("/order/{orderId}/arrivedDepot")
63 public Response arrivedDepot(@PathParam("orderId") String orderId,
64 @QueryParam("depotId") String depotId) {
65 Order order = Order.find(orderId).get();
66 order.signal(new Order.Events.ArrivedDepot(depotId));
67 return Response.ok("arrived depot " + depotId).build();
68 }
69
70 @PUT
71 @Path("/order/{orderId}/arrivedFinalDepot")
72 public Response arrivedFinalDepot(@PathParam("orderId") String orderId,
73 @QueryParam("depotId") String depotId) {
74 Order order = Order.find(orderId).get();
75 order.signal(new Order.Events.ArrivedFinalDepot(depotId));
76 return Response.ok("arrived final depot " + depotId).build();
77 }
78
79 @PUT
80 @Path("/order/{orderId}/delivering")
81 public Response delivering(@PathParam("orderId") String orderId) {
82 Order order = Order.find(orderId).get();
83 order.signal(new Order.Events.Delivering());
84 return Response.ok("delivering").build();
85 }
86
87 @PUT
88 @Path("/order/{orderId}/delivered")
89 public Response delivered(@PathParam("orderId") String orderId) {
90 Order order = Order.find(orderId).get();
91 order.signal(new Order.Events.Delivered());
92 return Response.ok("delivered").build();
93 }
94
95 @PUT
96 @Path("/order/{orderId}/deliveryFailed")
97 public Response deliveryFailed(@PathParam("orderId") String orderId) {
98 Order order = Order.find(orderId).get();
99 order.signal(new Order.Events.DeliveryFailed());
100 return Response.ok("delivery failed").build();
101 }
102
103 @PUT
104 @Path("/order/{orderId}/deliveryAgain")
105 public Response deliverAgain(@PathParam("orderId") String orderId) {
106 Order order = Order.find(orderId).get();
107 order.signal(new Order.Events.DeliverAgain());
108 return Response.ok("marked for delivery again").build();
109 }
110
111 @GET
112 @Path("/depot/{depotId}/ordersReadyForDelivery")
113 @Produces(MediaType.APPLICATION_JSON)
114 public Response getOrdersReadyForDelivery(
115 @PathParam("depotId") String depotId) {
116 Depot depot = Depot.find(depotId).get();
117 List<Order> list = new ArrayList<Order>();
118 for (Order order : depot.getOrder_R1())
119 if (Order.State.READY_FOR_DELIVERY.toString().equals(
120 order.getStatus()))
121 list.add(order);
122
123 return Response.ok("{ \"count\" : \"" + list.size() + "\"}",
124 MediaType.APPLICATION_JSON).build();
125 }
126
127 @GET
128 @Path("/order/{orderId}/status")
129 @Produces("text/plain")
130 public Response getOrderStatus(@PathParam("orderId") String orderId) {
131 Order order = Order.find(orderId).get();
132 return Response.ok(order.getState(), MediaType.TEXT_PLAIN).build();
133 }
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 }