com.opensymphony.xwork.util
Class GenericsObjectTypeDeterminer

java.lang.Object
  extended by com.opensymphony.xwork.util.DefaultObjectTypeDeterminer
      extended by com.opensymphony.xwork.util.GenericsObjectTypeDeterminer
All Implemented Interfaces:
com.opensymphony.xwork.util.ObjectTypeDeterminer

public class GenericsObjectTypeDeterminer
extends com.opensymphony.xwork.util.DefaultObjectTypeDeterminer

GenericsObjectTypeDeterminer use the following algorithm for determining the types: looks for a field annotation, than for the corresponding setter annotation, and for special cases falls back to generic types.

Author:
Patrick Lightbody, Rainer Hermanns, Alexandru Popescu

Field Summary
 
Fields inherited from class com.opensymphony.xwork.util.DefaultObjectTypeDeterminer
CREATE_IF_NULL_PREFIX, DEPRECATED_ELEMENT_PREFIX, ELEMENT_PREFIX, KEY_PREFIX, KEY_PROPERTY_PREFIX, LOG
 
Constructor Summary
GenericsObjectTypeDeterminer()
           
 
Method Summary
protected
<T extends Annotation>
T
getAnnotation(Class parentClass, String property, Class<T> annotationClass)
          Retrieves an annotation for the specified property of field, setter or getter.
 Class getElementClass(Class parentClass, String property, Object key)
          Determines the element class by looking for the value of @Element annotation for the given class.
 Class getKeyClass(Class parentClass, String property)
          Determines the key class by looking for the value of @Key annotation for the given class.
 String getKeyProperty(Class parentClass, String property)
          Determines the key property for a Collection by getting it from the @KeyProperty annotation.
 boolean shouldCreateIfNew(Class parentClass, String property, Object target, String keyProperty, boolean isIndexAccessed)
          Determines the createIfNull property for a Collection or Map by getting it from the @CreateIfNull annotation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GenericsObjectTypeDeterminer

public GenericsObjectTypeDeterminer()
Method Detail

getKeyClass

public Class getKeyClass(Class parentClass,
                         String property)
Determines the key class by looking for the value of @Key annotation for the given class. If no annotation is found, the key class is determined by using the generic parametrics.

Specified by:
getKeyClass in interface com.opensymphony.xwork.util.ObjectTypeDeterminer
Overrides:
getKeyClass in class com.opensymphony.xwork.util.DefaultObjectTypeDeterminer
Parameters:
parentClass - the Class which contains as a property the Map or Collection we are finding the key for.
property - the property of the Map or Collection for the given parent class
See Also:
ObjectTypeDeterminer.getKeyClass(Class, String)

getElementClass

public Class getElementClass(Class parentClass,
                             String property,
                             Object key)
Determines the element class by looking for the value of @Element annotation for the given class. If no annotation is found, the element class is determined by using the generic parametrics.

Specified by:
getElementClass in interface com.opensymphony.xwork.util.ObjectTypeDeterminer
Overrides:
getElementClass in class com.opensymphony.xwork.util.DefaultObjectTypeDeterminer
Parameters:
parentClass - the Class which contains as a property the Map or Collection we are finding the key for.
property - the property of the Map or Collection for the given parent class
See Also:
ObjectTypeDeterminer.getElementClass(Class, String, Object)

getKeyProperty

public String getKeyProperty(Class parentClass,
                             String property)
Determines the key property for a Collection by getting it from the @KeyProperty annotation.

Specified by:
getKeyProperty in interface com.opensymphony.xwork.util.ObjectTypeDeterminer
Overrides:
getKeyProperty in class com.opensymphony.xwork.util.DefaultObjectTypeDeterminer
Parameters:
parentClass - the Class which contains as a property the Map or Collection we are finding the key for.
property - the property of the Map or Collection for the given parent class
See Also:
ObjectTypeDeterminer.getKeyProperty(Class, String)

shouldCreateIfNew

public boolean shouldCreateIfNew(Class parentClass,
                                 String property,
                                 Object target,
                                 String keyProperty,
                                 boolean isIndexAccessed)
Determines the createIfNull property for a Collection or Map by getting it from the @CreateIfNull annotation.

Specified by:
shouldCreateIfNew in interface com.opensymphony.xwork.util.ObjectTypeDeterminer
Overrides:
shouldCreateIfNew in class com.opensymphony.xwork.util.DefaultObjectTypeDeterminer
Parameters:
parentClass - the Class which contains as a property the Map or Collection we are finding the key for.
property - the property of the Map or Collection for the given parent class
target -
keyProperty -
isIndexAccessed - true, if the collection or map is accessed via index, false otherwise.
See Also:
ObjectTypeDeterminer#getKeyProperty(Class, String)

getAnnotation

protected <T extends Annotation> T getAnnotation(Class parentClass,
                                                 String property,
                                                 Class<T> annotationClass)
Retrieves an annotation for the specified property of field, setter or getter.

Type Parameters:
T - the annotation type to be retrieved
Parameters:
parentClass - the class
property - the property
annotationClass - the annotation
Returns:
the field or setter/getter annotation or null if not found

XWork Project Page