package org.springframework.data.neo4j.examples.hellograph; import org.neo4j.graphdb.Direction; import org.neo4j.graphdb.traversal.TraversalDescription; import org.neo4j.kernel.Traversal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import static org.neo4j.graphdb.DynamicRelationshipType.withName; import static org.springframework.data.neo4j.examples.hellograph.RelationshipTypes.REACHABLE_BY_ROCKET; /** * Spring Data Neo4j backed application context for Worlds. */ public class WorldRepositoryImpl implements MyWorldRepository { @Autowired private WorldRepository worldRepository; @Override @Transactional public Collection<World> makeSomeWorlds() { ArrayList<World> newWorlds = new ArrayList<World>(); // solar worlds newWorlds.add(world("Mercury", 0)); newWorlds.add(world("Venus", 0)); World earth = world("Earth", 1); newWorlds.add(earth); World mars = world("Mars", 2); mars.addRocketRouteTo(earth); newWorlds.add(mars); newWorlds.add(world("Jupiter", 63)); newWorlds.add(world("Saturn", 62)); newWorlds.add(world("Uranus", 27)); newWorlds.add(world("Neptune", 13)); // Norse worlds newWorlds.add(world("Alfheimr", 0)); newWorlds.add(world("Midgard", 1)); newWorlds.add(world("Muspellheim", 2)); newWorlds.add(world("Asgard", 63)); newWorlds.add(world("Hel", 62)); return newWorlds; } @Override @Transactional public World world(String name, int moons) { World createdWorld = findWorldNamed(name); if (createdWorld == null) { createdWorld = new World(name, moons).persist(); } return createdWorld; } @Override public World findWorldNamed(String name) { return worldRepository.findByPropertyValue("name", name); } @Override public Iterable<World> findWorldsWithMoons(int moonCount) { return worldRepository.findAllByPropertyValue("moon-index", "moons", moonCount); } @Override public Iterable<World> exploreWorldsBeyond(World homeWorld) { TraversalDescription traversal = Traversal.description().relationships(withName(REACHABLE_BY_ROCKET), Direction.OUTGOING); return worldRepository.findAllByTraversal(homeWorld, traversal); } }