1 package org
.argeo
.slc
.web
.ajaxplorer
.mvc
;
3 import java
.io
.IOException
;
4 import java
.util
.Enumeration
;
7 import javax
.servlet
.ServletConfig
;
8 import javax
.servlet
.ServletException
;
9 import javax
.servlet
.http
.HttpServletRequest
;
10 import javax
.servlet
.http
.HttpServletResponse
;
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
;
23 public class AjxpDriverServlet
extends HttpServletBean
{
24 static final long serialVersionUID
= 1l;
26 protected final Log log
= LogFactory
.getLog(getClass());
27 private String driverBean
;
28 private AjxpDriver driver
;
31 public void init(ServletConfig sc
) throws ServletException
{
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");
41 logger
.info("Loading driver " + driverBean
);
42 driver
= (AjxpDriver
) context
.getBean(driverBean
);
44 // overrideBeanProperties(sc);
48 protected void doGet(HttpServletRequest req
, HttpServletResponse resp
)
49 throws ServletException
, IOException
{
50 processRequest("GET", req
, resp
);
54 protected void doPost(HttpServletRequest req
, HttpServletResponse resp
)
55 throws ServletException
, IOException
{
56 processRequest("POST", req
, resp
);
59 protected void processRequest(String method
, HttpServletRequest req
,
60 HttpServletResponse resp
) throws ServletException
, IOException
{
61 long id
= System
.currentTimeMillis();
63 if (log
.isDebugEnabled())
64 logRequest(id
, method
, req
);
66 AjxpAnswer answer
= driver
.executeAction(req
);
67 answer
.updateResponse(resp
);
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
);
78 public void setDriverBean(String driverName
) {
79 this.driverBean
= driverName
;
82 protected void logRequest(long id
, String method
, HttpServletRequest req
) {
83 if (log
.isDebugEnabled()) {
84 StringBuffer buf
= new StringBuffer(id
+ " Received " + method
87 Map
<String
, String
[]> params
= req
.getParameterMap();
89 for (Map
.Entry
<String
, String
[]> entry
: params
.entrySet()) {
92 buf
.append(entry
.getKey()).append("={");
94 for (String value
: entry
.getValue()) {
104 log
.debug(buf
.toString());
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
);
120 wrapper
.setPropertyValue(propertyName
, value
);
121 } catch (BeansException e
) {
122 throw new ServletException("Cannot set property "
123 + propertyName
+ " of bean " + driverBean
, e
);