DATAGRAPH-71 added parametrization for FieldTraversalDescriptionBuilder

This commit is contained in:
Michael Hunger
2011-03-08 02:21:55 +01:00
parent 5d5f5dd2fe
commit dedd4192fd
4 changed files with 14 additions and 7 deletions

View File

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

View File

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

View File

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

View File

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