////////////////////////////////////////////////////////////////////////////////////////// // // Implementation of the Blueprints Interface for ArangoDB by triAGENS GmbH Cologne. // // Copyright triAGENS GmbH Cologne. // ////////////////////////////////////////////////////////////////////////////////////////// package com.arangodb.blueprints; import java.util.Iterator; import java.util.Map; import java.util.NoSuchElementException; import org.apache.log4j.Logger; import com.arangodb.ArangoException; import com.arangodb.CursorResult; import com.arangodb.blueprints.client.ArangoDBBaseQuery; import com.arangodb.blueprints.client.ArangoDBException; import com.arangodb.blueprints.client.ArangoDBSimpleVertex; import com.tinkerpop.blueprints.Vertex; /** * The ArangoDB vertex iterable class * * @author Achim Brandt (http://www.triagens.de) * @author Johannes Gocke (http://www.triagens.de) * @author Guido Schwab (http://www.triagens.de) * */ public class ArangoDBVertexIterable implements Iterable<Vertex> { /** * the logger */ private static final Logger logger = Logger.getLogger(ArangoDBVertexIterable.class); private final ArangoDBGraph graph; private final ArangoDBBaseQuery query; /** * Creates a vertex iterable for a graph and a query * * @param graph * the arangodb graph * @param query * the query */ public ArangoDBVertexIterable(final ArangoDBGraph graph, final ArangoDBBaseQuery query) { this.graph = graph; this.query = query; } @Override public Iterator<Vertex> iterator() { return new VertexIterator(query); } class VertexIterator implements Iterator<Vertex> { @SuppressWarnings("rawtypes") private CursorResult<Map> iter; public VertexIterator(ArangoDBBaseQuery query) { try { if (query != null) { iter = query.getCursorResult(); } } catch (ArangoDBException e) { logger.error("error in AQL request", e); } } @Override public boolean hasNext() { if (iter == null) { return false; } return iter.iterator().hasNext(); } @SuppressWarnings("unchecked") @Override public Vertex next() { if (iter == null || !iter.iterator().hasNext()) { throw new NoSuchElementException(); } try { return ArangoDBVertex.build(graph, new ArangoDBSimpleVertex(iter.iterator().next())); } catch (ArangoDBException e) { logger.error("iterator.next", e); return null; } } @Override public void remove() { if (iter != null) { try { iter.close(); } catch (ArangoException e) { logger.error("could not close iterator", e); } } } } }