Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
WebContext |
|
| 2.1818181818181817;2.182 |
1 | /* | |
2 | * Copyright (C) 1998-2000 Semiotek Inc. All Rights Reserved. | |
3 | * | |
4 | * Redistribution and use in source and binary forms, with or without | |
5 | * modification, are permitted under the terms of either of the following | |
6 | * Open Source licenses: | |
7 | * | |
8 | * The GNU General Public License, version 2, or any later version, as | |
9 | * published by the Free Software Foundation | |
10 | * (http://www.fsf.org/copyleft/gpl.html); | |
11 | * | |
12 | * or | |
13 | * | |
14 | * The Semiotek Public License (http://webmacro.org/LICENSE.) | |
15 | * | |
16 | * This software is provided "as is", with NO WARRANTY, not even the | |
17 | * implied warranties of fitness to purpose, or merchantability. You | |
18 | * assume all risks and liabilities associated with its use. | |
19 | * | |
20 | * See www.webmacro.org for more information on the WebMacro project. | |
21 | * | |
22 | * @author Marcel Huijkman | |
23 | * | |
24 | * @version 15-07-2002 | |
25 | * | |
26 | */ | |
27 | ||
28 | ||
29 | package org.webmacro.servlet; | |
30 | ||
31 | import org.slf4j.Logger; | |
32 | import org.slf4j.LoggerFactory; | |
33 | ||
34 | import org.webmacro.Broker; | |
35 | import org.webmacro.Context; | |
36 | import org.webmacro.engine.Block; | |
37 | import org.webmacro.util.Bag; | |
38 | ||
39 | import javax.servlet.http.Cookie; | |
40 | import javax.servlet.http.HttpServletRequest; | |
41 | import javax.servlet.http.HttpServletResponse; | |
42 | import javax.servlet.http.HttpSession; | |
43 | ||
44 | /** | |
45 | * This is an implementation of the WebContext interface. It has the | |
46 | * ability to hook in commonly re-usable utilities via the configuraiton | |
47 | * file for the Broker. These commonly re-usable utilities are then made | |
48 | * available for use in the context. They include: Cookie, Form, FormList, | |
49 | * and several others--see the WebMacro.properties file for the actual | |
50 | * list, and a description of what's been loaded. | |
51 | * <p> | |
52 | * This class is made to be prototyped. You create | |
53 | * a prototypical instance of the WebContext containing all the desired | |
54 | * tools and a broker. You then use the newInstance(req,resp) method | |
55 | * to create an instance of the WebContext to use versus a particular | |
56 | * request. | |
57 | * <p> | |
58 | * IMPLEMENTATION NOTE: If you subclass this method you must provide a | |
59 | * sensible implementation of the clone() method. This class uses clone() | |
60 | * to create instances of the prototype in the newInstance method. You | |
61 | * should also be sure and implement the clear() method as well. | |
62 | * <p> | |
63 | */ | |
64 | public class WebContext extends Context | |
65 | { | |
66 | ||
67 | /** | |
68 | * Logger configuration errors, context errors, etc. | |
69 | */ | |
70 | 2 | static Logger _log = LoggerFactory.getLogger(WebContext.class); |
71 | ||
72 | /** | |
73 | * The request for this http connect | |
74 | */ | |
75 | 1075 | private HttpServletRequest _request = null; |
76 | ||
77 | /** | |
78 | * The response for this http connect | |
79 | */ | |
80 | 1075 | private HttpServletResponse _response = null; |
81 | ||
82 | // property interface fields that are lazily set, non-final, and private | |
83 | ||
84 | /** | |
85 | * Construct a new WebContext. The WebContext will have WebContextTools | |
86 | * in addition to the ordinary ContextTools loaded from config. | |
87 | */ | |
88 | public WebContext (Broker broker, HttpServletRequest req, HttpServletResponse resp) | |
89 | { | |
90 | 1075 | super(broker); |
91 | 1075 | _request = req; |
92 | 1075 | _response = resp; |
93 | 1075 | } |
94 | ||
95 | ||
96 | /** | |
97 | * Clear a WebContext of it's non-shared data | |
98 | */ | |
99 | public void clear () | |
100 | { | |
101 | 0 | _request = null; |
102 | 0 | _response = null; |
103 | 0 | super.clear(); |
104 | 0 | } |
105 | ||
106 | /** | |
107 | * The HttpServletRequest object which contains information | |
108 | * provided by the HttpServlet superclass about the Request. | |
109 | * Much of this data is provided in other forms later on; | |
110 | * those interfaces get their data from this object. | |
111 | * In particular the form data has already been parsed. | |
112 | * <p> | |
113 | * @see HttpServletRequest | |
114 | */ | |
115 | public final HttpServletRequest getRequest () | |
116 | { | |
117 | 1128 | return _request; |
118 | } | |
119 | ||
120 | /** | |
121 | * The HttpServletResponse object which contains information | |
122 | * about the response we are going to send back. Many of these | |
123 | * services are provided through other interfaces here as well; | |
124 | * they are built on top of this object. | |
125 | * <p> | |
126 | * @see HttpServletResponse | |
127 | */ | |
128 | public final HttpServletResponse getResponse () | |
129 | { | |
130 | 32 | return _response; |
131 | } | |
132 | ||
133 | // CONVENIENCE METHODS | |
134 | ||
135 | /** | |
136 | * Try to get the value of a form variable from the request | |
137 | */ | |
138 | final public Object getPossibleForm (String strKey) | |
139 | { | |
140 | try | |
141 | { | |
142 | 0 | Form obForm = (Form) getProperty("Form"); |
143 | 0 | return obForm.getPossibleForm(strKey); |
144 | } | |
145 | 0 | catch (Exception e) |
146 | { | |
147 | 0 | _log.error("Could not load Form tool", e); |
148 | 0 | return null; |
149 | } | |
150 | } | |
151 | ||
152 | /** | |
153 | * Get the value of a form variable from the request | |
154 | */ | |
155 | final public String getForm (String field) | |
156 | { | |
157 | try | |
158 | { | |
159 | 4960 | Bag ct = (Bag) getProperty("Form"); |
160 | 4960 | return (String) ct.get(field); |
161 | } | |
162 | 0 | catch (Exception e) |
163 | { | |
164 | 0 | _log.error("Could not load Form tool", e); |
165 | 0 | return null; |
166 | } | |
167 | } | |
168 | ||
169 | /** | |
170 | * Get the value of a form variable from the request as an array | |
171 | */ | |
172 | final public String[] getFormList (String field) | |
173 | { | |
174 | try | |
175 | { | |
176 | 0 | Bag ct = (Bag) getProperty("FormList"); |
177 | 0 | return (String[]) ct.get(field); |
178 | } | |
179 | 0 | catch (Exception e) |
180 | { | |
181 | 0 | _log.error("Could not load FormList tool", e); |
182 | 0 | return null; |
183 | } | |
184 | } | |
185 | ||
186 | /** | |
187 | * Get the CGI Tool | |
188 | */ | |
189 | final public CGI_Impersonator getCGI () | |
190 | { | |
191 | try | |
192 | { | |
193 | 0 | return (CGI_Impersonator) getProperty("CGI"); |
194 | } | |
195 | 0 | catch (Exception e) |
196 | { | |
197 | 0 | _log.error("Could not load CGI tool", e); |
198 | 0 | return null; |
199 | } | |
200 | } | |
201 | ||
202 | /** | |
203 | * get a cookie from the request | |
204 | */ | |
205 | final public Cookie getCookie (String name) | |
206 | { | |
207 | try | |
208 | { | |
209 | 0 | CookieJar cj = (CookieJar) getProperty("Cookie"); |
210 | 0 | return (Cookie) cj.get(name); |
211 | } | |
212 | 0 | catch (Exception e) |
213 | { | |
214 | 0 | _log.error("Could not load Cookie tool", e); |
215 | 0 | return null; |
216 | } | |
217 | } | |
218 | ||
219 | /** | |
220 | * send a cookie in the response | |
221 | */ | |
222 | final public void setCookie (String name, String value) | |
223 | { | |
224 | try | |
225 | { | |
226 | 0 | CookieJar cj = (CookieJar) getProperty("Cookie"); |
227 | 0 | cj.set(name, value); |
228 | } | |
229 | 0 | catch (Exception e) |
230 | { | |
231 | 0 | _log.error("Could not load Cookie tool", e); |
232 | 0 | } |
233 | 0 | } |
234 | ||
235 | /** | |
236 | * get the session object | |
237 | */ | |
238 | final public HttpSession getSession () | |
239 | { | |
240 | try | |
241 | { | |
242 | 104 | return (HttpSession) getProperty("Session"); |
243 | } | |
244 | 0 | catch (Exception e) |
245 | { | |
246 | 0 | _log.error("Could not load Session tool", e); |
247 | 0 | return null; |
248 | } | |
249 | } | |
250 | } |