package com.buschmais.jqassistant.core.store.impl;
import com.buschmais.jqassistant.core.store.api.Store;
import com.buschmais.xo.api.XOManager;
import com.buschmais.xo.api.XOManagerFactory;
import com.buschmais.xo.api.bootstrap.XO;
import com.buschmais.xo.api.bootstrap.XOUnit;
import com.buschmais.xo.api.bootstrap.XOUnitBuilder;
import com.buschmais.xo.neo4j.api.Neo4jXOProvider;
import com.buschmais.xo.neo4j.impl.datastore.EmbeddedNeo4jDatastoreSession;
import org.neo4j.kernel.GraphDatabaseAPI;
import java.io.File;
import java.util.Collection;
/**
* {@link Store} implementation using an embedded Neo4j instance.
*/
public class EmbeddedGraphStore extends AbstractGraphStore {
/**
* The directory of the database.
*/
private final String databaseDirectory;
/**
* Constructor.
*
* @param databaseDirectory The directory of the database.
*/
public EmbeddedGraphStore(String databaseDirectory) {
this.databaseDirectory = databaseDirectory;
}
@Override
protected GraphDatabaseAPI getDatabaseAPI(XOManager xoManager) {
return (GraphDatabaseAPI) xoManager.getDatastoreSession(EmbeddedNeo4jDatastoreSession.class).getGraphDatabaseService();
}
@Override
protected XOManagerFactory createXOManagerFactory(Collection<Class<?>> types) {
File database = new File(databaseDirectory);
XOUnit xoUnit = XOUnitBuilder.create(database.toURI(), Neo4jXOProvider.class, types.toArray(new Class<?>[0])).create();
return XO.createXOManagerFactory(xoUnit);
}
@Override
protected void closeXOManagerFactory(XOManagerFactory cdoManagerFactory) {
cdoManagerFactory.close();
}
}