package com.tinkerpop.blueprints.impls.neo4j2.iterate; import java.util.Iterator; import org.neo4j.graphdb.PropertyContainer; import org.neo4j.graphdb.index.IndexHits; import com.tinkerpop.blueprints.CloseableIterable; import com.tinkerpop.blueprints.Element; import com.tinkerpop.blueprints.impls.neo4j2.Neo4j2Graph; import com.tinkerpop.blueprints.impls.neo4j2.Neo4j2Graph.ElementWrapper; public abstract class Neo4j2ElementIterable<T extends Element, S extends PropertyContainer> implements CloseableIterable<T>{ protected final Iterable<S> elements; protected final Neo4j2Graph graph; protected final ElementWrapper<? extends T, S> elementWrapper; public Neo4j2ElementIterable(Iterable<S> elements, Neo4j2Graph graph, ElementWrapper<? extends T, S> elementWrapper) { this.elements = elements; this.graph = graph; this.elementWrapper = elementWrapper; } @Override public void close() { if (this.elements instanceof IndexHits) { ((IndexHits<?>) this.elements).close(); } } @Override public Iterator<T> iterator() { this.graph.autoStartTransaction(false); final Iterator<S> elementIterator = elements.iterator(); return new Iterator<T>() { @Override public boolean hasNext() { graph.autoStartTransaction(false); return elementIterator.hasNext(); } @Override public T next() { graph.autoStartTransaction(false); return elementWrapper.wrap(elementIterator.next()); } @Override public void remove() { throw new UnsupportedOperationException(); } }; } }