]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/ajaxplorer/mvc/AjxpDriverRequestHandler.java
Introduce Ajaxplorer support in SLC
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / ajaxplorer / mvc / AjxpDriverRequestHandler.java
1 package org.argeo.slc.web.ajaxplorer.mvc;
2
3 import java.io.IOException;
4 import java.util.Map;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.argeo.slc.web.ajaxplorer.AjxpAnswer;
13 import org.argeo.slc.web.ajaxplorer.AjxpDriver;
14 import org.springframework.web.HttpRequestHandler;
15
16 public class AjxpDriverRequestHandler implements HttpRequestHandler {
17
18 protected final Log log = LogFactory.getLog(getClass());
19 private AjxpDriver driver;
20
21 public void handleRequest(HttpServletRequest req, HttpServletResponse resp)
22 throws ServletException, IOException {
23 long id = System.currentTimeMillis();
24 try {
25 if (log.isDebugEnabled())
26 logRequest(id, req.getMethod(), req);
27
28 AjxpAnswer answer = driver.executeAction(req);
29 answer.updateResponse(resp);
30
31 if (log.isTraceEnabled())
32 log.trace(id + " " + req.getMethod() + " completed");
33 } catch (Exception e) {
34 log.error(id + " Cannot process request.", e);
35 throw new ServletException("Cannot process request " + id, e);
36 }
37
38 }
39
40 protected void logRequest(long id, String method, HttpServletRequest req) {
41 if (log.isDebugEnabled()) {
42 StringBuffer buf = new StringBuffer(id + " Received " + method
43 + ": ");
44 buf.append('{');
45 @SuppressWarnings("unchecked")
46 Map<String, String[]> params = req.getParameterMap();
47 int count1 = 0;
48 for (Map.Entry<String, String[]> entry : params.entrySet()) {
49 if (count1 != 0)
50 buf.append(", ");
51 buf.append(entry.getKey()).append("={");
52 int count2 = 0;
53 for (String value : entry.getValue()) {
54 if (count2 != 0)
55 buf.append(',');
56 buf.append(value);
57 count2++;
58 }
59 buf.append('}');
60 count1++;
61 }
62 buf.append('}');
63 log.debug(buf.toString());
64 }
65 }
66
67 public void setDriver(AjxpDriver driver) {
68 this.driver = driver;
69 }
70
71 }