diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DefaultEntityStateAccessors.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DefaultEntityStateAccessors.java index 3e706d9b1..4d086518c 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DefaultEntityStateAccessors.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DefaultEntityStateAccessors.java @@ -3,7 +3,6 @@ package org.springframework.datastore.graph.neo4j.fieldaccess; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.datastore.graph.api.GraphBacked; -import org.springframework.datastore.graph.neo4j.support.GraphDatabaseContext; import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; @@ -19,7 +18,6 @@ public abstract class DefaultEntityStateAccessors type; - protected final GraphDatabaseContext graphDatabaseContext; private final Map> fieldAccessors=new HashMap>(); private final Map>> fieldAccessorListeners=new HashMap>>(); private STATE state; @@ -27,13 +25,12 @@ public abstract class DefaultEntityStateAccessors type, final GraphDatabaseContext graphDatabaseContext, final DelegatingFieldAccessorFactory delegatingFieldAccessorFactory) { + public DefaultEntityStateAccessors(final STATE underlyingState, final ENTITY entity, final Class type, final DelegatingFieldAccessorFactory delegatingFieldAccessorFactory) { this.underlyingState = underlyingState; this.entity = entity; this.type = type; - this.graphDatabaseContext = graphDatabaseContext; this.delegatingFieldAccessorFactory = delegatingFieldAccessorFactory; - createAccessorsAndListeners(type, graphDatabaseContext); + createAccessorsAndListeners(type); } @Override @@ -44,21 +41,16 @@ public abstract class DefaultEntityStateAccessors type, final GraphDatabaseContext graphDatabaseContext) { + private void createAccessorsAndListeners(final Class type) { ReflectionUtils.doWithFields(type, new ReflectionUtils.FieldCallback() { public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException { fieldAccessors.put(field, delegatingFieldAccessorFactory.forField(field)); - fieldAccessorListeners.put(field, delegatingFieldAccessorFactory.listenersFor(field)); // TODO Bad code + fieldAccessorListeners.put(field, delegatingFieldAccessorFactory.listenersFor(field)); } }); } diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DetachableEntityStateAccessors.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DetachableEntityStateAccessors.java index de718ddbb..d0b68955c 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DetachableEntityStateAccessors.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DetachableEntityStateAccessors.java @@ -21,9 +21,11 @@ public class DetachableEntityStateAccessors, S private final Map dirty = new HashMap(); private final EntityStateAccessors delegate; private final static Log log = LogFactory.getLog(DetachableEntityStateAccessors.class); + private GraphDatabaseContext graphDatabaseContext; - public DetachableEntityStateAccessors(final EntityStateAccessors delegate) { + public DetachableEntityStateAccessors(final EntityStateAccessors delegate, GraphDatabaseContext graphDatabaseContext) { this.delegate = delegate; + this.graphDatabaseContext = graphDatabaseContext; } @Override @@ -36,11 +38,6 @@ public class DetachableEntityStateAccessors, S return delegate.getEntity(); } - @Override - public GraphDatabaseContext getGraphDatabaseContext() { - return delegate.getGraphDatabaseContext(); - } - @Override public Object getValue(final Field field) { if (!transactionIsRunning()) { @@ -54,7 +51,7 @@ public class DetachableEntityStateAccessors, S } private boolean transactionIsRunning() { - return delegate.getGraphDatabaseContext().transactionIsRunning(); + return getGraphDatabaseContext().transactionIsRunning(); } @Override @@ -151,6 +148,9 @@ public class DetachableEntityStateAccessors, S this.dirty.put(f, previousValue); } + public GraphDatabaseContext getGraphDatabaseContext() { + return graphDatabaseContext; + } } diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/EntityStateAccessors.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/EntityStateAccessors.java index 36b363072..47c0ea5bc 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/EntityStateAccessors.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/EntityStateAccessors.java @@ -14,8 +14,6 @@ import java.lang.reflect.Field; public interface EntityStateAccessors,STATE> { ENTITY getEntity(); - GraphDatabaseContext getGraphDatabaseContext(); - void setUnderlyingState(STATE state); Object getValue(Field field); diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessors.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessors.java index 27df39394..0f82ab738 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessors.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessors.java @@ -15,8 +15,10 @@ import java.util.Collection; */ public class NodeEntityStateAccessors extends DefaultEntityStateAccessors { + private final GraphDatabaseContext graphDatabaseContext; + public NodeEntityStateAccessors(final Node underlyingState, final ENTITY entity, final Class type, final GraphDatabaseContext graphDatabaseContext) { - super(underlyingState, entity, type, graphDatabaseContext, new DelegatingFieldAccessorFactory(graphDatabaseContext) { + super(underlyingState, entity, type, new DelegatingFieldAccessorFactory(graphDatabaseContext) { @Override protected Collection> createListenerFactories() { return Arrays.>asList( @@ -39,6 +41,7 @@ public class NodeEntityStateAccessors extends Default ); } }); + this.graphDatabaseContext = graphDatabaseContext; } @Override diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessorsFactory.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessorsFactory.java index 97321b7ce..2952c203a 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessorsFactory.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodeEntityStateAccessorsFactory.java @@ -11,6 +11,6 @@ public class NodeEntityStateAccessorsFactory { public EntityStateAccessors getEntityStateAccessors(final NodeBacked entity) { return new DetachableEntityStateAccessors( - new NodeEntityStateAccessors(null,entity,entity.getClass(), graphDatabaseContext)); + new NodeEntityStateAccessors(null,entity,entity.getClass(), graphDatabaseContext),graphDatabaseContext); } } diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/RelationshipEntityStateAccessors.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/RelationshipEntityStateAccessors.java index c78bec7cf..16cdc24b9 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/RelationshipEntityStateAccessors.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/RelationshipEntityStateAccessors.java @@ -17,7 +17,7 @@ import java.util.Collections; public class RelationshipEntityStateAccessors extends DefaultEntityStateAccessors { public RelationshipEntityStateAccessors(final Relationship underlyingState, final ENTITY entity, final Class type, final GraphDatabaseContext graphDatabaseContext) { - super(underlyingState, entity, type, graphDatabaseContext, new DelegatingFieldAccessorFactory(graphDatabaseContext) { + super(underlyingState, entity, type, new DelegatingFieldAccessorFactory(graphDatabaseContext) { @Override protected Collection> createListenerFactories() { return Collections.emptyList();