org.apache.commons.beanutils.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 expresion
                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
  Version:
    $Id$
  See Also:
    `PropertyUtilsBean.setResolver(Resolver)`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and 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)` Return 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 expresson from the current expression.

- - ### Method Detail

    - #### 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)

      Return 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 expresion 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 expresion 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 expresson 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

Copyright © 2000–2019 The Apache Software Foundation. All rights reserved.