diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/ConvertingNodePropertyFieldAccessor.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/ConvertingNodePropertyFieldAccessor.java index ecc8eddb0..6aa8e84b6 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/ConvertingNodePropertyFieldAccessor.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/ConvertingNodePropertyFieldAccessor.java @@ -7,6 +7,8 @@ import org.springframework.datastore.graph.api.NodeBacked; import java.lang.reflect.Field; +import static org.springframework.datastore.graph.neo4j.fieldaccess.DoReturn.doReturn; + /** * @author Michael Hunger * @since 12.09.2010 @@ -28,8 +30,8 @@ public class ConvertingNodePropertyFieldAccessor extends NodePropertyFieldAccess } @Override - public Object getValue(final NodeBacked nodeBacked) { - return deserializePropertyValue(super.getValue(nodeBacked)); + public Object doGetValue(final NodeBacked nodeBacked) { + return deserializePropertyValue(super.doGetValue(nodeBacked)); } private Object serializePropertyValue(final Object newVal) { diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DelegatingFieldAccessorFactory.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DelegatingFieldAccessorFactory.java index 6b5c44250..e32dd3453 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DelegatingFieldAccessorFactory.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/DelegatingFieldAccessorFactory.java @@ -42,12 +42,13 @@ public class DelegatingFieldAccessorFactory implements FieldAccessorFactory fieldAccessorFactory : fieldAccessorFactories) { if (fieldAccessorFactory.accept(field)) { - System.out.println("Factory " + fieldAccessorFactory + " used for field: " + field); + if (log.isInfoEnabled()) log.info("Factory " + fieldAccessorFactory + " used for field: " + field); return fieldAccessorFactory.forField(field); } } - log.warn("No FieldAccessor configured for field: " + field); - return null; + throw new RuntimeException("No FieldAccessor configured for field: " + field); + //log.warn("No FieldAccessor configured for field: " + field); + //return null; } private boolean isAspectjField(Field field) { 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 8bd5dd4c6..210c20f62 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 @@ -38,12 +38,17 @@ public class EntityStateAccessors { public Object getValue(final Field field) { final FieldAccessor accessor = accessorFor(field); - return accessor == null ? null : accessor.getValue(entity); + if (accessor == null) { + System.err.println("No accessor for "+field); + return null; + } + else return accessor.getValue(entity); } public Object setValue(final Field field, final Object newVal) { final FieldAccessor accessor = accessorFor(field); Object result=newVal; if (accessor!=null) result = accessor.setValue(entity, newVal); + else System.err.println("No accessor for "+field); notifyListeners(field, result); // async ? return result; } diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IdFieldAccessor.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IdFieldAccessor.java index 7249dac59..bed33250c 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IdFieldAccessor.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IdFieldAccessor.java @@ -4,6 +4,8 @@ import org.springframework.datastore.graph.api.NodeBacked; import java.lang.reflect.Field; +import static org.springframework.datastore.graph.neo4j.fieldaccess.DoReturn.doReturn; + /** * @author Michael Hunger * @since 12.09.2010 @@ -17,12 +19,12 @@ public class IdFieldAccessor implements FieldAccessor { @Override public Object setValue(final NodeBacked nodeBacked, final Object newVal) { - return null; + return doReturn(null); } @Override public Object getValue(final NodeBacked nodeBacked) { - return nodeBacked.getUnderlyingNode().getId(); + return doReturn(nodeBacked.getUnderlyingNode().getId()); } public static FieldAccessorFactory factory() { diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IndexingNodePropertyFieldAccessorListener.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IndexingNodePropertyFieldAccessorListener.java index 2ba6508fe..f087ecad9 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IndexingNodePropertyFieldAccessorListener.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/IndexingNodePropertyFieldAccessorListener.java @@ -2,6 +2,7 @@ package org.springframework.datastore.graph.neo4j.fieldaccess; import org.neo4j.index.IndexService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; import org.springframework.datastore.graph.api.NodeBacked; import java.lang.reflect.Field; @@ -31,19 +32,22 @@ public class IndexingNodePropertyFieldAccessorListener implements FieldAccessLis } public static FieldAccessorListenerFactory factory() { - return new FieldAccessorListenerFactory() { - @Autowired - IndexService indexService; + return new NodeBackedFieldAccessorListenerFactory(); + } - @Override - public boolean accept(final Field f) { - return NodePropertyFieldAccessor.factory().accept(f) || ConvertingNodePropertyFieldAccessor.factory().accept(f); - } + @Configurable + private static class NodeBackedFieldAccessorListenerFactory implements FieldAccessorListenerFactory { + @Autowired + IndexService indexService; - @Override - public FieldAccessListener forField(final Field field) { - return new IndexingNodePropertyFieldAccessorListener(field,indexService); - } - }; + @Override + public boolean accept(final Field f) { + return NodePropertyFieldAccessor.factory().accept(f) || ConvertingNodePropertyFieldAccessor.factory().accept(f); + } + + @Override + public FieldAccessListener forField(final Field field) { + return new IndexingNodePropertyFieldAccessorListener(field,indexService); + } } } diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodePropertyFieldAccessor.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodePropertyFieldAccessor.java index 5e4e4234d..9edd76c62 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodePropertyFieldAccessor.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/NodePropertyFieldAccessor.java @@ -4,6 +4,8 @@ import org.springframework.datastore.graph.api.NodeBacked; import java.lang.reflect.Field; +import static org.springframework.datastore.graph.neo4j.fieldaccess.DoReturn.doReturn; + /** * @author Michael Hunger * @since 12.09.2010 @@ -22,7 +24,11 @@ public class NodePropertyFieldAccessor implements FieldAccessor { public OneToNRelationshipEntityFieldAccessor(final RelationshipType type, final Direction direction, final Class elementClass, final GraphDatabaseContext graphDatabaseContext) { @@ -28,7 +30,7 @@ public class OneToNRelationshipEntityFieldAccessor extends AbstractRelationshipF public Object getValue(final NodeBacked entity) { checkUnderlyingNode(entity); final Set result = createEntitySetFromRelationships(entity); - return new ManagedFieldAccessorSet(entity, result, this); + return doReturn(new ManagedFieldAccessorSet(entity, result, this)); } private Set createEntitySetFromRelationships(final NodeBacked entity) { diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessor.java b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessor.java index 04ceb761c..11b4c8ff1 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessor.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessor.java @@ -12,6 +12,8 @@ import java.util.Collection; import java.util.Collections; import java.util.Set; +import static org.springframework.datastore.graph.neo4j.fieldaccess.DoReturn.doReturn; + public class OneToNRelationshipFieldAccessor extends NodeToNodesRelationshipFieldAccessor { public OneToNRelationshipFieldAccessor(final RelationshipType type, final Direction direction, final Class elementClass, final GraphDatabaseContext graphDatabaseContext) { @@ -35,7 +37,7 @@ public class OneToNRelationshipFieldAccessor extends NodeToNodesRelationshipFiel public Object getValue(final NodeBacked entity) { checkUnderlyingNode(entity); final Set result = createEntitySetFromRelationshipEndNodes(entity); - return createManagedSet(entity, result); + return doReturn(createManagedSet(entity, result)); } public static FieldAccessorFactory factory() { diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj index a729bbdb6..30ad3ef0b 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj +++ b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj @@ -344,12 +344,19 @@ public aspect Neo4jNodeBacking extends AbstractTypeAnnotatingMixinFields fieldType) { diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/ShouldProceedOrReturn.java b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/ShouldProceedOrReturn.java index 6972db6a4..b79b2a883 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/ShouldProceedOrReturn.java +++ b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/ShouldProceedOrReturn.java @@ -19,7 +19,7 @@ public class ShouldProceedOrReturn { } public ShouldProceedOrReturn(final boolean proceed, final Object value) { - this.proceed = true; + this.proceed = proceed; this.value = value; } }