Example usage for org.springframework.beans AbstractNestablePropertyAccessor getWrappedInstance

List of usage examples for org.springframework.beans AbstractNestablePropertyAccessor getWrappedInstance

Introduction

In this page you can find the example usage for org.springframework.beans AbstractNestablePropertyAccessor getWrappedInstance.

Prototype

public final Object getWrappedInstance() 

Source Link

Usage

From source file:org.springframework.beans.AbstractNestablePropertyAccessor.java

/**
 * Create a new accessor for the given object,
 * registering a nested path that the object is in.
 * @param object object wrapped by this accessor
 * @param nestedPath the nested path of the object
 * @param parent the containing accessor (must not be {@code null})
 *//*w  w  w . ja  v  a2 s  . c o m*/
protected AbstractNestablePropertyAccessor(Object object, String nestedPath,
        AbstractNestablePropertyAccessor parent) {
    setWrappedInstance(object, nestedPath, parent.getWrappedInstance());
    setExtractOldValueForEditor(parent.isExtractOldValueForEditor());
    setAutoGrowNestedPaths(parent.isAutoGrowNestedPaths());
    setAutoGrowCollectionLimit(parent.getAutoGrowCollectionLimit());
    setConversionService(parent.getConversionService());
}

From source file:org.springframework.beans.AbstractNestablePropertyAccessor.java

/**
 * Retrieve a Property accessor for the given nested property.
 * Create a new one if not found in the cache.
 * <p>Note: Caching nested PropertyAccessors is necessary now,
 * to keep registered custom editors for nested properties.
 * @param nestedProperty property to create the PropertyAccessor for
 * @return the PropertyAccessor instance, either cached or newly created
 *///from   w ww.  j a va  2s . c  om
private AbstractNestablePropertyAccessor getNestedPropertyAccessor(String nestedProperty) {
    if (this.nestedPropertyAccessors == null) {
        this.nestedPropertyAccessors = new HashMap<>();
    }
    // Get value of bean property.
    PropertyTokenHolder tokens = getPropertyNameTokens(nestedProperty);
    String canonicalName = tokens.canonicalName;
    Object value = getPropertyValue(tokens);
    if (value == null || (value instanceof Optional && !((Optional) value).isPresent())) {
        if (isAutoGrowNestedPaths()) {
            value = setDefaultValue(tokens);
        } else {
            throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + canonicalName);
        }
    }

    // Lookup cached sub-PropertyAccessor, create new one if not found.
    AbstractNestablePropertyAccessor nestedPa = this.nestedPropertyAccessors.get(canonicalName);
    if (nestedPa == null || nestedPa.getWrappedInstance() != ObjectUtils.unwrapOptional(value)) {
        if (logger.isTraceEnabled()) {
            logger.trace("Creating new nested " + getClass().getSimpleName() + " for property '" + canonicalName
                    + "'");
        }
        nestedPa = newNestedPropertyAccessor(value,
                this.nestedPath + canonicalName + NESTED_PROPERTY_SEPARATOR);
        // Inherit all type-specific PropertyEditors.
        copyDefaultEditorsTo(nestedPa);
        copyCustomEditorsTo(nestedPa, canonicalName);
        this.nestedPropertyAccessors.put(canonicalName, nestedPa);
    } else {
        if (logger.isTraceEnabled()) {
            logger.trace("Using cached nested property accessor for property '" + canonicalName + "'");
        }
    }
    return nestedPa;
}