FieldAccessor lookup now uses factories.
This commit is contained in:
@@ -38,23 +38,12 @@ public class DelegatingFieldAccessorFactory<T> implements FieldAccessorFactory<T
|
||||
|
||||
public FieldAccessor forField(Field field) {
|
||||
if (Modifier.isTransient(field.getModifiers())) return null;
|
||||
GraphEntityRelationship relAnnotation = field.getAnnotation(GraphEntityRelationship.class);
|
||||
if (isSingleRelationshipField(field)) {
|
||||
if (relAnnotation != null) {
|
||||
return new SingleRelationshipFieldAccessor(typeFrom(relAnnotation), dirFrom(relAnnotation), targetFrom(field), graphDatabaseContext);
|
||||
}
|
||||
return new SingleRelationshipFieldAccessor(typeFrom(field), Direction.OUTGOING, targetFrom(field), graphDatabaseContext);
|
||||
}
|
||||
if (isOneToNRelationshipField(field)) {
|
||||
return new OneToNRelationshipFieldAccessor(typeFrom(relAnnotation), dirFrom(relAnnotation), targetFrom(relAnnotation), graphDatabaseContext);
|
||||
}
|
||||
if (isReadOnlyOneToNRelationshipField(field)) {
|
||||
return new ReadOnlyOneToNRelationshipFieldAccessor(typeFrom(relAnnotation), dirFrom(relAnnotation), targetFrom(relAnnotation), graphDatabaseContext);
|
||||
}
|
||||
if (isOneToNRelationshipEntityField(field)) {
|
||||
GraphEntityRelationshipEntity relEntityAnnotation = field.getAnnotation(GraphEntityRelationshipEntity.class);
|
||||
return new OneToNRelationshipEntityFieldAccessor(typeFrom(relEntityAnnotation), dirFrom(relEntityAnnotation), targetFrom(relEntityAnnotation), graphDatabaseContext);
|
||||
}
|
||||
for (FieldAccessorFactory<?> fieldAccessorFactory : fieldAccessorFactories) {
|
||||
if (fieldAccessorFactory.accept(field)) {
|
||||
System.out.println("Factory " + fieldAccessorFactory + " used for field: " + field);
|
||||
return fieldAccessorFactory.forField(field);
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Not a Neo4j relationship field: " + field);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,12 +2,12 @@ package org.springframework.datastore.graph.neo4j.fieldaccess;
|
||||
|
||||
import org.neo4j.graphdb.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Configurable;
|
||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||
import org.springframework.datastore.graph.api.GraphEntityRelationshipEntity;
|
||||
import org.springframework.datastore.graph.api.NodeBacked;
|
||||
import org.springframework.datastore.graph.api.RelationshipBacked;
|
||||
import org.springframework.datastore.graph.neo4j.support.GraphDatabaseContext;
|
||||
import org.springframework.persistence.support.EntityInstantiator;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashSet;
|
||||
@@ -59,7 +59,7 @@ public class OneToNRelationshipEntityFieldAccessor extends AbstractRelationshipF
|
||||
return new RelationshipEntityFieldAccessorFactory();
|
||||
}
|
||||
|
||||
|
||||
@Configurable
|
||||
private static class RelationshipEntityFieldAccessorFactory implements FieldAccessorFactory<NodeBacked> {
|
||||
@Autowired
|
||||
private GraphDatabaseContext graphDatabaseContext;
|
||||
|
||||
Reference in New Issue
Block a user