diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/GraphTraversal.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/GraphTraversal.java index 5e4c8dc4d..2be099e30 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/GraphTraversal.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/GraphTraversal.java @@ -47,4 +47,9 @@ public @interface GraphTraversal { * @return target graph entity to be iterated over. */ Class elementClass() default NodeBacked.class; + + /** + * @return parameters that are passed to the @see FieldTraversalDescriptionBuilder#build + */ + String[] params() default {}; } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/FieldTraversalDescriptionBuilder.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/FieldTraversalDescriptionBuilder.java index fadcbe06f..7fc134329 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/FieldTraversalDescriptionBuilder.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/FieldTraversalDescriptionBuilder.java @@ -35,5 +35,5 @@ public interface FieldTraversalDescriptionBuilder { * @param field the concrete field that will provide the traversal. Used for the parametrization of the traversal description. * @return the TraversalDescription to apply on fieldaccess, the start node is the current entity node */ - TraversalDescription build(NodeBacked start, Field field); + TraversalDescription build(NodeBacked start, Field field, String...params); } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/TraversalFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/TraversalFieldAccessorFactory.java index 2ce8a852c..6b4c9ea98 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/TraversalFieldAccessorFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/TraversalFieldAccessorFactory.java @@ -63,13 +63,15 @@ public class TraversalFieldAccessorFactory implements FieldAccessorFactory target; + protected String[] params; - public TraversalFieldAccessor(final Field field, FinderFactory finderFactory) { + public TraversalFieldAccessor(final Field field, FinderFactory finderFactory) { this.field = field; this.finderFactory = finderFactory; final GraphTraversal graphEntityTraversal = field.getAnnotation(GraphTraversal.class); this.target = graphEntityTraversal.elementClass(); - this.fieldTraversalDescriptionBuilder = createTraversalDescription(graphEntityTraversal); + this.params = graphEntityTraversal.params(); + this.fieldTraversalDescriptionBuilder = createTraversalDescription(graphEntityTraversal); } @Override @@ -85,7 +87,7 @@ public class TraversalFieldAccessorFactory implements FieldAccessorFactory finder = finderFactory.createNodeEntityFinder(target); - final TraversalDescription traversalDescription = fieldTraversalDescriptionBuilder.build(nodeBacked,field); + final TraversalDescription traversalDescription = fieldTraversalDescriptionBuilder.build(nodeBacked,field,params); return doReturn(finder.findAllByTraversal(nodeBacked, traversalDescription)); } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java index b1cf927c0..a5511d84b 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java @@ -32,7 +32,7 @@ public class Group { @RelatedTo(type = "persons", elementClass = Person.class) private Iterable readOnlyPersons; - @GraphTraversal(traversalBuilder = PeopleTraversalBuilder.class, elementClass = Person.class) + @GraphTraversal(traversalBuilder = PeopleTraversalBuilder.class, elementClass = Person.class, params = "persons") private Iterable people; @GraphProperty @@ -97,9 +97,9 @@ public class Group { private static class PeopleTraversalBuilder implements FieldTraversalDescriptionBuilder { @Override - public TraversalDescription build(NodeBacked start, Field field) { + public TraversalDescription build(NodeBacked start, Field field, String...params) { return new TraversalDescriptionImpl() - .relationships(DynamicRelationshipType.withName("persons")) + .relationships(DynamicRelationshipType.withName(params[0])) .filter(Traversal.returnAllButStartNode()); }