Package org.apache.commons.beanutils2.expression

# Class DefaultResolver

java.lang.Object
org.apache.commons.beanutils2.expression.DefaultResolver

All Implemented Interfaces:
  `Resolver`

public class DefaultResolver extends Object implements Resolver
Default Property Name Expression `Resolver` Implementation.

This class assists in resolving property names in the following five formats, with the layout of an identifying String in parentheses:

- Simple (`name`) - The specified `name` identifies an individual property of a particular JavaBean. The name of the actual getter or setter method to be used is determined using standard JavaBeans introspection, so that (unless overridden by a `BeanInfo` class, a property named "xyz" will have a getter method named `getXyz()` or (for boolean properties only) `isXyz()`, and a setter method named `setXyz()`.
- Nested (`name1.name2.name3`) The first name element is used to select a property getter, as for simple references above. The object returned for this property is then consulted, using the same approach, for a property getter for a property named `name2`, and so on. The property value that is ultimately retrieved or modified is the one identified by the last name element.
- Indexed (`name[index]`) - The underlying property value is assumed to be an array, or this JavaBean is assumed to have indexed property getter and setter methods. The appropriate (zero-relative) entry in the array is selected. `List` objects are now also supported for read/write. You simply need to define a getter that returns the `List`
- Mapped (`name(key)`) - The JavaBean is assumed to have an property getter and setter methods with an additional attribute of type `String`.
- Combined (`name1.name2[index].name3(key)`) - Combining mapped, nested, and indexed references is also supported.

Since:
  1.8.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DefaultResolver()`
  Constructs a new instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `getIndex(String expression)`
  Gets the index value from the property expression or -1.
  `String`
  `getKey(String expression)`
  Gets the map key from the property expression or `null`.
  `String`
  `getProperty(String expression)`
  Gets the property name from the property expression.
  `boolean`
  `hasNested(String expression)`
  Indicates whether or not the expression contains nested property expressions or not.
  `boolean`
  `isIndexed(String expression)`
  Indicate whether the expression is for an indexed property or not.
  `boolean`
  `isMapped(String expression)`
  Indicate whether the expression is for a mapped property or not.
  `String`
  `next(String expression)`
  Extract the next property expression from the current expression.
  `String`
  `remove(String expression)`
  Remove the last property expression from the current expression.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### DefaultResolver

    public DefaultResolver()
    Constructs a new instance.

- ## Method Details

  - ### getIndex

    public int getIndex(String expression)
    Gets the index value from the property expression or -1.
    Specified by:
      `getIndex` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      The index value or -1 if the property is not indexed
    Throws:
      `IllegalArgumentException` - If the indexed property is illegally formed or has an invalid (non-numeric) value.

  - ### getKey

    public String getKey(String expression)
    Gets the map key from the property expression or `null`.
    Specified by:
      `getKey` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      The index value
    Throws:
      `IllegalArgumentException` - If the mapped property is illegally formed.

  - ### getProperty

    public String getProperty(String expression)
    Gets the property name from the property expression.
    Specified by:
      `getProperty` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      The property name

  - ### hasNested

    public boolean hasNested(String expression)
    Indicates whether or not the expression contains nested property expressions or not.
    Specified by:
      `hasNested` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      The next property expression

  - ### isIndexed

    public boolean isIndexed(String expression)
    Indicate whether the expression is for an indexed property or not.
    Specified by:
      `isIndexed` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      `true` if the expression is indexed, otherwise `false`

  - ### isMapped

    public boolean isMapped(String expression)
    Indicate whether the expression is for a mapped property or not.
    Specified by:
      `isMapped` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      `true` if the expression is mapped, otherwise `false`

  - ### next

    public String next(String expression)
    Extract the next property expression from the current expression.
    Specified by:
      `next` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      The next property expression

  - ### remove

    public String remove(String expression)
    Remove the last property expression from the current expression.
    Specified by:
      `remove` in interface `Resolver`
    Parameters:
      `expression` - The property expression
    Returns:
      The new expression value, with first property expression removed - null if there are no more expressions