package com.tinkerpop.rexster.config;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
import com.tinkerpop.rexster.Tokens;
import com.tinkerpop.rexster.util.MockTinkerTransactionalGraph;
import org.apache.commons.configuration.ConversionException;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class TinkerGraphGraphConfiguration implements GraphConfiguration {
public Graph configureGraphInstance(final GraphConfigurationContext context) throws GraphConfigurationException {
final String graphFile = context.getProperties().getString(Tokens.REXSTER_GRAPH_LOCATION, null);
// determines if a mock transactional graph should be used for testing purposes.
boolean mockTx;
try {
mockTx = context.getProperties().getBoolean("graph-mock-tx", false);
} catch (ConversionException ce) {
throw new GraphConfigurationException(ce);
}
String fileType;
try {
fileType = context.getProperties().getString("graph-storage", "");
} catch (IllegalArgumentException iae) {
// default to java serialization
fileType = "";
}
try {
if (graphFile == null || graphFile.length() == 0) {
// pure in memory if graph file is specified
return mockTx ? new MockTinkerTransactionalGraph() : new TinkerGraph();
} else {
return mockTx ? new MockTinkerTransactionalGraph(graphFile, getFileType(fileType)) : new TinkerGraph(graphFile, getFileType(fileType));
}
} catch (Exception ex) {
throw new GraphConfigurationException(ex);
}
}
private TinkerGraph.FileType getFileType(final String fileType)
{
String fileTypeLower = fileType.toLowerCase();
if (fileTypeLower.equals("graphson")) {
return TinkerGraph.FileType.GRAPHSON;
}
else if (fileTypeLower.equals("graphml")) {
return TinkerGraph.FileType.GRAPHML;
}
else if (fileTypeLower.equals(("gml"))) {
return TinkerGraph.FileType.GML;
}
else {
return TinkerGraph.FileType.JAVA;
}
}
}