package org.serinus.graph.dao;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.ReturnableEvaluator;
import org.neo4j.graphdb.StopEvaluator;
import org.neo4j.graphdb.Traverser;
import org.neo4j.graphdb.Traverser.Order;
import org.serinus.graph.GraphManager;
import org.serinus.graph.SerinusRelationshipType;
import org.serinus.graph.domain.Doing;
import org.serinus.graph.domain.Person;
import org.serinus.graph.interceptor.GraphTransaction;
@GraphTransaction
public class SerinusQuery
{
@Inject
private GraphManager graphManager;
@Inject
private SerinusDao serinusDao;
public List<Doing> getDoingByAuthor(String email)
{
Person person = serinusDao.checkCreateUser(Person.EMAIL, email);
List<Doing> doings = new ArrayList<Doing>();
for (Node node : getDoing(person).getAllNodes())
{
doings.add(new Doing(node));
}
return doings;
}
private Traverser getDoing(Person author)
{
return author.getUnderlyingNode().traverse(Order.BREADTH_FIRST,
StopEvaluator.END_OF_GRAPH,
ReturnableEvaluator.ALL_BUT_START_NODE,
SerinusRelationshipType.DOING, Direction.OUTGOING);
}
}