com.opensymphony.xwork2.conversion.impl

## Class DefaultObjectTypeDeterminer

- java.lang.Object
- - com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer

- All Implemented Interfaces:
    ObjectTypeDeterminer

      public class DefaultObjectTypeDeterminer
      extends Object
      implements ObjectTypeDeterminer

  This `ObjectTypeDeterminer` looks at the Class-conversion.properties for entries that indicated what objects are contained within Maps and Collections. For Collections, such as Lists, the element is specified using the pattern Element_xxx, where xxx is the field name of the collection property in your action or object. For Maps, both the key and the value may be specified by using the pattern Key_xxx and Element_xxx, respectively.

  From WebWork 2.1.x, the Collection_xxx format is still supported and honored, although it is deprecated and will be removed eventually.

  Author:
    Gabriel Zimmerman

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `CREATE_IF_NULL_PREFIX`
    `static String` | `DEPRECATED_ELEMENT_PREFIX`
    `static String` | `ELEMENT_PREFIX`
    `static String` | `KEY_PREFIX`
    `static String` | `KEY_PROPERTY_PREFIX`
    `protected static org.apache.logging.log4j.Logger` | `LOG`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DefaultObjectTypeDeterminer(XWorkConverter converter, ReflectionProvider provider)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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`

- - ### Field Detail

    - #### LOG

          protected static final org.apache.logging.log4j.Logger LOG

    - #### KEY_PREFIX

          public static final String KEY_PREFIX

      See Also:
        Constant Field Values

    - #### ELEMENT_PREFIX

          public static final String ELEMENT_PREFIX

      See Also:
        Constant Field Values

    - #### KEY_PROPERTY_PREFIX

          public static final String KEY_PROPERTY_PREFIX

      See Also:
        Constant Field Values

    - #### CREATE_IF_NULL_PREFIX

          public static final String CREATE_IF_NULL_PREFIX

      See Also:
        Constant Field Values

    - #### DEPRECATED_ELEMENT_PREFIX

          public static final String DEPRECATED_ELEMENT_PREFIX

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### DefaultObjectTypeDeterminer

          public DefaultObjectTypeDeterminer(XWorkConverter converter,
                                     ReflectionProvider provider)

  - ### 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. As fallback, it determines the key class by looking for the value of Key_${property} in the properties file for the given class.
      Specified by:
        `getKeyClass` in interface `ObjectTypeDeterminer`
      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. As fallback, it determines the key class by looking for the value of Element_${property} in the properties file for the given class. Also looks for the deprecated Collection_${property}
      Specified by:
        `getElementClass` in interface `ObjectTypeDeterminer`
      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. As fallback, it determines the String key property for a Collection by getting it from the conversion properties file using the KeyProperty_ prefix. KeyProperty_${property}=somePropertyOfBeansInTheSet
      Specified by:
        `getKeyProperty` in interface `ObjectTypeDeterminer`
      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. As fallback, it determines the boolean CreateIfNull property for a Collection or Map by getting it from the conversion properties file using the CreateIfNull_ prefix. CreateIfNull_${property}=true|false
      Specified by:
        `shouldCreateIfNew` in interface `ObjectTypeDeterminer`
      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` - the target object
        `keyProperty` - the keyProperty value
        `isIndexAccessed` - `true`, if the collection or map is accessed via index, `false` otherwise.
      Returns:
        `true`, if the Collection or Map should be created, `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

Copyright © 2000–2021 Apache Software Foundation. All rights reserved.