Example usage for org.springframework.data.mapping PropertyHandler PropertyHandler

List of usage examples for org.springframework.data.mapping PropertyHandler PropertyHandler

Introduction

In this page you can find the example usage for org.springframework.data.mapping PropertyHandler PropertyHandler.

Prototype

PropertyHandler

Source Link

Usage

From source file:com.frank.search.solr.core.schema.SolrSchemaResolver.java

public SchemaDefinition resolveSchemaForEntity(SolrPersistentEntity<?> entity) {

    Assert.notNull(entity, "Schema cannot be resolved for 'null'.");

    final SchemaDefinition schemaDefinition = new SchemaDefinition(entity.getSolrCoreName());

    entity.doWithProperties(new PropertyHandler<SolrPersistentProperty>() {

        @Override/*from w w w  . j  a  v  a 2s  . co m*/
        public void doWithPersistentProperty(SolrPersistentProperty persistentProperty) {

            SchemaDefinition.FieldDefinition fieldDefinition = createFieldDefinitionForProperty(
                    persistentProperty);
            if (fieldDefinition != null) {
                schemaDefinition.addFieldDefinition(fieldDefinition);
            }
        }
    });

    return schemaDefinition;
}

From source file:org.oasis.datacore.sdk.data.spring.DatacoreMappingMongoConverter.java

protected void writeInternal(Object obj, final DBObject dbo, MongoPersistentEntity<?> entity) {

    if (obj == null) {
        return;//from  w ww . j  av a 2s.c  om
    }

    if (null == entity) {
        throw new MappingException("No mapping metadata found for entity of type " + obj.getClass().getName());
    }

    final BeanWrapper<MongoPersistentEntity<Object>, Object> wrapper = BeanWrapper.create(obj,
            conversionService);
    final MongoPersistentProperty idProperty = entity.getIdProperty();

    if (!dbo.containsField("_id") && null != idProperty) {

        boolean fieldAccessOnly = idProperty.usePropertyAccess() ? false : useFieldAccessOnly;

        try {
            Object id = wrapper.getProperty(idProperty, Object.class, fieldAccessOnly);
            dbo.put("_id", idMapper.convertId(id));
        } catch (ConversionException ignored) {
        }
    }

    // Write the properties
    entity.doWithProperties(new PropertyHandler<MongoPersistentProperty>() {
        public void doWithPersistentProperty(MongoPersistentProperty prop) {

            if (prop.equals(idProperty)) {
                return;
            }

            boolean fieldAccessOnly = prop.usePropertyAccess() ? false : useFieldAccessOnly;

            Object propertyObj = wrapper.getProperty(prop, prop.getType(), fieldAccessOnly);

            //if (null != propertyObj) { // [Ozwillo] HACK to allow unset / set to null at save
            if (/*[Ozwillo] HACK*/null != propertyObj
                    && /*[Ozwillo] END*/!conversions.isSimpleType(propertyObj.getClass())) {
                writePropertyInternal(propertyObj, dbo, prop);
            } else {
                writeSimpleInternal(propertyObj, dbo, prop.getFieldName());
            }
            //} // [Ozwillo] HACK
        }
    });

    entity.doWithAssociations(new AssociationHandler<MongoPersistentProperty>() {
        public void doWithAssociation(Association<MongoPersistentProperty> association) {
            MongoPersistentProperty inverseProp = association.getInverse();
            Class<?> type = inverseProp.getType();
            Object propertyObj = wrapper.getProperty(inverseProp, type, useFieldAccessOnly);
            //if (null != propertyObj) { // [Ozwillo] HACK to allow unset / set to null at save
            writePropertyInternal(propertyObj, dbo, inverseProp);
            //} // [Ozwillo] HACK
        }
    });

    // [Ozwillo] HACK to persist Datacore model fields at root level NOT FOR NOW
    /*if ("DCEntity".equals(entity.getName())) {
       DCEntity dcEntity = (DCEntity) object;
       DCModel dcModel = dcModelService.getModel(dcEntity.getType());
       for (DCField dcField : dcModel.getAllFields()) {
            
       }
    }*/
}

