/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.deliver.portal.information;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pluto.om.window.PortletWindow;
import org.infoglue.deliver.portal.PortalControlURL;
/**
* @author jand
*
*/
public class ServletRequestIG extends HttpServletRequestWrapper {
private static final Log log = LogFactory.getLog(ServletRequestIG.class);
private Map paramMap;
private Map attributeMap = new HashMap();
public ServletRequestIG(PortletWindow window, HttpServletRequest req) {
super(req);
PortalControlURL url = new PortalControlURL(req);
this.paramMap = url.getRenderParameterMap(window);
this.paramMap.putAll(url.getQueryParameterMap(window)); // in case of namespace-params.
if (log.isDebugEnabled()) {
StringBuffer str = new StringBuffer();
for (Iterator it = paramMap.keySet().iterator(); it.hasNext();) {
String name = (String) it.next();
str.append(name);
str.append(": ");
str.append(Arrays.asList((String[]) paramMap.get(name)));
if (it.hasNext())
str.append(", ");
}
log.debug("Available params: " + str);
}
}
protected void finalize() throws Throwable {
super.finalize();
this.paramMap.clear();
this.paramMap = null;
this.attributeMap.clear();
this.attributeMap = null;
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameter(java.lang.String)
*/
public String getParameter(String name) {
String[] values = (String[]) paramMap.get(name);
if (values != null && values.length > 0) {
return values[0];
}
return null;
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameterMap()
*/
public Map getParameterMap() {
return paramMap;
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameterNames()
*/
public Enumeration getParameterNames() {
return Collections.enumeration(paramMap.keySet());
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameterValues(java.lang.String)
*/
public String[] getParameterValues(String name) {
return (String[]) paramMap.get(name);
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#setAttribute(java.lang.String, java.lang.Object)
*/
public void setAttribute(String key, Object value)
{
this.attributeMap.put(key, value);
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#removeAttribute(java.lang.String)
*/
public void removeAttribute(String key)
{
this.attributeMap.remove(key);
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getAttribute(java.lang.String)
*/
public Object getAttribute(String name) {
Object o = attributeMap.get(name);
if (o == null) {
o = super.getAttribute(name);
}
if (o == null) {
o = super.getRequest().getAttribute(name);
}
return o;
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getAttributeNames()
*/
public Enumeration getAttributeNames() {
Vector v = new Vector();
for (Iterator iter = attributeMap.keySet().iterator(); iter.hasNext();) {
v.add(iter.next());
}
for (Enumeration enumeration = super.getAttributeNames(); enumeration.hasMoreElements();) {
v.add(enumeration.nextElement());
}
for (Enumeration enumeration = super.getRequest().getAttributeNames(); enumeration.hasMoreElements();) {
v.add(enumeration.nextElement());
}
return v.elements();
}
}