package com.springone.myrestaurants.domain; import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.traversal.BranchOrderingPolicy; import org.neo4j.graphdb.traversal.BranchSelector; import org.neo4j.graphdb.traversal.TraversalBranch; import org.neo4j.graphdb.traversal.TraversalDescription; import org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl; import org.springframework.data.graph.core.FieldTraversalDescriptionBuilder; import org.springframework.data.graph.core.NodeBacked; import java.lang.reflect.Field; /** * @author Michael Hunger * @since 02.10.2010 * TODO: calculate a rating assigned to each restaurant that is the sum of its stars * the stars are multiplied by pow(1/2,distance to startNode==path.depth) */ class TopRatedRestaurantTraverser implements FieldTraversalDescriptionBuilder { @Override public TraversalDescription build(NodeBacked start, Field field, String... params) { return new TraversalDescriptionImpl() .breadthFirst() .relationships(DynamicRelationshipType.withName("friends")) .order(new BranchOrderingPolicy() { @Override public BranchSelector create(final TraversalBranch startBranch) { return new BranchSelector(){ @Override public TraversalBranch next() { TraversalBranch branch=startBranch; while (branch!=null) { if (branch.depth()<branch.next().depth()) return branch; branch=branch.next(); } return null; } }; } }); } }