View Javadoc

1   /*
2    * Copyright 2004-2005, 2007-2008 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    * 
8    * http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package net.sf.morph.reflect.reflectors;
17  
18  import javax.servlet.http.HttpServletRequest;
19  
20  import net.sf.composite.util.ObjectUtils;
21  import net.sf.morph.reflect.Reflector;
22  import net.sf.morph.util.ClassUtils;
23  
24  /**
25   * ServletRequest reflector.
26   * 
27   * @author Matt Sgarlata
28   * @since Morph 1.1 (Oct 25, 2007)
29   */
30  public class ServletRequestReflector extends StubbornDelegatingReflector {
31  
32  	public ServletRequestReflector() {
33  		super(new Reflector[] { new ServletRequestParameterReflector(),
34  		        new ServletRequestAttributeReflector() });
35  	}
36  
37  	protected Class getTypeImpl(Object bean, String propertyName) throws Exception {
38  	    HttpServletRequest request = (HttpServletRequest) bean;
39  
40  		// first check request parameters
41  		String[] values = request.getParameterValues(propertyName);
42  		if (!ObjectUtils.isEmpty(values)) {
43  			return ObjectUtils.isEmpty(values) || values.length == 1 ? String.class : String[].class;
44  		}
45  	    
46  		// next check request attributes
47  	    Object attr = request.getAttribute(propertyName);
48  	    if (attr != null) {
49  	    	return ClassUtils.getClass(attr);
50  	    }
51  	    
52  	    // if neither a parameter nor an attribute is present, just return
53  	    // Object.class
54  	    return Object.class;
55      }
56  	
57  }