DATAGRAPH-526 - Adapt to API changes for SPRINGDATACMNS-DATACMNS-781

This commit is contained in:
Michael Hunger
2014-11-20 11:56:03 +01:00
parent e27287a4e1
commit 2204c9dc4d
6 changed files with 34 additions and 31 deletions

View File

@@ -17,7 +17,9 @@
package org.springframework.data.neo4j.mapping;
import org.neo4j.graphdb.PropertyContainer;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.neo4j.support.mapping.StoredEntityType;
import java.util.Collection;
@@ -50,4 +52,6 @@ public interface Neo4jPersistentEntity<T> extends PersistentEntity<T, Neo4jPersi
boolean isUnique();
Collection<String> getAllLabels();
PersistentPropertyAccessor getPropertyAccessor(Object entity, ConversionService conversionService);
}

View File

@@ -28,7 +28,6 @@ import org.springframework.core.convert.ConversionService;
import org.springframework.data.mapping.Association;
import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.model.AnnotationBasedPersistentProperty;
import org.springframework.data.mapping.model.BeanWrapper;
import org.springframework.data.mapping.model.SimpleTypeHolder;
import org.springframework.data.neo4j.annotation.EndNode;
import org.springframework.data.neo4j.annotation.Fetch;
@@ -140,9 +139,7 @@ class Neo4jPersistentPropertyImpl extends AnnotationBasedPersistentProperty<Neo4
@Override
public void setValue(Object entity, Object newValue) {
BeanWrapper<Object> wrapper = BeanWrapper.create(entity, null);
wrapper.setProperty(this, newValue);
getOwner().getPropertyAccessor(entity).setProperty(this,newValue);
}
private static boolean hasAnnotation(TypeInformation<?> typeInformation, final Class<NodeEntity> annotationClass) {
@@ -267,9 +264,7 @@ class Neo4jPersistentPropertyImpl extends AnnotationBasedPersistentProperty<Neo4
@Override
public Object getValueFromEntity(Object entity, final MappingPolicy mappingPolicy) {
BeanWrapper<Object> wrapper = BeanWrapper.create(entity, null);
return wrapper.getProperty(this);
return getOwner().getPropertyAccessor(entity).getProperty(this);
}
@SuppressWarnings("unchecked")

View File

@@ -21,8 +21,9 @@ import org.springframework.core.convert.ConversionService;
import org.springframework.data.convert.TypeMapper;
import org.springframework.data.mapping.Association;
import org.springframework.data.mapping.AssociationHandler;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.mapping.context.MappingContext;
import org.springframework.data.mapping.model.BeanWrapper;
import org.springframework.data.mapping.model.ConvertingPropertyAccessor;
import org.springframework.data.mapping.model.MappingException;
import org.springframework.data.neo4j.mapping.*;
import org.springframework.data.neo4j.mapping.ManagedEntity;
@@ -32,8 +33,6 @@ import org.springframework.data.neo4j.support.typesafety.TypeSafetyPolicy;
import org.springframework.data.util.ClassTypeInformation;
import org.springframework.data.util.TypeInformation;
import java.lang.reflect.InvocationTargetException;
/**
* @author mh
* @since 07.10.11
@@ -108,7 +107,7 @@ public class Neo4jEntityConverterImpl<T,S extends PropertyContainer> implements
@Override
public <R extends T> R loadEntity(R entity, S source, MappingPolicy mappingPolicy, Neo4jPersistentEntityImpl<R> persistentEntity, final Neo4jTemplate template) {
if (mappingPolicy.shouldLoad()) {
final BeanWrapper<R> wrapper = BeanWrapper.create(entity, conversionService);
PersistentPropertyAccessor wrapper = persistentEntity.getPropertyAccessor(entity, conversionService);
sourceStateTransmitter.copyPropertiesFrom(wrapper, source, persistentEntity,mappingPolicy, template);
// 6) handle cascading fetches
cascadeFetch(persistentEntity, wrapper, mappingPolicy, template);
@@ -121,7 +120,7 @@ public class Neo4jEntityConverterImpl<T,S extends PropertyContainer> implements
return requestedType.isAssignableFrom(storedType.getType());
}
private <R extends T> void cascadeFetch(Neo4jPersistentEntityImpl<R> persistentEntity, final BeanWrapper<R> wrapper, final MappingPolicy policy, final Neo4jTemplate template) {
private <R extends T> void cascadeFetch(Neo4jPersistentEntityImpl<R> persistentEntity, final PersistentPropertyAccessor wrapper, final MappingPolicy policy, final Neo4jTemplate template) {
persistentEntity.doWithAssociations(new AssociationHandler<Neo4jPersistentProperty>() {
@Override
public void doWithAssociation(Association<Neo4jPersistentProperty> association) {
@@ -140,7 +139,7 @@ public class Neo4jEntityConverterImpl<T,S extends PropertyContainer> implements
});
}
private <R> Object getProperty(BeanWrapper<R> wrapper, Neo4jPersistentProperty property) {
private <R> Object getProperty(PersistentPropertyAccessor wrapper, Neo4jPersistentProperty property) {
try {
return wrapper.getProperty(property);
} catch (Exception e) {
@@ -158,7 +157,7 @@ public class Neo4jEntityConverterImpl<T,S extends PropertyContainer> implements
return;
}
final BeanWrapper<T> wrapper = BeanWrapper.create(source, conversionService);
PersistentPropertyAccessor wrapper = persistentEntity.getPropertyAccessor(source,conversionService);
if (target == null) {
target = entityStateHandler.useOrCreateState(source,target, annotationProvidedRelationshipType ); // todo handling of changed state
entityStateHandler.setPersistentState(source, target);

View File

@@ -19,7 +19,8 @@ import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.graphdb.Relationship;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.mapping.model.BeanWrapper;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.mapping.model.ConvertingPropertyAccessor;
import org.springframework.data.neo4j.mapping.MappingPolicy;
import org.springframework.data.neo4j.mapping.Neo4jPersistentEntity;
import org.springframework.data.neo4j.mapping.Neo4jPersistentProperty;
@@ -55,22 +56,22 @@ public class Neo4jEntityFetchHandler {
if (property.getTypeInformation().isCollectionLike()) {
List<Object> replacement = new ArrayList<Object>();
for (Object inner : ((Iterable) value)) {
final BeanWrapper<Object> innerWrapper = BeanWrapper.create(inner, conversionService);
PersistentPropertyAccessor propertyAccessor = persistentEntity.getPropertyAccessor(inner, conversionService);
final PropertyContainer state = entityStateHandler.getPersistentState(inner);
fetchValue(innerWrapper, state, persistentEntity, mappingPolicy, template);
fetchValue(propertyAccessor, state, persistentEntity, mappingPolicy, template);
replacement.add(inner);
//sourceStateTransmitter.copyPropertiesFrom(innerWrapper, entityStateHandler.<S>getPersistentState(inner), persistentEntity);
}
return replacement;
} else {
final BeanWrapper<Object> innerWrapper = BeanWrapper.create(value, conversionService);
PersistentPropertyAccessor innerWrapper = persistentEntity.getPropertyAccessor(value,conversionService);
final PropertyContainer state = entityStateHandler.getPersistentState(value);
fetchValue(innerWrapper, state, persistentEntity, mappingPolicy, template);
// sourceStateTransmitter.copyPropertiesFrom(innerWrapper, entityStateHandler.<S>getPersistentState(value), persistentEntity);
}
return value;
}
public void fetchValue(final BeanWrapper<Object> wrapper, PropertyContainer source, Neo4jPersistentEntity<Object> persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) {
public void fetchValue(final PersistentPropertyAccessor wrapper, PropertyContainer source, Neo4jPersistentEntity<Object> persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) {
if (persistentEntity.isNodeEntity()) {
nodeStateTransmitter.copyPropertiesFrom(wrapper, (Node) source,persistentEntity, mappingPolicy, template);
}

View File

@@ -22,11 +22,10 @@ import java.util.*;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.graphdb.Relationship;
import org.springframework.data.mapping.Association;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.PropertyHandler;
import org.springframework.data.mapping.SimplePropertyHandler;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.mapping.*;
import org.springframework.data.mapping.model.BasicPersistentEntity;
import org.springframework.data.mapping.model.ConvertingPropertyAccessor;
import org.springframework.data.mapping.model.MappingException;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.data.neo4j.annotation.RelationshipEntity;
@@ -283,4 +282,9 @@ public class Neo4jPersistentEntityImpl<T> extends BasicPersistentEntity<T, Neo4j
}
return labels;
}
public PersistentPropertyAccessor getPropertyAccessor(Object source, ConversionService conversionService) {
PersistentPropertyAccessor accessor = getPropertyAccessor(source);
return conversionService == null ? accessor : new ConvertingPropertyAccessor(accessor,conversionService);
}
}

View File

@@ -18,8 +18,8 @@ package org.springframework.data.neo4j.support.mapping;
import org.neo4j.graphdb.*;
import org.springframework.data.mapping.Association;
import org.springframework.data.mapping.AssociationHandler;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.mapping.PropertyHandler;
import org.springframework.data.mapping.model.BeanWrapper;
import org.springframework.data.mapping.model.MappingException;
import org.springframework.data.neo4j.core.EntityState;
import org.springframework.data.neo4j.core.UpdateableState;
@@ -41,8 +41,8 @@ public class SourceStateTransmitter<S extends PropertyContainer> {
this.entityStateFactory = entityStateFactory;
}
public <R> R copyPropertiesFrom(final BeanWrapper<R> wrapper, S source, Neo4jPersistentEntity<R> persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) {
final R entity = wrapper.getBean();
public Object copyPropertiesFrom(final PersistentPropertyAccessor wrapper, S source, Neo4jPersistentEntity persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) {
final Object entity = wrapper.getBean();
final EntityState<S> entityState = entityStateFactory.getEntityState(entity, false, template);
entityState.setPersistentState(source);
persistentEntity.doWithProperties(new PropertyHandler<Neo4jPersistentProperty>() {
@@ -61,13 +61,13 @@ public class SourceStateTransmitter<S extends PropertyContainer> {
return entity;
}
private <R> void setEntityStateValue(Neo4jPersistentProperty property, EntityState<S> entityState, BeanWrapper<R> wrapper, final MappingPolicy mappingPolicy) {
private <R> void setEntityStateValue(Neo4jPersistentProperty property, EntityState<S> entityState, PersistentPropertyAccessor wrapper, final MappingPolicy mappingPolicy) {
if (!entityState.isWritable(property)) return;
final Object value = getProperty(wrapper, property);
entityState.setValue(property, value, mappingPolicy);
}
private <R> Object getProperty(BeanWrapper<R> wrapper, Neo4jPersistentProperty property) {
private <R> Object getProperty(PersistentPropertyAccessor wrapper, Neo4jPersistentProperty property) {
try {
return wrapper.getProperty(property);
} catch (Exception e) {
@@ -75,7 +75,7 @@ public class SourceStateTransmitter<S extends PropertyContainer> {
}
}
public <R> void setProperty(BeanWrapper<?> wrapper, Neo4jPersistentProperty property, Object value) {
public <R> void setProperty(PersistentPropertyAccessor wrapper, Neo4jPersistentProperty property, Object value) {
try {
wrapper.setProperty(property,value);
} catch (Exception e) {
@@ -83,13 +83,13 @@ public class SourceStateTransmitter<S extends PropertyContainer> {
}
}
private <R> Object copyEntityStatePropertyValue(Neo4jPersistentProperty property, EntityState<S> nodeState, BeanWrapper<R> wrapper, final MappingPolicy mappingPolicy) {
private <R> Object copyEntityStatePropertyValue(Neo4jPersistentProperty property, EntityState<S> nodeState, PersistentPropertyAccessor wrapper, final MappingPolicy mappingPolicy) {
final Object value = DoReturn.unwrap(nodeState.getValue(property, mappingPolicy));
setProperty(wrapper, property, value);
return value;
}
public <R> void copyPropertiesTo(final BeanWrapper<R> wrapper, S target, Neo4jPersistentEntity<R> persistentEntity, MappingPolicy mappingPolicy, final Neo4jTemplate template) {
public <R> void copyPropertiesTo(final PersistentPropertyAccessor wrapper, S target, Neo4jPersistentEntity persistentEntity, MappingPolicy mappingPolicy, final Neo4jTemplate template) {
final Transaction tx = template.getGraphDatabase().beginTx();
try {
final EntityState<S> entityState = entityStateFactory.getEntityState(wrapper.getBean(), false, template);