001/*
002 * Copyright 2002-2015 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      https://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.springframework.web.portlet.context;
018
019import java.security.Principal;
020import java.util.Iterator;
021import java.util.Locale;
022import java.util.Map;
023import javax.portlet.PortletRequest;
024import javax.portlet.PortletResponse;
025import javax.portlet.PortletSession;
026
027import org.springframework.util.CollectionUtils;
028import org.springframework.util.ObjectUtils;
029import org.springframework.util.StringUtils;
030import org.springframework.web.context.request.NativeWebRequest;
031import org.springframework.web.portlet.util.PortletUtils;
032
033/**
034 * {@link org.springframework.web.context.request.WebRequest} adapter
035 * for a {@link javax.portlet.PortletRequest}.
036 *
037 * @author Juergen Hoeller
038 * @since 2.0
039 */
040public class PortletWebRequest extends PortletRequestAttributes implements NativeWebRequest {
041
042        /**
043         * Create a new PortletWebRequest instance for the given request.
044         * @param request current portlet request
045         */
046        public PortletWebRequest(PortletRequest request) {
047                super(request);
048        }
049
050        /**
051         * Create a new PortletWebRequest instance for the given request/response pair.
052         * @param request current portlet request
053         * @param response current portlet response
054         */
055        public PortletWebRequest(PortletRequest request, PortletResponse response) {
056                super(request, response);
057        }
058
059
060        @Override
061        public Object getNativeRequest() {
062                return getRequest();
063        }
064
065        @Override
066        public Object getNativeResponse() {
067                return getResponse();
068        }
069
070        @Override
071        public <T> T getNativeRequest(Class<T> requiredType) {
072                return PortletUtils.getNativeRequest(getRequest(), requiredType);
073        }
074
075        @Override
076        public <T> T getNativeResponse(Class<T> requiredType) {
077                return PortletUtils.getNativeResponse(getResponse(), requiredType);
078        }
079
080
081        @Override
082        public String getHeader(String headerName) {
083                return getRequest().getProperty(headerName);
084        }
085
086        @Override
087        public String[] getHeaderValues(String headerName) {
088                String[] headerValues = StringUtils.toStringArray(getRequest().getProperties(headerName));
089                return (!ObjectUtils.isEmpty(headerValues) ? headerValues : null);
090        }
091
092        @Override
093        public Iterator<String> getHeaderNames() {
094                return CollectionUtils.toIterator(getRequest().getPropertyNames());
095        }
096
097        @Override
098        public String getParameter(String paramName) {
099                return getRequest().getParameter(paramName);
100        }
101
102        @Override
103        public String[] getParameterValues(String paramName) {
104                return getRequest().getParameterValues(paramName);
105        }
106
107        @Override
108        public Iterator<String> getParameterNames() {
109                return CollectionUtils.toIterator(getRequest().getParameterNames());
110        }
111
112        @Override
113        public Map<String, String[]> getParameterMap() {
114                return getRequest().getParameterMap();
115        }
116
117        @Override
118        public Locale getLocale() {
119                return getRequest().getLocale();
120        }
121
122        @Override
123        public String getContextPath() {
124                return getRequest().getContextPath();
125        }
126
127        @Override
128        public String getRemoteUser() {
129                return getRequest().getRemoteUser();
130        }
131
132        @Override
133        public Principal getUserPrincipal() {
134                return getRequest().getUserPrincipal();
135        }
136
137        @Override
138        public boolean isUserInRole(String role) {
139                return getRequest().isUserInRole(role);
140        }
141
142        @Override
143        public boolean isSecure() {
144                return getRequest().isSecure();
145        }
146
147        /**
148         * Last-modified handling not supported for portlet requests:
149         * As a consequence, this method always returns {@code false}.
150         */
151        @Override
152        public boolean checkNotModified(long lastModifiedTimestamp) {
153                return false;
154        }
155
156        /**
157         * Last-modified handling not supported for portlet requests:
158         * As a consequence, this method always returns {@code false}.
159         */
160        @Override
161        public boolean checkNotModified(String eTag) {
162                return false;
163        }
164
165        /**
166         * Last-modified handling not supported for portlet requests:
167         * As a consequence, this method always returns {@code false}.
168         * @since 4.2
169         */
170        @Override
171        public boolean checkNotModified(String etag, long lastModifiedTimestamp) {
172                return false;
173        }
174
175        @Override
176        public String getDescription(boolean includeClientInfo) {
177                PortletRequest request = getRequest();
178                StringBuilder result = new StringBuilder();
179                result.append("context=").append(request.getContextPath());
180                if (includeClientInfo) {
181                        PortletSession session = request.getPortletSession(false);
182                        if (session != null) {
183                                result.append(";session=").append(session.getId());
184                        }
185                        String user = getRequest().getRemoteUser();
186                        if (StringUtils.hasLength(user)) {
187                                result.append(";user=").append(user);
188                        }
189                }
190                return result.toString();
191        }
192
193
194        @Override
195        public String toString() {
196                return "PortletWebRequest: " + getDescription(true);
197        }
198
199}