package com.datastax.dse.driver.internal.core.graph;
import com.datastax.dse.driver.api.core.graph.AsyncGraphResultSet;
import com.datastax.dse.driver.api.core.graph.GraphNode;
import java.util.Iterator;
import java.util.NoSuchElementException;
import net.jcip.annotations.NotThreadSafe;
import org.apache.tinkerpop.gremlin.process.remote.traversal.AbstractRemoteTraversal;
import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
@NotThreadSafe
class DseGraphTraversal<S, E> extends AbstractRemoteTraversal<S, E> {
private final Iterator<GraphNode> graphNodeIterator;
public DseGraphTraversal(AsyncGraphResultSet firstPage) {
this.graphNodeIterator = GraphResultSets.toSync(firstPage).iterator();
}
@Override
@SuppressWarnings("deprecation")
public org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversalSideEffects
getSideEffects() {
return null;
}
@Override
public boolean hasNext() {
return graphNodeIterator.hasNext();
}
@Override
public E next() {
return nextTraverser().get();
}
@Override
@SuppressWarnings("unchecked")
public Traverser.Admin<E> nextTraverser() {
if (hasNext()) {
GraphNode nextGraphNode = graphNodeIterator.next();
return new DefaultRemoteTraverser<>((E) nextGraphNode.as(Object.class), 1);
} else {
throw new NoSuchElementException();
}
}
}