001/*
002  GRANITE DATA SERVICES
003  Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004
005  This file is part of Granite Data Services.
006
007  Granite Data Services is free software; you can redistribute it and/or modify
008  it under the terms of the GNU Library General Public License as published by
009  the Free Software Foundation; either version 2 of the License, or (at your
010  option) any later version.
011
012  Granite Data Services is distributed in the hope that it will be useful, but
013  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015  for more details.
016
017  You should have received a copy of the GNU Library General Public License
018  along with this library; if not, see <http://www.gnu.org/licenses/>.
019*/
020
021package org.granite.messaging.webapp;
022
023import java.util.Collections;
024import java.util.Enumeration;
025import java.util.HashMap;
026import java.util.Locale;
027import java.util.Map;
028
029import javax.servlet.http.HttpServletRequest;
030import javax.servlet.http.HttpServletRequestWrapper;
031
032/**
033 * @author Venkat DANDA
034 */
035@SuppressWarnings({ "unchecked", "rawtypes" })
036public class HttpServletRequestParamWrapper extends HttpServletRequestWrapper {
037    
038    private final Locale locale;
039    private final Enumeration<Locale> locales;
040    private final Map requestParams;
041    private final Map requestAttributes;
042
043    /**
044     * @param request
045     */
046    public HttpServletRequestParamWrapper(HttpServletRequest request) {
047        super(request);
048        this.locale = request.getLocale();
049        this.locales = request.getLocales();
050        this.requestParams = new HashMap(request.getParameterMap());
051        this.requestAttributes = new HashMap();
052    }
053
054    /* (non-Javadoc)
055     * @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
056     */
057    @Override
058    public String getParameter(String name) {
059        String retValue = null;
060        String[] paramValues = getParameterValues(name);
061        if (paramValues != null && paramValues.length > 0) {
062            retValue = paramValues[0];
063        }
064        return retValue;
065    }
066
067    /* (non-Javadoc)
068     * @see javax.servlet.ServletRequestWrapper#getParameterMap()
069     */
070    @Override
071    public Map getParameterMap() {
072        return Collections.unmodifiableMap(requestParams);
073    }
074
075    /* (non-Javadoc)
076     * @see javax.servlet.ServletRequestWrapper#getParameterNames()
077     */
078    @Override
079    public Enumeration getParameterNames() {
080        return Collections.enumeration(requestParams.keySet());
081    }
082
083    /* (non-Javadoc)
084     * @see javax.servlet.ServletRequestWrapper#getParameterValues(java.lang.String)
085     */
086    @Override
087    public String[] getParameterValues(String name) {
088        String[] retValues = null;
089        String[] tmpValues = (String[]) requestParams.get(name);
090        if (tmpValues != null) {
091            retValues = new String[tmpValues.length];
092            System.arraycopy(tmpValues, 0, retValues, 0, tmpValues.length);
093        }
094        return retValues;
095    }
096
097    /**
098     * New method to set the parameter value.
099     * @param name
100     * @param value
101     */
102    public void setParameter(String name, String value) {
103        String[] param = { value };
104        setParameter(name, param);
105    }
106
107    /**
108     * New method to set the parameter with multiple values.
109     * @param name
110     * @param values
111     */
112    public void setParameter(String name, String[] values) {
113        requestParams.put(name, values);
114    }
115
116        @Override
117        public Object getAttribute(String name) {
118                return requestAttributes.get(name);
119        }
120
121        @Override
122        public Enumeration getAttributeNames() {
123                return Collections.enumeration(requestAttributes.keySet());
124        }
125
126        @Override
127        public void removeAttribute(String name) {
128                requestAttributes.remove(name);
129        }
130
131        @Override
132        public void setAttribute(String name, Object o) {
133                requestAttributes.put(name, o);
134        }
135        
136        @Override
137        public Locale getLocale() {
138            return locale;
139        }
140        
141        @Override
142        public Enumeration getLocales() {
143            return locales;
144        }
145}