]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/ajaxplorer/mvc/AjxpDriverServlet.java
Remove unused method in SLC Agent interface
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / ajaxplorer / mvc / AjxpDriverServlet.java
1 package org.argeo.slc.web.ajaxplorer.mvc;
2
3 import java.io.IOException;
4 import java.util.Enumeration;
5 import java.util.Map;
6
7 import javax.servlet.ServletConfig;
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14 import org.argeo.slc.web.ajaxplorer.AjxpAnswer;
15 import org.argeo.slc.web.ajaxplorer.AjxpDriver;
16 import org.springframework.beans.BeanWrapper;
17 import org.springframework.beans.BeanWrapperImpl;
18 import org.springframework.beans.BeansException;
19 import org.springframework.web.context.WebApplicationContext;
20 import org.springframework.web.context.support.WebApplicationContextUtils;
21 import org.springframework.web.servlet.HttpServletBean;
22
23 public class AjxpDriverServlet extends HttpServletBean {
24 static final long serialVersionUID = 1l;
25
26 protected final Log log = LogFactory.getLog(getClass());
27 private String driverBean;
28 private AjxpDriver driver;
29
30 @Override
31 public void init(ServletConfig sc) throws ServletException {
32 super.init(sc);
33 WebApplicationContext context = WebApplicationContextUtils
34 .getRequiredWebApplicationContext(sc.getServletContext());
35 driverBean = sc.getInitParameter("driverBean");
36 if (driverBean == null) {
37 throw new ServletException(
38 "No driver found, please set the driverBean property");
39 }
40
41 logger.info("Loading driver " + driverBean);
42 driver = (AjxpDriver) context.getBean(driverBean);
43
44 // overrideBeanProperties(sc);
45 }
46
47 @Override
48 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
49 throws ServletException, IOException {
50 processRequest("GET", req, resp);
51 }
52
53 @Override
54 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
55 throws ServletException, IOException {
56 processRequest("POST", req, resp);
57 }
58
59 protected void processRequest(String method, HttpServletRequest req,
60 HttpServletResponse resp) throws ServletException, IOException {
61 long id = System.currentTimeMillis();
62 try {
63 if (log.isDebugEnabled())
64 logRequest(id, method, req);
65
66 AjxpAnswer answer = driver.executeAction(req);
67 answer.updateResponse(resp);
68
69 if (log.isDebugEnabled())
70 log.debug(id + " " + method + " completed");
71 } catch (Exception e) {
72 log.error(id + " Cannot process request.", e);
73 throw new ServletException("Cannot process request " + id, e);
74 }
75
76 }
77
78 public void setDriverBean(String driverName) {
79 this.driverBean = driverName;
80 }
81
82 protected void logRequest(long id, String method, HttpServletRequest req) {
83 if (log.isDebugEnabled()) {
84 StringBuffer buf = new StringBuffer(id + " Received " + method
85 + ": ");
86 buf.append('{');
87 Map<String, String[]> params = req.getParameterMap();
88 int count1 = 0;
89 for (Map.Entry<String, String[]> entry : params.entrySet()) {
90 if (count1 != 0)
91 buf.append(", ");
92 buf.append(entry.getKey()).append("={");
93 int count2 = 0;
94 for (String value : entry.getValue()) {
95 if (count2 != 0)
96 buf.append(',');
97 buf.append(value);
98 count2++;
99 }
100 buf.append('}');
101 count1++;
102 }
103 buf.append('}');
104 log.debug(buf.toString());
105 }
106 }
107
108 protected void overrideBeanProperties(ServletConfig sc)
109 throws ServletException {
110 BeanWrapper wrapper = new BeanWrapperImpl(driver);
111 Enumeration<String> en = sc.getInitParameterNames();
112 while (en.hasMoreElements()) {
113 String name = en.nextElement();
114 if (name.indexOf(driverBean + '.') == 0
115 && name.length() > (driverBean.length() + 1)) {
116 String propertyName = name.substring(driverBean.length() + 1);
117 String value = sc.getInitParameter(name);
118 if (value != null) {
119 try {
120 wrapper.setPropertyValue(propertyName, value);
121 } catch (BeansException e) {
122 throw new ServletException("Cannot set property "
123 + propertyName + " of bean " + driverBean, e);
124 }
125 }
126 }
127 }
128 }
129 }