package org.jboss.seam.web; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.lang.reflect.Array; import java.util.Collections; import java.util.Map; import javax.servlet.ServletRequest; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.intercept.BypassInterceptors; /** * Access to request parameters. * * @author Gavin King * */ @Name("org.jboss.seam.web.parameters") @BypassInterceptors @Scope(ScopeType.STATELESS) @Install(precedence=BUILT_IN) public class Parameters { protected Object convertRequestParameter(String requestParameter, Class type) { if ( String.class.equals(type) ) return requestParameter; throw new IllegalArgumentException("No converters available"); } public Map<String, String[]> getRequestParameters() { ServletContexts servletContexts = ServletContexts.getInstance(); if ( servletContexts!=null ) { ServletRequest servletRequest = servletContexts.getRequest(); if ( servletRequest!=null ) { return servletRequest.getParameterMap(); } } return Collections.EMPTY_MAP; } public Object convertMultiValueRequestParameter(Map<String, String[]> requestParameters, String name, Class<?> type) { String[] array = requestParameters.get(name); if (array==null || array.length==0) { return null; } else { if ( type.isArray() ) { int length = Array.getLength(array); Class<?> elementType = type.getComponentType(); Object newInstance = Array.newInstance(elementType, length); for ( int i=0; i<length; i++ ) { Object element = convertRequestParameter( (String) Array.get(array, i), elementType ); Array.set( newInstance, i, element ); } return newInstance; } else { return convertRequestParameter( array[0], type ); } } } public static Parameters instance() { return (Parameters) Component.getInstance(Parameters.class, ScopeType.STATELESS); } }