From source file:com.turbospaces.model.BO.java

/**
 * create business object over actual basic persistent entity
 * /*  ww w . j a  v  a  2 s  .com*/
 * @param delegate
 *            the actual persistent entity meta-data provider
 * @throws NoSuchMethodException
 *             re-throw cglib exception
 * @throws SecurityException
 *             re-throw cglib exception
 * @throws IntrospectionException
 *             re-throw exceptions
 */
public BO(final BasicPersistentEntity delegate)
        throws SecurityException, NoSuchMethodException, IntrospectionException {
    this.delegate = delegate;
    this.fastConstructor = FastClass.create(delegate.getType())
            .getConstructor(delegate.getType().getConstructor());

    // find optimistic lock version/routing fields
    {
        final Collection<PersistentProperty> versionCandidates = Lists.newLinkedList();
        final Collection<PersistentProperty> routingCandidates = Lists.newLinkedList();
        delegate.doWithProperties(new PropertyHandler() {
            @Override
            public void doWithPersistentProperty(final PersistentProperty persistentProperty) {
                PropertyDescriptor propertyDescriptor = persistentProperty.getPropertyDescriptor();
                Field field = persistentProperty.getField();

                if (hasAnnotation(propertyDescriptor, field, Version.class))
                    versionCandidates.add(persistentProperty);
                if (hasAnnotation(propertyDescriptor, field, Routing.class))
                    routingCandidates.add(persistentProperty);
            }

            private boolean hasAnnotation(final PropertyDescriptor descriptor, final Field field,
                    final Class annotation) {
                if (descriptor != null && descriptor.getReadMethod() != null
                        && descriptor.getReadMethod().getAnnotation(annotation) != null)
                    return true;
                if (field != null && field.getAnnotation(annotation) != null)
                    return true;
                return false;
            }
        });
        Preconditions.checkArgument(versionCandidates.size() <= 1,
                "too many fields marked with @Version annotation, candidates = "
                        + versionCandidates.toString());
        Preconditions.checkArgument(routingCandidates.size() <= 1,
                "too many fields marked with @Routing annotation, candidates = "
                        + routingCandidates.toString());

        if (!versionCandidates.isEmpty())
            optimisticLockVersionProperty = versionCandidates.iterator().next();
        if (!routingCandidates.isEmpty())
            routingProperty = routingCandidates.iterator().next();
    }

    {
        // Java Beans convention marker
        AtomicBoolean propertyAccess = new AtomicBoolean(true);

        List<String> setters = Lists.newLinkedList();
        List<String> getters = Lists.newLinkedList();
        List<Class<?>> types = Lists.newLinkedList();

        for (PersistentProperty<?> persistentProperty : getOrderedProperties()) {
            PropertyDescriptor propertyDescriptor = persistentProperty.getPropertyDescriptor();
            if (propertyDescriptor != null) {
                if (propertyDescriptor.getReadMethod() != null && propertyDescriptor.getWriteMethod() != null) {
                    setters.add(propertyDescriptor.getWriteMethod().getName());
                    getters.add(propertyDescriptor.getReadMethod().getName());
                    types.add(persistentProperty.getType());
                }
            } else {
                propertyAccess.set(false);
                brokenProperties.add(persistentProperty);
            }
        }

        if (propertyAccess.get())
            // create properties extract for all persistent properties
            bulkBean = BulkBean.create(delegate.getType(), getters.toArray(new String[getters.size()]),
                    setters.toArray(new String[setters.size()]), types.toArray(new Class[types.size()]));
        else
            Log.warn(String.format(
                    "PropetiesSerializer-%s unable to use getters-setters access optimization. Suspected/Corrupted properties = %s",
                    delegate.getType().getSimpleName(), getBrokenProperties()));

        boolean canOptimizeIdProperty = hasReadWriteMethods(delegate.getIdProperty());
        boolean canOptimizeVersionProperty = hasReadWriteMethods(getOptimisticLockVersionProperty());
        boolean canOptimizeRoutingProperty = hasReadWriteMethods(getRoutingProperty());

        // create id/version/routing bulk fields extractor
        if (canOptimizeIdProperty && canOptimizeVersionProperty && canOptimizeRoutingProperty) {
            String[] g = new String[] {
                    delegate.getIdProperty().getPropertyDescriptor().getReadMethod().getName(),
                    getOptimisticLockVersionProperty().getPropertyDescriptor().getReadMethod().getName(),
                    getRoutingProperty().getPropertyDescriptor().getReadMethod().getName() };
            String[] s = new String[] {
                    delegate.getIdProperty().getPropertyDescriptor().getWriteMethod().getName(),
                    getOptimisticLockVersionProperty().getPropertyDescriptor().getWriteMethod().getName(),
                    getRoutingProperty().getPropertyDescriptor().getWriteMethod().getName() };
            Class<?>[] c = new Class[] { delegate.getIdProperty().getType(),
                    getOptimisticLockVersionProperty().getType(), getRoutingProperty().getType() };

            idVersionRoutingBulkBean = BulkBean.create(delegate.getType(), g, s, c);
        }
    }
}

