1 /** 2 * Licensed under the Artistic License; you may not use this file 3 * except in compliance with the License. 4 * You may obtain a copy of the License at 5 * 6 * http://displaytag.sourceforge.net/license.html 7 * 8 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR 9 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 10 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 11 */ 12 package org.displaytag.util; 13 14 import java.io.UnsupportedEncodingException; 15 import java.net.URLEncoder; 16 import java.util.Enumeration; 17 import java.util.HashMap; 18 import java.util.Map; 19 20 import javax.servlet.http.HttpServletRequest; 21 import javax.servlet.http.HttpServletResponse; 22 23 import org.apache.commons.lang.ObjectUtils; 24 import org.apache.commons.lang.StringUtils; 25 import org.apache.commons.lang.UnhandledException; 26 import org.apache.commons.logging.Log; 27 import org.apache.commons.logging.LogFactory; 28 import org.displaytag.Messages; 29 30 31 /** 32 * Default RequestHelper implementation. 33 * @author Fabrizio Giustina 34 * @version $Revision: 1104 $ ($Author: fgiust $) 35 * @see org.displaytag.util.Href 36 * @see org.displaytag.util.RequestHelper 37 */ 38 public class DefaultRequestHelper implements RequestHelper 39 { 40 41 /** 42 * logger. 43 */ 44 private static Log log = LogFactory.getLog(DefaultRequestHelper.class); 45 46 /** 47 * original HttpServletRequest. 48 */ 49 private HttpServletRequest request; 50 51 /** 52 * original HttpServletResponse. 53 */ 54 private HttpServletResponse response; 55 56 /** 57 * Construct a new RequestHelper for the given request. 58 * @param servletRequest HttpServletRequest needed to generate the base href 59 * @param servletResponse HttpServletResponse needed to encode generated urls 60 */ 61 public DefaultRequestHelper(HttpServletRequest servletRequest, HttpServletResponse servletResponse) 62 { 63 this.request = servletRequest; 64 this.response = servletResponse; 65 } 66 67 /** 68 * @see org.displaytag.util.RequestHelper#getHref() 69 */ 70 public Href getHref() 71 { 72 String requestURI = this.request.getRequestURI(); 73 // call encodeURL to preserve session id when cookies are disabled 74 Href href = new DefaultHref(this.response.encodeURL(requestURI)); 75 href.setParameterMap(getParameterMap()); 76 return href; 77 } 78 79 /** 80 * @see org.displaytag.util.RequestHelper#getParameter(java.lang.String) 81 */ 82 public String getParameter(String key) 83 { 84 // actually simply return the parameter, this behaviour could be changed 85 return this.request.getParameter(key); 86 } 87 88 /** 89 * @see org.displaytag.util.RequestHelper#getIntParameter(java.lang.String) 90 */ 91 public Integer getIntParameter(String key) 92 { 93 String value = this.request.getParameter(key); 94 95 if (value != null) 96 { 97 try 98 { 99 return new Integer(value); 100 } 101 catch (NumberFormatException e) 102 { 103 // It's ok to ignore, simply return null 104 log.debug(Messages.getString("RequestHelper.invalidparameter", //$NON-NLS-1$ 105 new Object[]{key, value})); 106 } 107 } 108 109 return null; 110 } 111 112 /** 113 * @see org.displaytag.util.RequestHelper#getParameterMap() 114 */ 115 public Map getParameterMap() 116 { 117 118 Map map = new HashMap(); 119 120 // get the parameters names 121 Enumeration parametersName = this.request.getParameterNames(); 122 123 while (parametersName.hasMoreElements()) 124 { 125 // ... get the value 126 String paramName = (String) parametersName.nextElement(); 127 128 request.getParameter(paramName); 129 // put key/value in the map 130 String[] originalValues = (String[]) ObjectUtils.defaultIfNull( 131 this.request.getParameterValues(paramName), 132 new String[0]); 133 String[] values = new String[originalValues.length]; 134 135 for (int i = 0; i < values.length; i++) 136 { 137 try 138 { 139 values[i] = URLEncoder.encode(StringUtils.defaultString(originalValues[i]), StringUtils 140 .defaultString(response.getCharacterEncoding(), "UTF8")); //$NON-NLS-1$ 141 } 142 catch (UnsupportedEncodingException e) 143 { 144 throw new UnhandledException(e); 145 } 146 } 147 map.put(paramName, values); 148 149 } 150 151 // return the Map 152 return map; 153 } 154 155 }