Example usage for org.springframework.data.mapping.model PropertyValueProvider getPropertyValue

List of usage examples for org.springframework.data.mapping.model PropertyValueProvider getPropertyValue

Introduction

In this page you can find the example usage for org.springframework.data.mapping.model PropertyValueProvider getPropertyValue.

Prototype

@Nullable
<T> T getPropertyValue(P property);

Source Link

Document

Returns a value for the given PersistentProperty .

Usage

From source file:io.twipple.springframework.data.clusterpoint.convert.DefaultClusterpointEntityConverter.java

/**
 * Read an incoming {@link ClusterpointDocument} into the target entity.
 *
 * @param entity the target entity./*from  w w w . ja  v  a2 s  . c om*/
 * @param source the document to convert.
 * @param parent an optional parent object.
 * @param <R>    the entity type.
 * @return the converted entity.
 */
@NotNull
@SuppressWarnings("unchecked")
protected <R> R read(@NotNull final ClusterpointPersistentEntity<R> entity,
        @NotNull final ClusterpointDocument source, Object parent) {
    Assert.notNull(entity);
    Assert.notNull(source);

    final DefaultSpELExpressionEvaluator evaluator = new DefaultSpELExpressionEvaluator(source, spELContext);
    ParameterValueProvider<ClusterpointPersistentProperty> parameterValueProvider = getParameterValueProvider(
            entity, source, evaluator, parent);
    final PersistentPropertyAccessor propertyAccessor = getPersistentPropertyAccessor(entity,
            parameterValueProvider);
    final PropertyValueProvider<ClusterpointPersistentProperty> propertyValueProvider = getPropertyValueProvider(
            source, propertyAccessor);

    entity.doWithProperties(new PropertyHandler<ClusterpointPersistentProperty>() {
        @Override
        public void doWithPersistentProperty(@NotNull ClusterpointPersistentProperty property) {

            Assert.notNull(property);

            if (!source.doesPropertyExist(property) || entity.isConstructorArgument(property)) {
                return;
            }

            Object obj = propertyValueProvider.getPropertyValue(property);
            setPropertyInternal(propertyAccessor, property, obj);
        }
    });

    entity.doWithAssociations(new AssociationHandler<ClusterpointPersistentProperty>() {
        @Override
        public void doWithAssociation(@NotNull Association<ClusterpointPersistentProperty> association) {

            Assert.notNull(association);

            ClusterpointPersistentProperty inverseProperty = association.getInverse();
            Object obj = propertyValueProvider.getPropertyValue(inverseProperty);
            setPropertyInternal(propertyAccessor, inverseProperty, obj);
        }
    });

    return (R) propertyAccessor.getBean();
}