SimpleHttpHandler.java
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 : 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(Requestrequest
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 responsethrows 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 responsethrows 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 }