001 // Copyright 2007, 2008 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry5.upload.internal.services; 016 017 import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newMap; 018 019 import javax.servlet.http.HttpServletRequest; 020 import javax.servlet.http.HttpServletRequestWrapper; 021 import java.io.UnsupportedEncodingException; 022 import java.util.Collections; 023 import java.util.Enumeration; 024 import java.util.Map; 025 026 /** 027 * Wrapper for HttpServletRequest that overrides the parameter methods of the wrapped request. i.e. parameters are 028 * retrieved from the wrapper rather than the real request. 029 */ 030 public class ParametersServletRequestWrapper extends HttpServletRequestWrapper 031 { 032 private final Map<String, ParameterValue> parameters = newMap(); 033 034 public ParametersServletRequestWrapper(HttpServletRequest httpServletRequest) 035 { 036 super(httpServletRequest); 037 } 038 039 @Override 040 public String getParameter(String name) 041 { 042 return getValueFor(name).single(); 043 } 044 045 @Override 046 public Map<String, Object> getParameterMap() 047 { 048 Map<String, Object> paramMap = newMap(); 049 050 for (Map.Entry<String, ParameterValue> e : parameters.entrySet()) 051 { 052 ParameterValue value = e.getValue(); 053 054 paramMap.put(e.getKey(), value.isMulti() ? value.multi() : value.single()); 055 } 056 057 return paramMap; 058 } 059 060 @Override 061 public Enumeration getParameterNames() 062 { 063 return Collections.enumeration(parameters.keySet()); 064 } 065 066 @Override 067 public String[] getParameterValues(String name) 068 { 069 return getValueFor(name).multi(); 070 } 071 072 public void addParameter(String name, String value) 073 { 074 ParameterValue pv = parameters.get(name); 075 if (pv == null) 076 { 077 pv = new ParameterValue(value); 078 parameters.put(name, pv); 079 } 080 else 081 { 082 pv.add(value); 083 } 084 } 085 086 ParameterValue getValueFor(String name) 087 { 088 ParameterValue value = parameters.get(name); 089 090 return value == null ? ParameterValue.NULL : value; 091 } 092 093 /** 094 * Ignores any attempt to set the character encoding, as it already has been set before the request content was 095 * parsed. 096 * 097 * @see org.apache.tapestry5.SymbolConstants#CHARSET 098 */ 099 @Override 100 public void setCharacterEncoding(String enc) throws UnsupportedEncodingException 101 { 102 103 } 104 }