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}