DATAGRAPH-526 - Adapt to API changes for SPRINGDATACMNS-DATACMNS-781
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user