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 015package org.apache.tapestry5.upload.internal.services; 016 017import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newMap; 018 019import javax.servlet.http.HttpServletRequest; 020import javax.servlet.http.HttpServletRequestWrapper; 021import java.io.UnsupportedEncodingException; 022import java.util.Collections; 023import java.util.Enumeration; 024import 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 */ 030public 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, String[]> getParameterMap() 047 { 048 Map<String, String[]> 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.multi()); 055 } 056 057 return paramMap; 058 } 059 060 @Override 061 public Enumeration<String> 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}