DATAGRAPH-71 added parametrization for FieldTraversalDescriptionBuilder
This commit is contained in:
@@ -47,4 +47,9 @@ public @interface GraphTraversal {
|
||||
* @return target graph entity to be iterated over.
|
||||
*/
|
||||
Class<? extends NodeBacked> elementClass() default NodeBacked.class;
|
||||
|
||||
/**
|
||||
* @return parameters that are passed to the @see FieldTraversalDescriptionBuilder#build
|
||||
*/
|
||||
String[] params() default {};
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -63,13 +63,15 @@ public class TraversalFieldAccessorFactory implements FieldAccessorFactory<NodeB
|
||||
private final FinderFactory finderFactory;
|
||||
private final FieldTraversalDescriptionBuilder fieldTraversalDescriptionBuilder;
|
||||
private Class<? extends NodeBacked> 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<NodeB
|
||||
@Override
|
||||
public Object getValue(final NodeBacked nodeBacked) {
|
||||
final NodeFinder<? extends NodeBacked> 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));
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ public class Group {
|
||||
@RelatedTo(type = "persons", elementClass = Person.class)
|
||||
private Iterable<Person> readOnlyPersons;
|
||||
|
||||
@GraphTraversal(traversalBuilder = PeopleTraversalBuilder.class, elementClass = Person.class)
|
||||
@GraphTraversal(traversalBuilder = PeopleTraversalBuilder.class, elementClass = Person.class, params = "persons")
|
||||
private Iterable<Person> 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());
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user