From source file:org.develspot.data.orientdb.convert.MappingOrientConverter.java

@SuppressWarnings("unchecked")
private <S extends Object> S read(final OrientPersistentEntity<S> entity, final OrientElement dbObject,
        boolean lazy) {
    OrientMappingInstance mappingInstance = MappingInstanceHolder.getMappingInstance();

    //check if entity is already loaded
    if (mappingInstance.instanceLoaded(dbObject.getId())) {
        return (S) mappingInstance.get(dbObject.getId());
    }/* w w w .j  ava  2s . co m*/

    EntityInstantiator instantiator = instantiators.getInstantiatorFor(entity);
    final DefaultOrientPropertyValueProvider objectResolver = new DefaultOrientPropertyValueProvider(dbObject,
            this, spELContext, lazy);

    PersistentEntityParameterValueProvider<OrientPersistentProperty> parameterProvider = new PersistentEntityParameterValueProvider<OrientPersistentProperty>(
            entity, objectResolver, null);

    S instance = instantiator.createInstance(entity, parameterProvider);
    final BeanWrapper<OrientPersistentEntity<S>, S> wrapper = BeanWrapper.create(instance, conversionService);

    final S result = wrapper.getBean();
    mappingInstance.addInstance(dbObject.getId(), result);

    // Set properties not already set in the constructor
    entity.doWithProperties(new PropertyHandler<OrientPersistentProperty>() {
        public void doWithPersistentProperty(OrientPersistentProperty prop) {
            if (!prop.isIdProperty() && (dbObject.getProperty(prop.getField().getName()) == null
                    || entity.isConstructorArgument(prop))) {
                return;
            }
            Object obj = objectResolver.getPropertyValue(prop);
            wrapper.setProperty(prop, obj, fieldAccessOnly);
        }
    });

    entity.doWithAssociations(new AssociationHandler<OrientPersistentProperty>() {
        public void doWithAssociation(Association<OrientPersistentProperty> association) {
            OrientPersistentProperty inverse = association.getInverse();
            Object resolved = objectResolver.getPropertyValue(inverse);
            wrapper.setProperty(inverse, resolved);

        }
    });
    return result;
}

From source file:com.couchbase.spring.core.convert.MappingCouchbaseConverter.java

