/* * Copyright (c) [2011-2017] "Pivotal Software, Inc." / "Neo Technology" / "Graph Aware Ltd." * * This product is licensed to you under the Apache License, Version 2.0 (the "License"). * You may not use this product except in compliance with the License. * * This product may include a number of subcomponents with * separate copyright notices and license terms. Your use of the source * code for these subcomponents is subject to the terms and * conditions of the subcomponent's license, as noted in the LICENSE file. * */ package org.springframework.data.neo4j.examples.galaxy.service; import java.util.ArrayList; import java.util.Collection; import java.util.Optional; import org.neo4j.ogm.cypher.ComparisonOperator; import org.neo4j.ogm.cypher.Filter; import org.neo4j.ogm.cypher.query.Pagination; import org.neo4j.ogm.session.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.neo4j.examples.galaxy.domain.World; import org.springframework.data.neo4j.examples.galaxy.repo.WorldRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author Vince Bickers * @author Mark Angrish * @author Mark Paluch * @author Jens Schauder */ @Service @Transactional public class GalaxyService { @Autowired private WorldRepository worldRepository; @Autowired Session session; public long getNumberOfWorlds() { return worldRepository.count(); } public World createWorld(String name, int moons) { return worldRepository.save(new World(name, moons)); } public World create(World world) { return worldRepository.save(world); } public Iterable<World> getAllWorlds() { return worldRepository.findAll(); } public Optional<World> findWorldById(Long id) { return worldRepository.findById(id); } public World findWorldByName(String name) { Iterable<World> worlds = findByProperty("name", name); if (worlds.iterator().hasNext()) { return worlds.iterator().next(); } else { return null; } } public Iterable<World> findAllByNumberOfMoons(int numberOfMoons) { return findByProperty("moons", numberOfMoons); } public Collection<World> makeSomeWorlds() { Collection<World> worlds = new ArrayList<World>(); // Solar worlds worlds.add(createWorld("Mercury", 0)); worlds.add(createWorld("Venus", 0)); World earth = createWorld("Earth", 1); World mars = createWorld("Mars", 2); mars.addRocketRouteTo(earth); // todo: handle bi-directional automatically //earth.addRocketRouteTo(mars); // this is a bit silly worldRepository.save(mars); // todo: handle-bidirectional automatically //worldRepository.save(earth); worlds.add(earth); worlds.add(mars); worlds.add(createWorld("Jupiter", 63)); worlds.add(createWorld("Saturn", 62)); worlds.add(createWorld("Uranus", 27)); worlds.add(createWorld("Neptune", 13)); // Norse worlds worlds.add(createWorld("Alfheimr", 0)); worlds.add(createWorld("Midgard", 1)); worlds.add(createWorld("Muspellheim", 2)); worlds.add(createWorld("Asgard", 63)); worlds.add(createWorld("Hel", 62)); return worlds; } // not in original public Collection<World> makeAllWorldsAtOnce() { Collection<World> worlds = new ArrayList<World>(); // Solar worlds worlds.add(new World("Mercury", 0)); worlds.add(new World("Venus", 0)); World earth = new World("Earth", 1); World mars = new World("Mars", 2); mars.addRocketRouteTo(earth); earth.addRocketRouteTo(mars); worlds.add(earth); worlds.add(mars); worlds.add(new World("Jupiter", 63)); worlds.add(new World("Saturn", 62)); worlds.add(new World("Uranus", 27)); worlds.add(new World("Neptune", 13)); // Norse worlds worlds.add(new World("Alfheimr", 0)); worlds.add(new World("Midgard", 1)); worlds.add(new World("Muspellheim", 2)); worlds.add(new World("Asgard", 63)); worlds.add(new World("Hel", 62)); worldRepository.saveAll(worlds); return worlds; } public void deleteAll() { worldRepository.deleteAll(); } private Iterable<World> findByProperty(String propertyName, Object propertyValue) { return session.loadAll(World.class, new Filter(propertyName, ComparisonOperator.EQUALS, propertyValue)); } public Iterable<World> findByProperty(String propertyName, Object propertyValue, int depth) { return session.loadAll(World.class, new Filter(propertyName, ComparisonOperator.EQUALS, propertyValue), depth); } public Iterable<World> findAllWorlds(Pagination paging) { return session.loadAll(World.class, paging, 0); } public Iterable<World> findAllWorlds(Sort sort) { return worldRepository.findAll(sort, 0); } public Page<World> findAllWorlds(Pageable pageable) { return worldRepository.findAll(pageable, 0); } public Iterable<World> findAllWorlds(Sort sort, int depth) { return worldRepository.findAll(sort, depth); } public World findByName(String name) { return worldRepository.findByName(name); } }