package com.buschmais.xo.neo4j.embedded.api;
import java.net.MalformedURLException;
import java.net.URI;
import org.apache.commons.lang.WordUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.buschmais.xo.api.XOException;
import com.buschmais.xo.api.bootstrap.XOUnit;
import com.buschmais.xo.spi.bootstrap.XODatastoreProvider;
import com.buschmais.xo.spi.datastore.Datastore;
public class EmbeddedNeo4jXOProvider implements XODatastoreProvider {
private static final Logger LOG = LoggerFactory.getLogger(Neo4jXOProvider.class);
@Override
public Datastore<?, ?, ?, ?, ?> createDatastore(XOUnit xoUnit) {
URI uri = xoUnit.getUri();
DatastoreFactory datastoreFactory = lookupFactory(uri);
try {
return datastoreFactory.createGraphDatabaseService(uri, xoUnit.getProperties());
} catch (MalformedURLException e) {
throw new XOException("Cannot create datastore.", e);
}
}
@SuppressWarnings("unchecked")
DatastoreFactory lookupFactory(URI uri) {
String factoryClass = getFactoryClassName(uri);
LOG.debug("try to lookup provider-class {}", factoryClass);
try {
return ((Class<? extends DatastoreFactory>) Class.forName(factoryClass)).newInstance();
} catch (ReflectiveOperationException e) {
throw new XOException("Cannot create datastore factory.", e);
}
}
private String getFactoryClassName(URI uri) {
String protocol = WordUtils.capitalize(uri.getScheme());
return DatastoreFactory.class.getPackage().getName() + "." + protocol + "DatastoreFactory";
}
@Override
public Class<? extends Enum<? extends ConfigurationProperty>> getConfigurationProperties() {
return null;
}
}