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