001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.kernel.servlet.DynamicServletRequest;
018 import com.liferay.portal.kernel.util.JavaConstants;
019 import com.liferay.portal.util.PropsValues;
020
021 import java.util.ArrayList;
022 import java.util.Collections;
023 import java.util.Enumeration;
024 import java.util.HashSet;
025 import java.util.List;
026 import java.util.Set;
027
028 import javax.portlet.MimeResponse;
029 import javax.portlet.PortletRequest;
030
031 import javax.servlet.http.HttpServletRequest;
032
033
041 public class NamespaceServletRequest extends DynamicServletRequest {
042
043 static Set<String> reservedAttrs = new HashSet<String>();
044
045 static {
046 reservedAttrs.add(JavaConstants.JAVAX_PORTLET_CONFIG);
047 reservedAttrs.add(JavaConstants.JAVAX_PORTLET_PORTLET);
048 reservedAttrs.add(JavaConstants.JAVAX_PORTLET_REQUEST);
049 reservedAttrs.add(JavaConstants.JAVAX_PORTLET_RESPONSE);
050 reservedAttrs.add(JavaConstants.JAVAX_SERVLET_INCLUDE_CONTEXT_PATH);
051 reservedAttrs.add(JavaConstants.JAVAX_SERVLET_INCLUDE_PATH_INFO);
052 reservedAttrs.add(JavaConstants.JAVAX_SERVLET_INCLUDE_QUERY_STRING);
053 reservedAttrs.add(JavaConstants.JAVAX_SERVLET_INCLUDE_REQUEST_URI);
054 reservedAttrs.add(JavaConstants.JAVAX_SERVLET_INCLUDE_SERVLET_PATH);
055 reservedAttrs.add(MimeResponse.MARKUP_HEAD_ELEMENT);
056 reservedAttrs.add(PortletRequest.LIFECYCLE_PHASE);
057 }
058
059 public NamespaceServletRequest(
060 HttpServletRequest request, String attrNamespace,
061 String paramNamespace) {
062
063 this(request, attrNamespace, paramNamespace, true);
064 }
065
066 public NamespaceServletRequest(
067 HttpServletRequest request, String attrNamespace, String paramNamespace,
068 boolean inherit) {
069
070 super(request, inherit);
071
072 _attrNamespace = attrNamespace;
073 _paramNamespace = paramNamespace;
074 }
075
076 @Override
077 public Object getAttribute(String name) {
078 Object value = super.getAttribute(_attrNamespace + name);
079
080 if (value == null) {
081 value = super.getAttribute(name);
082 }
083
084 return value;
085 }
086
087 @Override
088 public Enumeration<String> getAttributeNames() {
089 List<String> names = new ArrayList<String>();
090
091 Enumeration<String> enu = super.getAttributeNames();
092
093 while (enu.hasMoreElements()) {
094 String name = enu.nextElement();
095
096 if (name.startsWith(_attrNamespace)) {
097 names.add(name.substring(_attrNamespace.length()));
098 }
099 else if (_isReservedParam(name)) {
100 names.add(name);
101 }
102 }
103
104 return Collections.enumeration(names);
105 }
106
107 @Override
108 public String getParameter(String name) {
109 if (name == null) {
110 throw new IllegalArgumentException();
111 }
112
113 String value = super.getParameter(name);
114
115 if (value == null) {
116 value = super.getParameter(_paramNamespace + name);
117 }
118
119 return value;
120 }
121
122 @Override
123 public void removeAttribute(String name) {
124 if (_isReservedParam(name)) {
125 super.removeAttribute(name);
126 }
127 else {
128 super.removeAttribute(_attrNamespace + name);
129 }
130 }
131
132 @Override
133 public void setAttribute(String name, Object value) {
134 if (_isReservedParam(name)) {
135 super.setAttribute(name, value);
136 }
137 else {
138 super.setAttribute(_attrNamespace + name, value);
139 }
140 }
141
142 public void setAttribute(
143 String name, Object value, boolean privateRequestAttribute) {
144
145 if (!privateRequestAttribute) {
146 super.setAttribute(name, value);
147 }
148 else {
149 setAttribute(name, value);
150 }
151 }
152
153 private boolean _isReservedParam(String name) {
154 if (reservedAttrs.contains(name)) {
155 return true;
156 }
157
158 for (String requestSharedAttribute :
159 PropsValues.REQUEST_SHARED_ATTRIBUTES) {
160
161 if (name.startsWith(requestSharedAttribute)) {
162 return true;
163 }
164 }
165
166 return false;
167 }
168
169 private String _attrNamespace;
170 private String _paramNamespace;
171
172 }