Package org.apache.commons.beanutils2.expression

# Interface Resolver

All Known Implementing Classes:
  `DefaultResolver`

public interface Resolver
Property Name Expression Resolver.

Methods such as PropertyUtilsBean's `setNestedProperty()` method use a `Resolver` to process a property name expression and resolve nested, indexed and mapped property names. The following code provides an example usage demonstrating all the methods:

     // Iterate through a nested property expression
     while (resolver.hasNested(name)) {

         // isolate a single property from a nested expression
         String next = resolver.next(name);

         // Process...
         String property = resolver.getProperty(next);
         if (resolver.isIndexed(next)) {

             int index = resolver.getIndex(next);
             bean = getIndexedProperty(bean, property, index);

         } else if (resolver.isMapped(next)) {

             String key = resolver.getKey(next);
             bean = getMappedProperty(bean, property, key);

         } else {

             bean = getSimpleProperty(bean, property);

         }

         // remove the processed property from the expression
         name = resolver.remove(name);
     }

In order to create an implementation, it is important to understand how BeanUtils/PropertyUtils uses the `resolver`. The following are the main methods that use it:

- `PropertyUtilsBean`
  - `PropertyUtilsBean.getIndexedProperty(Object, String)`
  - `PropertyUtilsBean.getMappedProperty(Object, String)`
  - `PropertyUtilsBean.getNestedProperty(Object, String)`
  - `PropertyUtilsBean.getPropertyDescriptor(Object, String)`
  - `PropertyUtilsBean.getSimpleProperty(Object, String)`
  - `PropertyUtilsBean.setIndexedProperty(Object, String, Object)`
  - `PropertyUtilsBean.setMappedProperty(Object, String, Object)`
  - `PropertyUtilsBean.setNestedProperty(Object, String, Object)`
  - `PropertyUtilsBean.setSimpleProperty(Object, String, Object)`
- `BeanUtilsBean`
  - `BeanUtilsBean.copyProperty(Object, String, Object)`
  - `BeanUtilsBean.setProperty(Object, String, Object)`
- `LocaleBeanUtilsBean`
  - `LocaleBeanUtilsBean.setProperty(Object, String, Object, String)`

Since:
  1.8.0
See Also:
  - `PropertyUtilsBean.setResolver(Resolver)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `getIndex(String expression)`
  Extract the index value from the property expression or -1.
  `String`
  `getKey(String expression)`
  Extract 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.

- ## Method Details

  - ### getIndex

    int getIndex(String expression)
    Extract the index value from the property expression or -1.
    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

    String getKey(String expression)
    Extract the map key from the property expression or `null`.
    Parameters:
      `expression` - The property expression
    Returns:
      The index value
    Throws:
      `IllegalArgumentException` - If the mapped property is illegally formed

  - ### getProperty

    String getProperty(String expression)
    Gets the property name from the property expression.
    Parameters:
      `expression` - The property expression
    Returns:
      The property name

  - ### hasNested

    boolean hasNested(String expression)
    Indicates whether or not the expression contains nested property expressions or not.
    Parameters:
      `expression` - The property expression
    Returns:
      The next property expression

  - ### isIndexed

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

  - ### isMapped

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

  - ### next

    String next(String expression)
    Extract the next property expression from the current expression.
    Parameters:
      `expression` - The property expression
    Returns:
      The next property expression

  - ### remove

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