01 /*
02 *
03 * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
04 *
05 */
06 package demo.sharedqueue;
07
08 import java.io.IOException;
09
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.mortbay.jetty.HttpConnection;
15 import org.mortbay.jetty.Request;
16 import org.mortbay.jetty.handler.AbstractHandler;
17
18 public class SimpleHttpHandler extends AbstractHandler {
19
20 public final static String ACTION = "/webapp";
21 public final static String ACTION_ADDWORK = "/addWork";
22 public final static String ACTION_GETINFO = "/getInfo";
23 public final static String UNITS_OF_WORK = "unitsOfWork";
24
25 private final demo.sharedqueue.Queue queue;
26
27 public SimpleHttpHandler(final Queue queue) {
28 this.queue = queue;
29 }
30
31 private final int getIntForParameter(final HttpServletRequest request,
32 final String name) {
33 String param = request.getParameter(name);
34 try {
35 return param == null ? 0 : Integer.parseInt(param);
36 } catch (NumberFormatException nfe) {
37 return 0;
38 }
39 }
40
41 public final void handle(final String target,
42 final HttpServletRequest request,
43 final HttpServletResponse response, final int dispatch)
44 throws IOException, ServletException {
45 Request base_request = (request instanceof Request) ? (Request) request
46 : HttpConnection.getCurrentConnection().getRequest();
47 if (target.equals(ACTION_ADDWORK)) {
48 doAddWork(base_request, response);
49 } else if (target.equals(ACTION_GETINFO)) {
50 doGetInfo(base_request, response);
51 }
52 }
53
54 private final void doAddWork(final Request request,
55 final HttpServletResponse response) throws IOException {
56 final int unitsOfWork = getIntForParameter(request, UNITS_OF_WORK);
57 final Thread processor = new Thread(new Runnable() {
58 public void run() {
59 for (int i = 0; i < unitsOfWork; i++) {
60 queue.addJob();
61 // added slight delay to improve visuals
62 try {
63 Thread.sleep(50);
64 } catch (InterruptedException ie) {
65 System.err.println(ie.getMessage());
66 }
67 }
68 }
69 });
70 processor.start();
71 response.sendRedirect(ACTION);
72 }
73
74 private final void doGetInfo(final Request request,
75 final HttpServletResponse response) throws IOException {
76 response.setContentType("text/xml");
77 response.setStatus(HttpServletResponse.SC_OK);
78 response
79 .getWriter()
80 .println(
81 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
82 response.getWriter().println("<root>");
83 response.getWriter().println(queue.getXmlData());
84 response.getWriter().println("</root>");
85 request.setHandled(true);
86 }
87 }
|