package de.axone.web;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import de.axone.tools.S;
import de.axone.tools.Str;
import de.axone.tools.StringValueAccessor;
/**
* Helper class for accessing information stored in a request
*
* @author flo
*/
public class RequestUtil implements StringValueAccessor<String> {
private HttpServletRequest request;
public RequestUtil( HttpServletRequest request ){
this.request = request;
}
@Override
public String access( String value ) {
return request.getParameter( value );
}
/**
* Extract Parameter which is only identified by name
* in format <tt>name-value</tt>. This is useful for transmitting parameters
* by <tt><input type="submit"></tt> and <tt><button></tt>
* where value cannot be used because it is displayed.
*
* Example: Request parameter is <tt>item-123=test</tt>.
* <tt>getNameParameter( request, "item" )</tt> will return <tt>123</tt>
*
* @param request The Request we're looking at
* @param key to look for
* @return the parameter's value
*/
public static String getNameParameter( HttpServletRequest request, String key ){
Enumeration<?> names = request.getParameterNames();
while( names.hasMoreElements() ){
String name = (String)names.nextElement();
String value = extract( name, key );
if( value != null ) return value;
}
return null;
}
public static boolean hasNameParameter( HttpServletRequest request, String key ){
return getNameParameter( request, key ) != null;
}
public static String extract( String value, String key ){
key = key + "-";
if( value.startsWith( key ) ){
return value.substring( key.length() );
}
return null;
}
@Override
public String toString(){
StringBuilder result = new StringBuilder();
Enumeration<?> names = request.getParameterNames();
while( names.hasMoreElements() ){
String name = (String)names.nextElement();
String [] value = request.getParameterValues( name );
result
.append( name )
.append( ": " )
.append( Str.join( ", ", value ) )
.append( S.nl );
}
return result.toString();
}
}