View Javadoc

1   package com.eyeq.pivot4j.pentaho.servlet;
2   
3   import java.io.IOException;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import javax.faces.webapp.FacesServlet;
8   import javax.servlet.ServletConfig;
9   import javax.servlet.ServletException;
10  import javax.servlet.ServletRequest;
11  import javax.servlet.ServletResponse;
12  import javax.servlet.http.HttpServlet;
13  import javax.servlet.http.HttpServletRequest;
14  
15  public class FacesDispatcherServlet extends HttpServlet {
16  
17  	private static final long serialVersionUID = 9009308748116185472L;
18  
19  	private FacesServlet facesServlet;
20  
21  	private PluginServletContext contextWrapper;
22  
23  	private Map<String, String> initParameters;
24  
25  	/**
26  	 * @return the initParameters
27  	 */
28  	public Map<String, String> getInitParameters() {
29  		return initParameters;
30  	}
31  
32  	/**
33  	 * @param initParameters
34  	 *            the initParameters to set
35  	 */
36  	public void setInitParameters(Map<String, String> initParameters) {
37  		this.initParameters = initParameters;
38  	}
39  
40  	/**
41  	 * @return the contextListener
42  	 */
43  	protected PluginServletContext getContextWrapper() {
44  		return contextWrapper;
45  	}
46  
47  	/**
48  	 * @return facesServlet
49  	 */
50  	protected FacesServlet getFacesServlet() {
51  		return facesServlet;
52  	}
53  
54  	/**
55  	 * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
56  	 */
57  	@Override
58  	public void init(ServletConfig config) throws ServletException {
59  		super.init(config);
60  
61  		if (initParameters == null) {
62  			this.initParameters = new HashMap<String, String>();
63  		}
64  
65  		ClassLoader loader = Thread.currentThread().getContextClassLoader();
66  
67  		try {
68  			Thread.currentThread().setContextClassLoader(
69  					getClass().getClassLoader());
70  
71  			this.contextWrapper = new PluginServletContext(
72  					config.getServletContext(), initParameters);
73  			contextWrapper.initialize();
74  
75  			this.facesServlet = new FacesServlet();
76  			this.facesServlet.init(new PluginServletConfig(contextWrapper));
77  		} finally {
78  			Thread.currentThread().setContextClassLoader(loader);
79  		}
80  	}
81  
82  	/**
83  	 * @see javax.servlet.GenericServlet#destroy()
84  	 */
85  	@Override
86  	public void destroy() {
87  		this.contextWrapper.destroy();
88  		this.contextWrapper = null;
89  
90  		this.facesServlet.destroy();
91  		this.facesServlet = null;
92  
93  		super.destroy();
94  	}
95  
96  	/**
97  	 * @see javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest,
98  	 *      javax.servlet.ServletResponse)
99  	 */
100 	@Override
101 	public void service(ServletRequest request, ServletResponse response)
102 			throws ServletException, IOException {
103 		ClassLoader loader = Thread.currentThread().getContextClassLoader();
104 
105 		PluginServletRequest wrappedRequest = new PluginServletRequest(
106 				contextWrapper, (HttpServletRequest) request);
107 		try {
108 			Thread.currentThread().setContextClassLoader(
109 					getClass().getClassLoader());
110 
111 			wrappedRequest.initialize();
112 
113 			facesServlet.service(wrappedRequest, response);
114 		} finally {
115 			Thread.currentThread().setContextClassLoader(loader);
116 
117 			wrappedRequest.destroy();
118 		}
119 	}
120 }