public <R> R read(Class<R> type, final ConvertedCouchbaseDocument doc, Object parent) {
    final CouchbasePersistentEntity<R> entity = (CouchbasePersistentEntity<R>) mappingContext
            .getPersistentEntity(type);/*  ww w  .  ja v  a 2s. c om*/

    ParameterValueProvider<CouchbasePersistentProperty> provider = getParameterProvider(entity, doc, parent);
    EntityInstantiator instantiator = instantiators.getInstantiatorFor(entity);
    R instance = instantiator.createInstance(entity, provider);

    final BeanWrapper<CouchbasePersistentEntity<R>, R> wrapper = BeanWrapper.create(instance,
            conversionService);
    final R result = wrapper.getBean();

    // Set properties not already set in the constructor
    entity.doWithProperties(new PropertyHandler<CouchbasePersistentProperty>() {
        public void doWithPersistentProperty(CouchbasePersistentProperty prop) {

            boolean isConstructorProperty = entity.isConstructorArgument(prop);
            boolean hasValueForProperty = doc.containsField(prop.getFieldName());

            if (!hasValueForProperty || isConstructorProperty) {
                return;
            }

            Object obj = null;
            if (prop.isIdProperty()) {
                obj = doc.getId();
            } else {
                obj = doc.get(prop.getFieldName());
            }
            wrapper.setProperty(prop, obj, useFieldAccessOnly);
        }
    });

    return result;
}

From source file:com.couchbase.spring.core.convert.MappingCouchbaseConverter.java

protected void writeInternal(final Object source, ConvertedCouchbaseDocument target, TypeInformation<?> type)
        throws IOException {
    CouchbasePersistentEntity<?> entity = mappingContext.getPersistentEntity(source.getClass());

    if (entity == null) {
        throw new MappingException(
                "No mapping metadata found for entity of type " + source.getClass().getName());
    }// w w w  .  j  ava  2  s. c o  m

    final CouchbasePersistentProperty idProperty = entity.getIdProperty();
    if (idProperty == null) {
        throw new MappingException("ID property required for entity of type " + source.getClass().getName());
    }

    final BeanWrapper<CouchbasePersistentEntity<Object>, Object> wrapper = BeanWrapper.create(source,
            conversionService);

    String id = wrapper.getProperty(idProperty, String.class, false);
    target.setId(id);
    target.setExpiry(entity.getExpiry());

    JsonFactory jsonFactory = new JsonFactory();
    OutputStream jsonStream = new ByteArrayOutputStream();
    final JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(jsonStream, JsonEncoding.UTF8);
    jsonGenerator.setCodec(new ObjectMapper());

    jsonGenerator.writeStartObject();
    entity.doWithProperties(new PropertyHandler<CouchbasePersistentProperty>() {
        @Override
        public void doWithPersistentProperty(CouchbasePersistentProperty prop) {
            if (prop.equals(idProperty)) {
                return;
            }

            Object propertyValue = wrapper.getProperty(prop, prop.getType(), false);
            if (propertyValue != null) {
                try {
                    jsonGenerator.writeFieldName(prop.getFieldName());
                    jsonGenerator.writeObject(propertyValue);
                } catch (IOException ex) {
                    throw new MappingException(
                            "Could not translate to JSON while converting " + source.getClass().getName());
                }
            }

        }
    });
    jsonGenerator.writeEndObject();
    jsonGenerator.close();

    target.setRawValue(jsonStream.toString());
}

From source file:com.frank.search.solr.core.convert.MappingSolrConverter.java

private <S extends Object> S read(final SolrPersistentEntity<S> entity, final Map<String, ?> source,
        Object parent) {//from   w  w w  . j a v  a  2  s  .  c om
    ParameterValueProvider<SolrPersistentProperty> parameterValueProvider = getParameterValueProvider(entity,
            source, parent);

    EntityInstantiator instantiator = instantiators.getInstantiatorFor(entity);
    final S instance = instantiator.createInstance(entity, parameterValueProvider);
    final PersistentPropertyAccessor accessor = new ConvertingPropertyAccessor(
            entity.getPropertyAccessor(instance), getConversionService());

    entity.doWithProperties(new PropertyHandler<SolrPersistentProperty>() {

        @Override
        public void doWithPersistentProperty(SolrPersistentProperty persistentProperty) {
            if (entity.isConstructorArgument(persistentProperty)) {
                return;
            }

            Object o = getValue(persistentProperty, source, instance);
            if (o != null) {
                accessor.setProperty(persistentProperty, o);
            }
        }
    });

    return instance;
}

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  . j  a  va  2s  .c o  m*/
 * @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();
}

