1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.context;
35
36 import info.magnolia.cms.beans.runtime.MultipartForm;
37 import info.magnolia.cms.core.AggregationState;
38 import info.magnolia.cms.security.Security;
39 import info.magnolia.objectfactory.Components;
40
41 import javax.servlet.ServletContext;
42 import javax.servlet.ServletException;
43 import javax.servlet.ServletRequest;
44 import javax.servlet.http.HttpServletRequest;
45 import javax.servlet.http.HttpServletResponse;
46 import javax.servlet.http.HttpSession;
47 import javax.servlet.jsp.PageContext;
48 import java.io.IOException;
49 import java.io.Writer;
50 import java.util.Enumeration;
51 import java.util.HashMap;
52 import java.util.Map;
53 import java.util.Stack;
54
55
56
57
58
59
60
61 public class WebContextImpl extends UserContextImpl implements WebContext {
62
63 private static final long serialVersionUID = 222L;
64
65 private HttpServletRequest request;
66
67 private HttpServletResponse response;
68
69 private ServletContext servletContext;
70
71
72
73
74 private PageContext pageContext;
75
76 protected AggregationState aggregationState;
77
78 private Stack<HttpServletResponse> responseStack = new Stack<HttpServletResponse>();
79
80 private Stack<HttpServletRequest> requestStack = new Stack<HttpServletRequest>();
81
82
83
84
85 public WebContextImpl() {
86 }
87
88 public void init(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) {
89 this.request = request;
90 this.response = response;
91 this.servletContext = servletContext;
92
93
94 setAttributeStrategy(new RequestAttributeStrategy(this));
95 setRepositoryStrategy(new DefaultRepositoryStrategy(this));
96 }
97
98 public AggregationState getAggregationState() {
99 if (aggregationState == null) {
100 aggregationState = Components.getComponentProvider().newInstance(AggregationState.class);
101 }
102 return aggregationState;
103 }
104
105
106
107
108 public void resetAggregationState() {
109 getAggregationState().resetURIs();
110 }
111
112
113
114
115
116 public MultipartForm getPostedForm() {
117 return (MultipartForm) getAttribute(MultipartForm.REQUEST_ATTRIBUTE_NAME, LOCAL_SCOPE);
118 }
119
120
121
122
123
124 public String getParameter(String name) {
125 return this.request.getParameter(name);
126 }
127
128
129
130
131
132 public String[] getParameterValues(String name) {
133 return this.request.getParameterValues(name);
134 }
135
136
137
138
139
140
141 public Map<String, String> getParameters() {
142 Map<String, String> map = new HashMap<String, String>();
143 Enumeration<String> paramEnum = this.request.getParameterNames();
144 while (paramEnum.hasMoreElements()) {
145 final String name = paramEnum.nextElement();
146 map.put(name, this.request.getParameter(name));
147 }
148 return map;
149 }
150
151
152
153
154
155 public HttpServletRequest getRequest() {
156 return this.request;
157 }
158
159 public HttpServletResponse getResponse() {
160 return response;
161 }
162
163 public String getContextPath() {
164 return this.request.getContextPath();
165 }
166
167
168
169
170
171 public void include(final String path, final Writer out) throws ServletException, IOException {
172 try {
173 final ServletRequest requestToUse =
174 final HttpServletResponse responseToUse =
175 final WriterResponseWrapper wrappedResponse = new WriterResponseWrapper(responseToUse, out);
176
177 requestToUse.getRequestDispatcher(path).include(requestToUse, wrappedResponse);
178 }
179 catch (ServletException e) {
180 throw new RuntimeException(e);
181 }
182 catch (IOException e) {
183 throw new RuntimeException(e);
184 }
185 }
186
187
188
189
190 public PageContext getPageContext() {
191 return pageContext;
192 }
193
194
195
196
197 public void setPageContext(PageContext pageContext) {
198 this.pageContext = pageContext;
199 }
200
201
202
203
204 public ServletContext getServletContext() {
205 return servletContext;
206 }
207
208 public void login() {
209 setRepositoryStrategy(new DefaultRepositoryStrategy(this));
210 }
211
212
213
214
215
216 public void logout() {
217 releaseJCRSessions();
218
219 HttpSession session = this.request.getSession(false);
220 if (session != null) {
221 session.invalidate();
222 }
223 login(Security.getAnonymousUser());
224 }
225
226
227
228
229 public void release() {
230 releaseJCRSessions();
231 this.request = null;
232 this.response = null;
233 }
234
235 protected void releaseJCRSessions() {
236 getRepositoryStrategy().release();
237 }
238
239
240
241
242 public void pop() {
243 request = requestStack.pop();
244 response = responseStack.pop();
245 }
246
247
248
249
250 public void push(HttpServletRequest request, HttpServletResponse response) {
251 requestStack.push(this.request);
252 this.request = request;
253 responseStack.push(this.response);
254 this.response = response;
255 }
256 }