1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.pluto.core.impl;
21
22 import java.io.BufferedReader;
23 import java.util.Collections;
24 import java.util.Enumeration;
25 import java.util.HashSet;
26 import java.util.Iterator;
27 import java.util.Map;
28 import java.util.Set;
29 import java.util.Vector;
30
31 import javax.portlet.PortalContext;
32 import javax.portlet.PortletMode;
33 import javax.portlet.PortletPreferences;
34 import javax.portlet.PortletRequest;
35 import javax.portlet.PortletSession;
36 import javax.portlet.WindowState;
37 import javax.servlet.http.Cookie;
38 import javax.servlet.http.HttpSession;
39
40 import org.apache.pluto.core.InternalPortletRequest;
41 import org.apache.pluto.factory.PortletObjectAccess;
42 import org.apache.pluto.om.common.SecurityRoleRef;
43 import org.apache.pluto.om.common.SecurityRoleRefSet;
44 import org.apache.pluto.om.entity.PortletEntity;
45 import org.apache.pluto.om.portlet.PortletDefinition;
46 import org.apache.pluto.om.window.PortletWindow;
47 import org.apache.pluto.services.information.DynamicInformationProvider;
48 import org.apache.pluto.services.information.InformationProviderAccess;
49 import org.apache.pluto.services.property.PropertyManager;
50 import org.apache.pluto.util.Enumerator;
51 import org.apache.pluto.util.NamespaceMapperAccess;
52 import org.apache.pluto.util.StringUtils;
53
54 public abstract class PortletRequestImpl extends
55 javax.servlet.http.HttpServletRequestWrapper implements PortletRequest,
56 InternalPortletRequest {
57
58 private PortletWindow portletWindow;
59
60 /***
61 * Holds the portlet session
62 */
63 private PortletSession portletSession;
64
65 private DynamicInformationProvider provider;
66
67 /***
68 * true if the HTTP-Body has been accessed
69 */
70 private boolean bodyAccessed;
71
72 /***
73 * true if we are in an include call
74 */
75 private boolean included;
76
77 public PortletRequestImpl(PortletWindow portletWindow,
78 javax.servlet.http.HttpServletRequest servletRequest) {
79 super(servletRequest);
80 this.portletWindow = portletWindow;
81
82 provider = InformationProviderAccess
83 .getDynamicProvider(_getHttpServletRequest());
84 }
85
86 public boolean isWindowStateAllowed(WindowState state) {
87 return provider.isWindowStateAllowed(state);
88 }
89
90 public boolean isPortletModeAllowed(PortletMode portletMode) {
91
92 boolean supported = provider.isPortletModeAllowed(portletMode);
93
94
95 if (supported) {
96 supported = PortletModeHelper.isPortletModeAllowedByPortlet(
97 portletWindow, portletMode);
98 }
99
100 return supported;
101 }
102
103 public PortletMode getPortletMode() {
104 return provider.getPortletMode(portletWindow);
105 }
106
107 public WindowState getWindowState() {
108 return provider.getWindowState(portletWindow);
109 }
110
111
112 public abstract PortletPreferences getPreferences();
113
114 public PortletSession getPortletSession() {
115 return getPortletSession(true);
116 }
117
118 public PortletSession getPortletSession(boolean create) {
119
120 javax.servlet.http.HttpSession httpSession = this
121 ._getHttpServletRequest().getSession(false);
122
123 if ((portletSession != null) && (httpSession == null)) {
124 portletSession = null;
125 } else if (httpSession != null) {
126 create = true;
127 }
128
129 if (create && portletSession == null) {
130 httpSession = this._getHttpServletRequest().getSession(create);
131 if (httpSession != null) {
132 portletSession = PortletObjectAccess.getPortletSession(
133 portletWindow, httpSession);
134 }
135 }
136
137 return portletSession;
138 }
139
140 public String getProperty(String name) {
141 if (name == null) {
142 throw new IllegalArgumentException("Attribute name == null");
143 }
144
145
146 String prop = this._getHttpServletRequest().getHeader(name);
147 if (prop == null) {
148
149 Map map = PropertyManager.getRequestProperties(portletWindow, this
150 ._getHttpServletRequest());
151 if (map != null) {
152 String[] properties = (String[]) map.get(name);
153 if ((properties != null) && (properties.length > 0)) {
154 prop = properties[0];
155 }
156 }
157 }
158
159 return prop;
160 }
161
162 public Enumeration getProperties(String name) {
163 if (name == null) {
164 throw new IllegalArgumentException("Property name == null");
165 }
166
167 Set v = new HashSet();
168
169
170 Enumeration props = this._getHttpServletRequest().getHeaders(name);
171 if (props != null) {
172 while (props.hasMoreElements()) {
173 v.add(props.nextElement());
174 }
175 }
176
177
178 Map map = PropertyManager.getRequestProperties(portletWindow, this
179 ._getHttpServletRequest());
180 if (map != null) {
181 String[] properties = (String[]) map.get(name);
182
183 if (properties != null) {
184
185 for (int i = 0; i < properties.length; i++) {
186 v.add(properties[i]);
187 }
188 }
189 }
190
191 return new Enumerator(v.iterator());
192 }
193
194 public Enumeration getPropertyNames() {
195 Set v = new HashSet();
196
197
198 Map map = PropertyManager.getRequestProperties(portletWindow, this
199 ._getHttpServletRequest());
200 if (map != null) {
201 v.addAll(map.keySet());
202 }
203
204
205 Enumeration props = this._getHttpServletRequest().getHeaderNames();
206 if (props != null) {
207 while (props.hasMoreElements()) {
208 v.add(props.nextElement());
209 }
210 }
211
212 return new Enumerator(v.iterator());
213 }
214
215 public PortalContext getPortalContext() {
216 return PortletObjectAccess.getPortalContext();
217 }
218
219 public String getAuthType() {
220 return this._getHttpServletRequest().getAuthType();
221 }
222
223 public String getContextPath() {
224 return portletWindow.getPortletEntity().getPortletDefinition()
225 .getPortletApplicationDefinition()
226 .getWebApplicationDefinition().getContextRoot();
227
228
229
230 }
231
232 public String getRemoteUser() {
233 return this._getHttpServletRequest().getRemoteUser();
234 }
235
236 public java.security.Principal getUserPrincipal() {
237 return this._getHttpServletRequest().getUserPrincipal();
238 }
239
240 /***
241 * Determines whether a user is mapped to the specified role. As specified
242 * in PLT-20-3, we must reference the <security-role-ref> mappings
243 * within the deployment descriptor. If no mapping is available, then, and
244 * only then, do we check use the actual role name specified against the web
245 * application deployment descriptor.
246 *
247 * @param roleName
248 * the name of the role
249 * @return true if it is determined the user has the given role.
250 *
251 */
252 public boolean isUserInRole(String roleName) {
253 PortletEntity entity = portletWindow.getPortletEntity();
254 PortletDefinition def = entity.getPortletDefinition();
255 SecurityRoleRefSet set = def.getInitSecurityRoleRefSet();
256 SecurityRoleRef ref = set.get(roleName);
257
258 String link = null;
259 if (ref != null && ref.getRoleLink() != null) {
260 link = ref.getRoleLink();
261 } else {
262 link = roleName;
263 }
264
265 return this._getHttpServletRequest().isUserInRole(link);
266 }
267
268 public Object getAttribute(String name) {
269 if (name == null) {
270 throw new IllegalArgumentException("Attribute name == null");
271 }
272
273 Object attribute = this._getHttpServletRequest().getAttribute(
274 NamespaceMapperAccess.getNamespaceMapper().encode(
275 portletWindow.getId(), name));
276
277 if (attribute == null) {
278 attribute = this._getHttpServletRequest().getAttribute(name);
279 }
280 return attribute;
281 }
282
283 public Enumeration getAttributeNames() {
284 Enumeration attributes = this._getHttpServletRequest()
285 .getAttributeNames();
286
287 Vector portletAttributes = new Vector();
288
289 while (attributes.hasMoreElements()) {
290 String attribute = (String) attributes.nextElement();
291
292 String portletAttribute = NamespaceMapperAccess
293 .getNamespaceMapper().decode(portletWindow.getId(),
294 attribute);
295
296 if (portletAttribute != null) {
297 portletAttributes.add(portletAttribute);
298 }
299 else {
300 portletAttributes.add(attribute);
301 }
302 }
303 return portletAttributes.elements();
304 }
305
306 public String getParameter(String name) {
307 if (name == null) {
308 throw new IllegalArgumentException("Parameter name == null");
309 }
310
311 bodyAccessed = true;
312
313 Map parameters = getParameterMap();
314 String[] values = (String[]) parameters.get(name);
315 if (values != null) {
316 return values[0];
317 }
318 return null;
319 }
320
321 public java.util.Enumeration getParameterNames() {
322 bodyAccessed = true;
323
324 Map parameters = getParameterMap();
325 return Collections.enumeration(parameters.keySet());
326 }
327
328 public String[] getParameterValues(String name) {
329 if (name == null) {
330 throw new IllegalArgumentException("Parameter name == null");
331 }
332
333 bodyAccessed = true;
334
335 String[] values = (String[]) getParameterMap().get(name);
336 if (values != null)
337 values = StringUtils.copy(values);
338 return values;
339 }
340
341 public Map getParameterMap() {
342 bodyAccessed = true;
343 Map result =
344 StringUtils.copyParameters(
345 this._getHttpServletRequest().getParameterMap()
346 );
347 return result;
348 }
349
350 public boolean isSecure() {
351 return this._getHttpServletRequest().isSecure();
352 }
353
354 public void setAttribute(String name, Object o) {
355 if (name == null) {
356 throw new IllegalArgumentException("Attribute name == null");
357 }
358
359 if (o == null) {
360 this.removeAttribute(name);
361 } else if (isNameReserved(name)) {
362
363 _getHttpServletRequest().setAttribute(name, o);
364 } else {
365 this._getHttpServletRequest().setAttribute(
366 NamespaceMapperAccess.getNamespaceMapper().encode(
367 portletWindow.getId(), name), o);
368 }
369 }
370
371 public void removeAttribute(String name) {
372 if (name == null) {
373 throw new IllegalArgumentException("Attribute name == null");
374 }
375 if (isNameReserved(name)) {
376
377 _getHttpServletRequest().removeAttribute(name);
378 } else {
379
380 this._getHttpServletRequest().removeAttribute(
381 NamespaceMapperAccess.getNamespaceMapper().encode(
382 portletWindow.getId(), name));
383 }
384 }
385
386 public String getRequestedSessionId() {
387 return this._getHttpServletRequest().getRequestedSessionId();
388 }
389
390 public boolean isRequestedSessionIdValid() {
391 return this._getHttpServletRequest().isRequestedSessionIdValid();
392 }
393
394 public String getResponseContentType() {
395
396 String responseContentType = provider.getResponseContentType();
397
398 return responseContentType;
399 }
400
401 public Enumeration getResponseContentTypes() {
402
403 Iterator responseContentTypes = provider.getResponseContentTypes();
404
405 return new Enumerator(responseContentTypes);
406 }
407
408 public java.util.Locale getLocale() {
409 return this._getHttpServletRequest().getLocale();
410 }
411
412 public Enumeration getLocales() {
413 return this._getHttpServletRequest().getLocales();
414 }
415
416 public String getScheme() {
417 return this._getHttpServletRequest().getScheme();
418 }
419
420 public String getServerName() {
421 return this._getHttpServletRequest().getServerName();
422 }
423
424 public int getServerPort() {
425 return this._getHttpServletRequest().getServerPort();
426 }
427
428
429
430
431
432 public void lateInit(
433 javax.servlet.http.HttpServletRequest webModuleServletRequest) {
434 this.setRequest(webModuleServletRequest);
435 }
436
437 public PortletWindow getInternalPortletWindow() {
438 return portletWindow;
439 }
440
441 public void setIncluded(boolean included) {
442 this.included = included;
443 }
444
445 public boolean isIncluded() {
446 return included;
447 }
448
449
450
451
452
453 private javax.servlet.http.HttpServletRequest _getHttpServletRequest() {
454 return (javax.servlet.http.HttpServletRequest) super.getRequest();
455 }
456
457 /***
458 * Is this attribute name a reserved name (by the J2EE spec)?. Reserved
459 * names begin with "java." or "javax.".
460 */
461 private boolean isNameReserved(String name) {
462 return name.startsWith("java.") || name.startsWith("javax.");
463 }
464
465
466
467
468
469 public java.lang.String getCharacterEncoding() {
470 return this._getHttpServletRequest().getCharacterEncoding();
471 }
472
473 public java.lang.String getContentType() {
474 if (included) {
475 return null;
476 } else {
477 return this._getHttpServletRequest().getContentType();
478 }
479 }
480
481 public int getContentLength() {
482 if (included) {
483 return 0;
484 } else {
485 return _getHttpServletRequest().getContentLength();
486 }
487 }
488
489 public BufferedReader getReader()
490 throws java.io.UnsupportedEncodingException, java.io.IOException {
491 if (included) {
492 return null;
493 } else {
494
495
496 BufferedReader reader = _getHttpServletRequest().getReader();
497
498 bodyAccessed = true;
499
500 return reader;
501 }
502 }
503
504 public Cookie[] getCookies() {
505 return this._getHttpServletRequest().getCookies();
506 }
507
508 public long getDateHeader(String name) {
509 return this._getHttpServletRequest().getDateHeader(name);
510 }
511
512 public String getHeader(String name) {
513 return this._getHttpServletRequest().getHeader(name);
514 }
515
516 public Enumeration getHeaders(String name) {
517 return this._getHttpServletRequest().getHeaders(name);
518 }
519
520 public Enumeration getHeaderNames() {
521 return this._getHttpServletRequest().getHeaderNames();
522 }
523
524 public int getIntHeader(String name) {
525 return this._getHttpServletRequest().getIntHeader(name);
526
527 }
528
529 public String getPathInfo() {
530 String attr = (String) super
531 .getAttribute("javax.servlet.include.path_info");
532 return (attr != null) ? attr : super.getPathInfo();
533 }
534
535 public String getQueryString() {
536 String attr = (String) super
537 .getAttribute("javax.servlet.include.query_string");
538 return (attr != null) ? attr : super.getQueryString();
539 }
540
541 public String getPathTranslated() {
542 return null;
543 }
544
545 public String getRequestURI() {
546 String attr = (String) super
547 .getAttribute("javax.servlet.include.request_uri");
548 return (attr != null) ? attr : super.getRequestURI();
549 }
550
551 public StringBuffer getRequestURL() {
552 return null;
553 }
554
555 public String getServletPath() {
556 String attr = (String) super
557 .getAttribute("javax.servlet.include.servlet_path");
558 return (attr != null) ? attr : super.getServletPath();
559 }
560
561 public HttpSession getSession(boolean create) {
562 return this._getHttpServletRequest().getSession(true);
563 }
564
565 public HttpSession getSession() {
566 return this._getHttpServletRequest().getSession();
567 }
568
569 public String getMethod() {
570
571
572 if (included) {
573 return "GET";
574 } else {
575 return this._getHttpServletRequest().getMethod();
576 }
577 }
578
579 public boolean isRequestedSessionIdFromURL() {
580
581 return this._getHttpServletRequest().isRequestedSessionIdFromURL();
582 }
583
584 /***
585 * @deprecated use isRequestedSessionIdFromURL instead
586 */
587 public boolean isRequestedSessionIdFromUrl() {
588 return this._getHttpServletRequest().isRequestedSessionIdFromUrl();
589 }
590
591 public boolean isRequestedSessionIdFromCookie() {
592 return this._getHttpServletRequest().isRequestedSessionIdFromCookie();
593 }
594
595 public String getProtocol() {
596 return null;
597 }
598
599 public String getRemoteAddr() {
600 return null;
601 }
602
603 public String getRemoteHost() {
604 return null;
605 }
606
607 public String getRealPath(String path) {
608 return null;
609 }
610
611 public void setCharacterEncoding(String env)
612 throws java.io.UnsupportedEncodingException {
613 if (bodyAccessed) {
614 throw new IllegalStateException(
615 "This method must not be called after the HTTP-Body was accessed !");
616 }
617
618 this._getHttpServletRequest().setCharacterEncoding(env);
619 return;
620 }
621
622 public javax.servlet.ServletInputStream getInputStream()
623 throws java.io.IOException {
624 if (included) {
625 return null;
626 } else {
627
628
629 javax.servlet.ServletInputStream stream = _getHttpServletRequest()
630 .getInputStream();
631
632 bodyAccessed = true;
633
634 return stream;
635 }
636 }
637
638 public javax.servlet.RequestDispatcher getRequestDispatcher(String path) {
639 return this._getHttpServletRequest().getRequestDispatcher(path);
640 }
641 }