From 2204c9dc4d81d8da4abec03af3ea5f7b4b759af0 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Thu, 20 Nov 2014 11:56:03 +0100 Subject: [PATCH] DATAGRAPH-526 - Adapt to API changes for SPRINGDATACMNS-DATACMNS-781 --- .../neo4j/mapping/Neo4jPersistentEntity.java | 4 ++++ .../mapping/Neo4JPersistentPropertyImpl.java | 9 ++------- .../mapping/Neo4jEntityConverterImpl.java | 13 ++++++------- .../support/mapping/Neo4jEntityFetchHandler.java | 11 ++++++----- .../mapping/Neo4jPersistentEntityImpl.java | 12 ++++++++---- .../support/mapping/SourceStateTransmitter.java | 16 ++++++++-------- 6 files changed, 34 insertions(+), 31 deletions(-) diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/mapping/Neo4jPersistentEntity.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/mapping/Neo4jPersistentEntity.java index e942e8101..5935a44f1 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/mapping/Neo4jPersistentEntity.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/mapping/Neo4jPersistentEntity.java @@ -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 extends PersistentEntity getAllLabels(); + + PersistentPropertyAccessor getPropertyAccessor(Object entity, ConversionService conversionService); } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4JPersistentPropertyImpl.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4JPersistentPropertyImpl.java index 8bf783aa8..0da5b9460 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4JPersistentPropertyImpl.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4JPersistentPropertyImpl.java @@ -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 wrapper = BeanWrapper.create(entity, null); - wrapper.setProperty(this, newValue); + getOwner().getPropertyAccessor(entity).setProperty(this,newValue); } private static boolean hasAnnotation(TypeInformation typeInformation, final Class annotationClass) { @@ -267,9 +264,7 @@ class Neo4jPersistentPropertyImpl extends AnnotationBasedPersistentProperty wrapper = BeanWrapper.create(entity, null); - return wrapper.getProperty(this); + return getOwner().getPropertyAccessor(entity).getProperty(this); } @SuppressWarnings("unchecked") diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityConverterImpl.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityConverterImpl.java index 73b181ee2..8b2100e9c 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityConverterImpl.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityConverterImpl.java @@ -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 implements @Override public R loadEntity(R entity, S source, MappingPolicy mappingPolicy, Neo4jPersistentEntityImpl persistentEntity, final Neo4jTemplate template) { if (mappingPolicy.shouldLoad()) { - final BeanWrapper 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 implements return requestedType.isAssignableFrom(storedType.getType()); } - private void cascadeFetch(Neo4jPersistentEntityImpl persistentEntity, final BeanWrapper wrapper, final MappingPolicy policy, final Neo4jTemplate template) { + private void cascadeFetch(Neo4jPersistentEntityImpl persistentEntity, final PersistentPropertyAccessor wrapper, final MappingPolicy policy, final Neo4jTemplate template) { persistentEntity.doWithAssociations(new AssociationHandler() { @Override public void doWithAssociation(Association association) { @@ -140,7 +139,7 @@ public class Neo4jEntityConverterImpl implements }); } - private Object getProperty(BeanWrapper wrapper, Neo4jPersistentProperty property) { + private Object getProperty(PersistentPropertyAccessor wrapper, Neo4jPersistentProperty property) { try { return wrapper.getProperty(property); } catch (Exception e) { @@ -158,7 +157,7 @@ public class Neo4jEntityConverterImpl implements return; } - final BeanWrapper 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); diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java index 1ad199b1f..17bbee1a1 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java @@ -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 replacement = new ArrayList(); for (Object inner : ((Iterable) value)) { - final BeanWrapper 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.getPersistentState(inner), persistentEntity); } return replacement; } else { - final BeanWrapper 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.getPersistentState(value), persistentEntity); } return value; } - public void fetchValue(final BeanWrapper wrapper, PropertyContainer source, Neo4jPersistentEntity persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) { + public void fetchValue(final PersistentPropertyAccessor wrapper, PropertyContainer source, Neo4jPersistentEntity persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) { if (persistentEntity.isNodeEntity()) { nodeStateTransmitter.copyPropertiesFrom(wrapper, (Node) source,persistentEntity, mappingPolicy, template); } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jPersistentEntityImpl.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jPersistentEntityImpl.java index 69e34902d..6335e88bc 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jPersistentEntityImpl.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jPersistentEntityImpl.java @@ -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 extends BasicPersistentEntity { this.entityStateFactory = entityStateFactory; } - public R copyPropertiesFrom(final BeanWrapper wrapper, S source, Neo4jPersistentEntity 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 entityState = entityStateFactory.getEntityState(entity, false, template); entityState.setPersistentState(source); persistentEntity.doWithProperties(new PropertyHandler() { @@ -61,13 +61,13 @@ public class SourceStateTransmitter { return entity; } - private void setEntityStateValue(Neo4jPersistentProperty property, EntityState entityState, BeanWrapper wrapper, final MappingPolicy mappingPolicy) { + private void setEntityStateValue(Neo4jPersistentProperty property, EntityState entityState, PersistentPropertyAccessor wrapper, final MappingPolicy mappingPolicy) { if (!entityState.isWritable(property)) return; final Object value = getProperty(wrapper, property); entityState.setValue(property, value, mappingPolicy); } - private Object getProperty(BeanWrapper wrapper, Neo4jPersistentProperty property) { + private Object getProperty(PersistentPropertyAccessor wrapper, Neo4jPersistentProperty property) { try { return wrapper.getProperty(property); } catch (Exception e) { @@ -75,7 +75,7 @@ public class SourceStateTransmitter { } } - public void setProperty(BeanWrapper wrapper, Neo4jPersistentProperty property, Object value) { + public void setProperty(PersistentPropertyAccessor wrapper, Neo4jPersistentProperty property, Object value) { try { wrapper.setProperty(property,value); } catch (Exception e) { @@ -83,13 +83,13 @@ public class SourceStateTransmitter { } } - private Object copyEntityStatePropertyValue(Neo4jPersistentProperty property, EntityState nodeState, BeanWrapper wrapper, final MappingPolicy mappingPolicy) { + private Object copyEntityStatePropertyValue(Neo4jPersistentProperty property, EntityState nodeState, PersistentPropertyAccessor wrapper, final MappingPolicy mappingPolicy) { final Object value = DoReturn.unwrap(nodeState.getValue(property, mappingPolicy)); setProperty(wrapper, property, value); return value; } - public void copyPropertiesTo(final BeanWrapper wrapper, S target, Neo4jPersistentEntity persistentEntity, MappingPolicy mappingPolicy, final Neo4jTemplate template) { + public void copyPropertiesTo(final PersistentPropertyAccessor wrapper, S target, Neo4jPersistentEntity persistentEntity, MappingPolicy mappingPolicy, final Neo4jTemplate template) { final Transaction tx = template.getGraphDatabase().beginTx(); try { final EntityState entityState = entityStateFactory.getEntityState(wrapper.getBean(), false, template);