001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.kernel.util.JavaConstants;
018 import com.liferay.portal.util.PropsValues;
019 import com.liferay.util.servlet.DynamicServletRequest;
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(
098 name.substring(_attrNamespace.length(), name.length()));
099 }
100 else if (_isReservedParam(name)) {
101 names.add(name);
102 }
103 }
104
105 return Collections.enumeration(names);
106 }
107
108 @Override
109 public String getParameter(String name) {
110 if (name == null) {
111 throw new IllegalArgumentException();
112 }
113
114 String value = super.getParameter(name);
115
116 if (value == null) {
117 value = super.getParameter(_paramNamespace + name);
118 }
119
120 return value;
121 }
122
123 @Override
124 public void removeAttribute(String name) {
125 if (_isReservedParam(name)) {
126 super.removeAttribute(name);
127 }
128 else {
129 super.removeAttribute(_attrNamespace + name);
130 }
131 }
132
133 @Override
134 public void setAttribute(String name, Object value) {
135 if (_isReservedParam(name)) {
136 super.setAttribute(name, value);
137 }
138 else {
139 super.setAttribute(_attrNamespace + name, value);
140 }
141 }
142
143 public void setAttribute(
144 String name, Object value, boolean privateRequestAttribute) {
145
146 if (!privateRequestAttribute) {
147 super.setAttribute(name, value);
148 }
149 else {
150 setAttribute(name, value);
151 }
152 }
153
154 private boolean _isReservedParam(String name) {
155 if (reservedAttrs.contains(name)) {
156 return true;
157 }
158 else {
159 for (String requestSharedAttribute :
160 PropsValues.REQUEST_SHARED_ATTRIBUTES) {
161
162 if (name.startsWith(requestSharedAttribute)) {
163 return true;
164 }
165 }
166 }
167
168 return false;
169 }
170
171 private String _attrNamespace;
172 private String _paramNamespace;
173
174 }