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 void setAttribute(String name, Object value) {
110 if (_isReservedParam(name)) {
111 super.setAttribute(name, value);
112 }
113 else {
114 super.setAttribute(_attrNamespace + name, value);
115 }
116 }
117
118 public void setAttribute(
119 String name, Object value, boolean privateRequestAttribute) {
120
121 if (!privateRequestAttribute) {
122 super.setAttribute(name, value);
123 }
124 else {
125 setAttribute(name, value);
126 }
127 }
128
129 @Override
130 public void removeAttribute(String name) {
131 if (_isReservedParam(name)) {
132 super.removeAttribute(name);
133 }
134 else {
135 super.removeAttribute(_attrNamespace + name);
136 }
137 }
138
139 @Override
140 public String getParameter(String name) {
141 if (name == null) {
142 throw new IllegalArgumentException();
143 }
144
145 String value = super.getParameter(name);
146
147 if (value == null) {
148 value = super.getParameter(_paramNamespace + name);
149 }
150
151 return value;
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 }