package org.neo4j.smack.test.util; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; import org.neo4j.smack.Neo4jServer; import org.neo4j.smack.Smack; import org.neo4j.test.ImpermanentGraphDatabase; import org.neo4j.tooling.GlobalGraphOperations; public class ServerHelper { public static final String HOST = "localhost"; public static final int PORT = 7473; public static Neo4jServer createServer() { return new Neo4jServer(HOST, PORT, new ImpermanentGraphDatabase()); } public static void cleanTheDatabase(final Neo4jServer server) { new Transactor( server.getSmackServer().getDatabase(), new UnitOfWork() { @Override public void doWork() { deleteAllNodesAndRelationships( server.getSmackServer() ); deleteAllIndexes( server.getSmackServer() ); } private void deleteAllNodesAndRelationships( final Smack server ) { Iterable<Node> allNodes = GlobalGraphOperations.at( server.getDatabase() ).getAllNodes(); for ( Node n : allNodes ) { Iterable<Relationship> relationships = n.getRelationships(); for ( Relationship rel : relationships ) { rel.delete(); } if ( n.getId() != 0 ) { // Don't delete the reference node - tests depend on it // :-( n.delete(); } else { // Remove all state from the reference node instead for ( String key : n.getPropertyKeys() ) { n.removeProperty( key ); } } } } private void deleteAllIndexes( final Smack server ) { for ( String indexName : server.getDatabase().index() .nodeIndexNames() ) { try{ server.getDatabase().index() .forNodes( indexName ) .delete(); } catch(UnsupportedOperationException e) { // Encountered a read-only index. } } for ( String indexName : server.getDatabase().index() .relationshipIndexNames() ) { try { server.getDatabase().index() .forRelationships( indexName ) .delete(); } catch(UnsupportedOperationException e) { // Encountered a read-only index. } } } } ).execute(); } }