1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
package org.seasar.teeda.core.context.servlet; |
17 | |
|
18 | |
import java.io.IOException; |
19 | |
import java.io.InputStream; |
20 | |
import java.net.MalformedURLException; |
21 | |
import java.net.URL; |
22 | |
import java.security.Principal; |
23 | |
import java.util.Enumeration; |
24 | |
import java.util.Iterator; |
25 | |
import java.util.Locale; |
26 | |
import java.util.Map; |
27 | |
import java.util.Set; |
28 | |
|
29 | |
import javax.faces.context.ExternalContext; |
30 | |
import javax.faces.internal.EncodeUrlCustomizer; |
31 | |
import javax.servlet.ServletContext; |
32 | |
import javax.servlet.ServletRequest; |
33 | |
import javax.servlet.ServletResponse; |
34 | |
import javax.servlet.http.HttpServletRequest; |
35 | |
import javax.servlet.http.HttpServletResponse; |
36 | |
|
37 | |
import org.seasar.framework.container.external.servlet.CookieMap; |
38 | |
import org.seasar.framework.container.external.servlet.HttpSessionMap; |
39 | |
import org.seasar.framework.container.external.servlet.ServletApplicationMap; |
40 | |
import org.seasar.framework.container.external.servlet.ServletInitParameterMap; |
41 | |
import org.seasar.framework.container.external.servlet.ServletRequestHeaderMap; |
42 | |
import org.seasar.framework.container.external.servlet.ServletRequestHeaderValuesMap; |
43 | |
import org.seasar.framework.container.external.servlet.ServletRequestMap; |
44 | |
import org.seasar.framework.container.external.servlet.ServletRequestParameterMap; |
45 | |
import org.seasar.framework.container.external.servlet.ServletRequestParameterValuesMap; |
46 | |
import org.seasar.framework.log.Logger; |
47 | |
import org.seasar.framework.util.AssertionUtil; |
48 | |
import org.seasar.teeda.core.context.Releaseable; |
49 | |
import org.seasar.teeda.core.scope.impl.DispatchScopeFactory; |
50 | |
import org.seasar.teeda.core.util.ServletExternalContextUtil; |
51 | |
|
52 | |
|
53 | |
|
54 | |
|
55 | |
public class ServletExternalContextImpl extends ExternalContext implements |
56 | |
Releaseable { |
57 | |
|
58 | 1 | private static Logger logger = Logger |
59 | 1 | .getLogger(ServletExternalContextImpl.class); |
60 | |
|
61 | |
private ServletContext context; |
62 | |
|
63 | |
private ServletRequest request; |
64 | |
|
65 | |
private ServletResponse response; |
66 | |
|
67 | 14 | private String servletPath = null; |
68 | |
|
69 | 14 | private String pathInfo = null; |
70 | |
|
71 | 14 | private boolean isHttpServletRequest = false; |
72 | |
|
73 | 14 | private boolean isHttpServletResponse = false; |
74 | |
|
75 | 14 | private Map applicationMap = null; |
76 | |
|
77 | 14 | private Map initParameterMap = null; |
78 | |
|
79 | 14 | private Map sessionMap = null; |
80 | |
|
81 | 14 | private Map requestCookieMap = null; |
82 | |
|
83 | 14 | private Map requestParameterMap = null; |
84 | |
|
85 | 14 | private Map requestParameterValuesMap = null; |
86 | |
|
87 | 14 | private Map requestMap = null; |
88 | |
|
89 | 14 | private Map requestHeaderMap = null; |
90 | |
|
91 | 14 | private Map requestHeaderValuesMap = null; |
92 | |
|
93 | 14 | private EncodeUrlCustomizer customizer = null; |
94 | |
|
95 | |
public ServletExternalContextImpl(final ServletContext context, |
96 | 14 | final ServletRequest request, final ServletResponse response) { |
97 | 14 | this.context = context; |
98 | 14 | this.request = request; |
99 | 14 | this.response = response; |
100 | 14 | this.isHttpServletRequest = ServletExternalContextUtil |
101 | |
.isHttpServletRequest(this.request); |
102 | 14 | this.isHttpServletResponse = ServletExternalContextUtil |
103 | |
.isHttpServletResponse(this.response); |
104 | 14 | ServletExternalContextUtil.setCharacterEncoding(this.request); |
105 | 14 | if (isHttpServletRequest) { |
106 | 12 | HttpServletRequest httpServletRequest = (HttpServletRequest) request; |
107 | 12 | this.servletPath = httpServletRequest.getServletPath(); |
108 | 12 | this.pathInfo = httpServletRequest.getPathInfo(); |
109 | |
} |
110 | 14 | } |
111 | |
|
112 | |
public void dispatch(String path) throws IOException { |
113 | |
try { |
114 | 0 | ServletExternalContextUtil.dispatch(path, request, response); |
115 | |
} finally { |
116 | 0 | DispatchScopeFactory.destroy(); |
117 | 0 | } |
118 | 0 | } |
119 | |
|
120 | |
public String encodeActionURL(String url) { |
121 | 7 | assertHttpServletResponse(); |
122 | 7 | final String encodedUrl = customizer.encodeActionUrl(this, url); |
123 | 7 | HttpServletResponse httpResponse = (HttpServletResponse) response; |
124 | 7 | if (((HttpServletRequest) request).isRequestedSessionIdFromCookie()) { |
125 | 0 | return encodedUrl; |
126 | |
} |
127 | 7 | return httpResponse.encodeURL(encodedUrl); |
128 | |
} |
129 | |
|
130 | |
public String encodeNamespace(final String name) { |
131 | 0 | AssertionUtil.assertNotNull("name is null.", name); |
132 | 0 | return name; |
133 | |
} |
134 | |
|
135 | |
public String encodeResourceURL(final String url) { |
136 | 6 | assertHttpServletResponse(); |
137 | 6 | final String encodedUrl = customizer.encodeResourceUrl(this, url); |
138 | 6 | HttpServletResponse httpResponse = (HttpServletResponse) response; |
139 | 6 | if (((HttpServletRequest) request).isRequestedSessionIdFromCookie()) { |
140 | 0 | return encodedUrl; |
141 | |
} |
142 | 6 | return httpResponse.encodeURL(encodedUrl); |
143 | |
} |
144 | |
|
145 | |
public Map getApplicationMap() { |
146 | 0 | if (applicationMap == null) { |
147 | 0 | applicationMap = new ServletApplicationMap(context); |
148 | |
} |
149 | 0 | return applicationMap; |
150 | |
} |
151 | |
|
152 | |
public String getAuthType() { |
153 | 0 | assertHttpServletRequest(); |
154 | 0 | HttpServletRequest httpServletRequest = (HttpServletRequest) request; |
155 | 0 | return httpServletRequest.getAuthType(); |
156 | |
} |
157 | |
|
158 | |
public Object getContext() { |
159 | 0 | return context; |
160 | |
} |
161 | |
|
162 | |
public String getInitParameter(String name) { |
163 | 0 | return context.getInitParameter(name); |
164 | |
} |
165 | |
|
166 | |
public Map getInitParameterMap() { |
167 | 0 | if (initParameterMap == null) { |
168 | 0 | initParameterMap = new ServletInitParameterMap(context); |
169 | |
} |
170 | 0 | return initParameterMap; |
171 | |
} |
172 | |
|
173 | |
public String getRemoteUser() { |
174 | 0 | assertHttpServletRequest(); |
175 | 0 | HttpServletRequest httpRequest = (HttpServletRequest) request; |
176 | 0 | return httpRequest.getRemoteUser(); |
177 | |
} |
178 | |
|
179 | |
public Object getRequest() { |
180 | 0 | return request; |
181 | |
} |
182 | |
|
183 | |
public String getRequestContextPath() { |
184 | 0 | assertHttpServletRequest(); |
185 | 0 | HttpServletRequest httpRequest = (HttpServletRequest) request; |
186 | 0 | return httpRequest.getContextPath(); |
187 | |
} |
188 | |
|
189 | |
public Map getRequestCookieMap() { |
190 | 0 | assertHttpServletRequest(); |
191 | 0 | if (requestCookieMap == null) { |
192 | 0 | requestCookieMap = new CookieMap((HttpServletRequest) request); |
193 | |
} |
194 | 0 | return requestCookieMap; |
195 | |
} |
196 | |
|
197 | |
public Map getRequestHeaderMap() { |
198 | 0 | assertHttpServletRequest(); |
199 | 0 | if (requestHeaderMap == null) { |
200 | 0 | requestHeaderMap = new ServletRequestHeaderMap( |
201 | |
(HttpServletRequest) request); |
202 | |
} |
203 | 0 | return requestHeaderMap; |
204 | |
} |
205 | |
|
206 | |
public Map getRequestHeaderValuesMap() { |
207 | 0 | if (requestHeaderValuesMap == null) { |
208 | 0 | requestHeaderValuesMap = new ServletRequestHeaderValuesMap( |
209 | |
(HttpServletRequest) request); |
210 | |
} |
211 | 0 | return requestHeaderValuesMap; |
212 | |
} |
213 | |
|
214 | |
public Locale getRequestLocale() { |
215 | 0 | return request.getLocale(); |
216 | |
} |
217 | |
|
218 | |
public Iterator getRequestLocales() { |
219 | 0 | final Enumeration locales = request.getLocales(); |
220 | 0 | return ServletExternalContextUtil.getLocales(locales); |
221 | |
} |
222 | |
|
223 | |
public Map getRequestMap() { |
224 | 17 | if (requestMap == null) { |
225 | 5 | requestMap = new ServletRequestMap(request); |
226 | |
} |
227 | 17 | return requestMap; |
228 | |
} |
229 | |
|
230 | |
public Map getRequestParameterMap() { |
231 | 1 | if (requestParameterMap == null) { |
232 | 1 | requestParameterMap = new ServletRequestParameterMap(request); |
233 | |
} |
234 | 1 | return requestParameterMap; |
235 | |
} |
236 | |
|
237 | |
public Iterator getRequestParameterNames() { |
238 | 0 | final Enumeration paramNames = request.getParameterNames(); |
239 | 0 | return ServletExternalContextUtil.getRequestParameterNames(paramNames); |
240 | |
} |
241 | |
|
242 | |
public Map getRequestParameterValuesMap() { |
243 | 1 | if (requestParameterValuesMap == null) { |
244 | 1 | requestParameterValuesMap = new ServletRequestParameterValuesMap( |
245 | |
request); |
246 | |
} |
247 | 1 | return requestParameterValuesMap; |
248 | |
} |
249 | |
|
250 | |
public String getRequestPathInfo() { |
251 | 2 | return pathInfo; |
252 | |
} |
253 | |
|
254 | |
public String getRequestServletPath() { |
255 | 2 | return servletPath; |
256 | |
} |
257 | |
|
258 | |
public URL getResource(String path) throws MalformedURLException { |
259 | 0 | return context.getResource(path); |
260 | |
} |
261 | |
|
262 | |
public InputStream getResourceAsStream(String path) { |
263 | 0 | return context.getResourceAsStream(path); |
264 | |
} |
265 | |
|
266 | |
public Set getResourcePaths(String path) { |
267 | 0 | return context.getResourcePaths(path); |
268 | |
} |
269 | |
|
270 | |
public Object getResponse() { |
271 | 0 | return response; |
272 | |
} |
273 | |
|
274 | |
public Object getSession(boolean create) { |
275 | 0 | assertHttpServletRequest(); |
276 | 0 | HttpServletRequest httpRequest = (HttpServletRequest) request; |
277 | 0 | return httpRequest.getSession(create); |
278 | |
} |
279 | |
|
280 | |
public Map getSessionMap() { |
281 | 0 | if (sessionMap == null) { |
282 | 0 | HttpServletRequest httpRequest = (HttpServletRequest) request; |
283 | 0 | sessionMap = new HttpSessionMap(httpRequest); |
284 | |
} |
285 | 0 | return sessionMap; |
286 | |
} |
287 | |
|
288 | |
public Principal getUserPrincipal() { |
289 | 0 | assertHttpServletRequest(); |
290 | 0 | HttpServletRequest httpRequest = (HttpServletRequest) request; |
291 | 0 | return httpRequest.getUserPrincipal(); |
292 | |
} |
293 | |
|
294 | |
public boolean isUserInRole(String role) { |
295 | 0 | assertHttpServletRequest(); |
296 | 0 | HttpServletRequest httpRequest = (HttpServletRequest) request; |
297 | 0 | return httpRequest.isUserInRole(role); |
298 | |
} |
299 | |
|
300 | |
public void log(String message) { |
301 | 0 | AssertionUtil.assertNotNull("message is null.", message); |
302 | 0 | context.log(message); |
303 | 0 | logger.debug(message); |
304 | 0 | } |
305 | |
|
306 | |
public void log(String message, Throwable exception) { |
307 | 0 | AssertionUtil.assertNotNull("message", message); |
308 | 0 | AssertionUtil.assertNotNull("exception", exception); |
309 | 0 | context.log(message, exception); |
310 | 0 | logger.log(exception); |
311 | 0 | } |
312 | |
|
313 | |
public void redirect(String url) throws IOException { |
314 | 0 | assertHttpServletResponse(); |
315 | 0 | ServletExternalContextUtil.redirect(url, request, response); |
316 | 0 | } |
317 | |
|
318 | |
private void assertHttpServletRequest() { |
319 | 0 | if (!isHttpServletRequest) { |
320 | 0 | throw new IllegalStateException(); |
321 | |
} |
322 | 0 | } |
323 | |
|
324 | |
private void assertHttpServletResponse() { |
325 | 13 | if (!isHttpServletResponse) { |
326 | 0 | throw new IllegalStateException(); |
327 | |
} |
328 | 13 | } |
329 | |
|
330 | |
public void release() { |
331 | 0 | this.context = null; |
332 | 0 | this.request = null; |
333 | 0 | this.response = null; |
334 | 0 | this.servletPath = null; |
335 | 0 | this.pathInfo = null; |
336 | 0 | this.applicationMap = null; |
337 | 0 | this.initParameterMap = null; |
338 | 0 | this.sessionMap = null; |
339 | 0 | this.requestCookieMap = null; |
340 | 0 | this.requestParameterMap = null; |
341 | 0 | this.requestParameterValuesMap = null; |
342 | 0 | this.requestMap = null; |
343 | 0 | this.requestHeaderMap = null; |
344 | 0 | this.requestHeaderValuesMap = null; |
345 | 0 | } |
346 | |
|
347 | |
public void setEncodeUrlCustomizer(EncodeUrlCustomizer customizer) { |
348 | 7 | this.customizer = customizer; |
349 | 7 | } |
350 | |
|
351 | |
} |