/** * Licensed under the Artistic License; you may not use this file * except in compliance with the License. * You may obtain a copy of the License at * * http://displaytag.sourceforge.net/license.html * * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.displaytag.util; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.UnhandledException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.displaytag.Messages; /** * Default RequestHelper implementation. * @author Fabrizio Giustina * @version $Revision: 956 $ ($Author: fgiust $) * @see org.displaytag.util.Href * @see org.displaytag.util.RequestHelper */ public class DefaultRequestHelper implements RequestHelper { /** * logger. */ private static Log log = LogFactory.getLog(DefaultRequestHelper.class); /** * original HttpServletRequest. */ private HttpServletRequest request; /** * original HttpServletResponse. */ private HttpServletResponse response; /** * Construct a new RequestHelper for the given request. * @param servletRequest HttpServletRequest needed to generate the base href * @param servletResponse HttpServletResponse needed to encode generated urls */ public DefaultRequestHelper(HttpServletRequest servletRequest, HttpServletResponse servletResponse) { this.request = servletRequest; this.response = servletResponse; } /** * @see org.displaytag.util.RequestHelper#getHref() */ public Href getHref() { String requestURI = this.request.getRequestURI(); // call encodeURL to preserve session id when cookies are disabled Href href = new DefaultHref(this.response.encodeURL(requestURI)); href.setParameterMap(getParameterMap()); return href; } /** * @see org.displaytag.util.RequestHelper#getParameter(java.lang.String) */ public String getParameter(String key) { // actually simply return the parameter, this behaviour could be changed return this.request.getParameter(key); } /** * @see org.displaytag.util.RequestHelper#getIntParameter(java.lang.String) */ public Integer getIntParameter(String key) { String value = this.request.getParameter(key); if (value != null) { try { return new Integer(value); } catch (NumberFormatException e) { // It's ok to ignore, simply return null log.debug(Messages.getString("RequestHelper.invalidparameter", //$NON-NLS-1$ new Object[]{key, value})); } } return null; } /** * @see org.displaytag.util.RequestHelper#getParameterMap() */ public Map getParameterMap() { Map map = new HashMap(); // get the parameters names Enumeration parametersName = this.request.getParameterNames(); while (parametersName.hasMoreElements()) { // ... get the value String paramName = (String) parametersName.nextElement(); // put key/value in the map String[] originalValues = (String[]) ObjectUtils.defaultIfNull( this.request.getParameterValues(paramName), new String[0]); String[] values = new String[originalValues.length]; for (int i = 0; i < values.length; i++) { try { values[i] = URLEncoder.encode(StringUtils.defaultString(originalValues[i]), StringUtils .defaultString(response.getCharacterEncoding(), "UTF8")); //$NON-NLS-1$ } catch (UnsupportedEncodingException e) { throw new UnhandledException(e); } } map.put(paramName, values); } // return the Map return map; } }