package com.tinkerpop.blueprints.impls.tg; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Features; import com.tinkerpop.blueprints.Graph; import com.tinkerpop.blueprints.GraphQuery; import com.tinkerpop.blueprints.TransactionalGraph; import com.tinkerpop.blueprints.Vertex; /** * Mocking TinkerGraph as a transactional graph for testing purposes. This implementation does not actually * implement transactional behavior but only counts transaction starts, successes and failures so that * these can be compared to expected behavior. * This class is only meant for testing. * <br /> * <br /> * * @author Matthias Broecheler (http://www.matthiasb.com) */ public class MockTransactionalGraph implements TransactionalGraph { private int numTransactionsCommitted = 0; private int numTransactionsAborted = 0; private final Graph graph; public MockTransactionalGraph(final Graph graph) { this.graph = graph; } @Override public void stopTransaction(Conclusion conclusion) { switch (conclusion) { case SUCCESS: numTransactionsCommitted++; break; case FAILURE: numTransactionsAborted++; break; default: throw new IllegalArgumentException("Unrecognized conclusion: " + conclusion); } } public void rollback() { numTransactionsAborted++; } public void commit() { numTransactionsCommitted++; } public int getNumTransactionsCommitted() { return numTransactionsCommitted; } public int getNumTransactionsAborted() { return numTransactionsAborted; } public boolean allSuccessful() { return numTransactionsAborted == 0; } @Override public Features getFeatures() { Features f = graph.getFeatures().copyFeatures(); f.supportsTransactions = true; return f; } @Override public Vertex addVertex(Object id) { return graph.addVertex(id); } @Override public Vertex getVertex(Object id) { return graph.getVertex(id); } @Override public void removeVertex(Vertex vertex) { graph.removeVertex(vertex); } @Override public Iterable<Vertex> getVertices() { return graph.getVertices(); } @Override public Iterable<Vertex> getVertices(String key, Object value) { return graph.getVertices(key, value); } @Override public Edge addEdge(Object id, Vertex outVertex, Vertex inVertex, String label) { return graph.addEdge(id, outVertex, inVertex, label); } @Override public Edge getEdge(Object id) { return graph.getEdge(id); } @Override public void removeEdge(Edge edge) { graph.removeEdge(edge); } @Override public Iterable<Edge> getEdges() { return graph.getEdges(); } @Override public Iterable<Edge> getEdges(String key, Object value) { return graph.getEdges(key, value); } @Override public void shutdown() { graph.shutdown(); } @Override public GraphQuery query() { return graph.query(); } }