FieldAccessor lookup now uses factories.

This commit is contained in:
David Montag
2010-09-14 14:11:42 -07:00
parent 911018ea64
commit 82918a9aba
2 changed files with 8 additions and 19 deletions

View File

@@ -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);
}

View File

@@ -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;