1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.orchestra.frameworkAdapter.basic;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.apache.myfaces.orchestra.conversation.ConversationMessager;
24 import org.apache.myfaces.orchestra.conversation.basic.LogConversationMessager;
25 import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
26 import org.apache.myfaces.orchestra.lib._ClassUtils;
27
28 import javax.servlet.ServletContext;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33 import java.io.IOException;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 public class BasicFrameworkAdapter extends FrameworkAdapter
60 {
61 private final static String ISE_MESSAGE="No request/response data available";
62
63 private final static ThreadLocal httpServletRequestThreadLocal = new ThreadLocal();
64 private final static ThreadLocal httpServletResponseThreadLocal = new ThreadLocal();
65
66 private final Log log = LogFactory.getLog(BasicFrameworkAdapter.class);
67
68 private final ServletContext servletContext;
69 private final String conversationMessagerClass;
70
71 public BasicFrameworkAdapter(ServletContext context, String conversationMessagerClass)
72 {
73 servletContext = context;
74 this.conversationMessagerClass = conversationMessagerClass;
75 }
76
77 protected ConversationMessager createConversationMessager()
78 {
79 if (conversationMessagerClass == null)
80 {
81 return createDefaultConversationMessager();
82 }
83
84
85
86 Object instance = getBean(conversationMessagerClass);
87 if (instance instanceof ConversationMessager)
88 {
89 return (ConversationMessager) instance;
90 }
91
92
93 return (ConversationMessager) _ClassUtils.newInstance(conversationMessagerClass);
94 }
95
96 protected ConversationMessager createDefaultConversationMessager()
97 {
98 return new LogConversationMessager();
99 }
100
101 private HttpServletRequest getRequest()
102 {
103 return (HttpServletRequest) httpServletRequestThreadLocal.get();
104 }
105
106 private HttpServletResponse getResponse()
107 {
108 return (HttpServletResponse) httpServletResponseThreadLocal.get();
109 }
110
111 public void beginRequest(ServletRequest req, ServletResponse rsp)
112 {
113 log.debug("Beginning request");
114 if (req instanceof HttpServletRequest)
115 {
116 httpServletRequestThreadLocal.set(req);
117 }
118 if (rsp instanceof HttpServletResponse)
119 {
120 httpServletResponseThreadLocal.set(rsp);
121 }
122
123 FrameworkAdapter.setCurrentInstance(this);
124 }
125
126 public void endRequest()
127 {
128 log.debug("Ending request");
129 FrameworkAdapter.setCurrentInstance(null);
130 httpServletRequestThreadLocal.set(null);
131 httpServletResponseThreadLocal.set(null);
132 }
133
134 public String getInitParameter(String key)
135 {
136 return servletContext.getInitParameter(key);
137 }
138
139 public Object getRequestParameterAttribute(String key)
140 {
141 HttpServletRequest request = getRequest();
142 if (request != null)
143 {
144 return request.getParameter(key);
145 }
146
147 throw new IllegalStateException(ISE_MESSAGE);
148 }
149
150 public boolean containsRequestParameterAttribute(String key)
151 {
152 HttpServletRequest request = getRequest();
153 if (request != null)
154 {
155 return request.getParameter(key) != null;
156 }
157
158 throw new IllegalStateException(ISE_MESSAGE);
159 }
160
161 public Object getRequestAttribute(String key)
162 {
163 HttpServletRequest request = getRequest();
164 if (request != null)
165 {
166 return request.getAttribute(key);
167 }
168
169 throw new IllegalStateException(ISE_MESSAGE);
170 }
171
172 public void setRequestAttribute(String key, Object value)
173 {
174 HttpServletRequest request = getRequest();
175 if (request != null)
176 {
177 request.setAttribute(key, value);
178 return;
179 }
180
181 throw new IllegalStateException(ISE_MESSAGE);
182 }
183
184 public boolean containsRequestAttribute(String key)
185 {
186 HttpServletRequest request = getRequest();
187 if (request != null)
188 {
189 return request.getAttribute(key) != null;
190 }
191
192 throw new IllegalStateException(ISE_MESSAGE);
193 }
194
195 public Object getSessionAttribute(String key)
196 {
197 HttpServletRequest request = getRequest();
198 if (request != null && request.getSession(true) != null)
199 {
200 return request.getSession(true).getAttribute(key);
201 }
202
203 throw new IllegalStateException(ISE_MESSAGE);
204 }
205
206 public void setSessionAttribute(String key, Object value)
207 {
208 HttpServletRequest request = getRequest();
209 if (request != null && request.getSession(true) != null)
210 {
211 request.getSession(true).setAttribute(key, value);
212 return;
213 }
214
215 }
216
217 public boolean containsSessionAttribute(String key)
218 {
219 HttpServletRequest request = getRequest();
220 if (request != null && request.getSession(true) != null)
221 {
222 return request.getSession(true).getAttribute(key) != null;
223 }
224
225 throw new IllegalStateException(ISE_MESSAGE);
226 }
227
228 protected String getRequestContextPath()
229 {
230 HttpServletRequest request = getRequest();
231 if (request != null)
232 {
233 return request.getContextPath();
234 }
235
236 throw new IllegalStateException(ISE_MESSAGE);
237 }
238
239 public void redirect(String url) throws IOException
240 {
241 StringBuffer redir = new StringBuffer();
242 if (url.startsWith("/"))
243 {
244 redir.append(getRequestContextPath());
245 }
246 redir.append(url);
247
248 HttpServletResponse rsp = getResponse();
249 String dstUrl = rsp.encodeRedirectURL(redir.toString());
250 rsp.sendRedirect(dstUrl);
251 }
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267 public Object getBean(String name)
268 {
269 Object obj;
270
271 obj = getRequestAttribute(name);
272 if (obj != null)
273 {
274 return obj;
275 }
276
277 obj = getSessionAttribute(name);
278 if (obj != null)
279 {
280 return obj;
281 }
282
283
284
285 return null;
286 }
287
288
289
290
291
292
293
294
295 public void invokeNavigation(String navigationName) throws IOException
296 {
297 redirect(navigationName);
298 }
299 }