From source file:com.frank.search.solr.core.convert.MappingSolrConverter.java

@SuppressWarnings("rawtypes")
protected void write(Object source, final Map target, SolrPersistentEntity<?> entity) {

    final PersistentPropertyAccessor accessor = new ConvertingPropertyAccessor(
            entity.getPropertyAccessor(source), getConversionService());

    entity.doWithProperties(new PropertyHandler<SolrPersistentProperty>() {

        @SuppressWarnings("unchecked")
        @Override//from w  ww.j  av  a 2 s.c  o  m
        public void doWithPersistentProperty(SolrPersistentProperty persistentProperty) {

            Object value = accessor.getProperty(persistentProperty);
            if (value == null || persistentProperty.isReadonly()) {
                return;
            }

            if (persistentProperty.containsWildcard() && !persistentProperty.isMap()) {
                throw new IllegalArgumentException("Field '" + persistentProperty.getFieldName()
                        + "' must not contain wildcards. Consider excluding Field from beeing indexed.");
            }

            Collection<SolrInputField> fields;
            if (persistentProperty.isMap() && persistentProperty.containsWildcard()) {
                fields = writeWildcardMapPropertyToTarget(target, persistentProperty, (Map<?, ?>) value);
            } else {
                fields = writeRegularPropertyToTarget(target, persistentProperty, value);
            }

            if (persistentProperty.isBoosted()) {
                for (SolrInputField field : fields) {
                    field.setBoost(persistentProperty.getBoost());
                }
            }
        }
    });

    if (entity.isBoosted() && target instanceof SolrInputDocument) {
        ((SolrInputDocument) target).setDocumentBoost(entity.getBoost());
    }

}

From source file:com.joyveb.dbpimpl.cass.prepare.convert.MappingCassandraConverter.java

@Override
public CreateTableSpecification getCreateTableSpecification(CassandraPersistentEntity<?> entity) {

    final CreateTableSpecification spec = new CreateTableSpecification();

    spec.name(entity.getTableName());//from   w ww  .  j av  a  2 s.  c  o m

    final List<CassandraPersistentProperty> partitionKeyProperties = new ArrayList<CassandraPersistentProperty>(
            5);
    final List<CassandraPersistentProperty> clusteringKeyProperties = new ArrayList<CassandraPersistentProperty>(
            5);

    doWithAllProperties(entity, new PropertyHandler<CassandraPersistentProperty>() {
        public void doWithPersistentProperty(CassandraPersistentProperty prop) {

            if (prop.isIdProperty()) {
                partitionKeyProperties.add(prop);
            } else if (prop.getKeyPart() == KeyPart.PARTITION) {
                partitionKeyProperties.add(prop);
            } else if (prop.getKeyPart() == KeyPart.CLUSTERING) {
                clusteringKeyProperties.add(prop);
            } else {
                spec.column(prop.getColumnName(), prop.getDataType());
            }

        }
    });

    if (partitionKeyProperties.isEmpty()) {
        throw new MappingException("not found partition key in the entity " + entity.getType());
    }

    /*
     * Sort primary key properties by ordinal
     */

    Collections.sort(partitionKeyProperties, OrdinalBasedPropertyComparator.INSTANCE);
    Collections.sort(clusteringKeyProperties, OrdinalBasedPropertyComparator.INSTANCE);

    /*
     * Add ordered primary key columns to the specification
     */

    for (CassandraPersistentProperty prop : partitionKeyProperties) {
        spec.partitionKeyColumn(prop.getColumnName(), prop.getDataType());
    }

    for (CassandraPersistentProperty prop : clusteringKeyProperties) {
        spec.clusteringKeyColumn(prop.getColumnName(), prop.getDataType(), prop.getOrdering());
    }

    return spec;

}