////////////////////////////////////////////////////////////////////////////////////////// // // 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.ArangoDBSimpleEdge; import com.tinkerpop.blueprints.Edge; /** * The edge iterable * * @author Achim Brandt (http://www.triagens.de) * @author Johannes Gocke (http://www.triagens.de) * @author Guido Schwab (http://www.triagens.de) * */ public class ArangoDBEdgeIterable implements Iterable<Edge> { /** * the logger */ private static final Logger logger = Logger.getLogger(ArangoDBEdgeIterable.class); private final ArangoDBGraph graph; private final ArangoDBBaseQuery query; /** * Creates the edge iterable by a graph and a query * * @param graph * the arangodb graph * @param query * the query */ public ArangoDBEdgeIterable(final ArangoDBGraph graph, final ArangoDBBaseQuery query) { this.graph = graph; this.query = query; } @Override public Iterator<Edge> iterator() { return new EdgeIterator(query); } class EdgeIterator implements Iterator<Edge> { @SuppressWarnings("rawtypes") private CursorResult<Map> iter; public EdgeIterator(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 Edge next() { if (iter == null || !iter.iterator().hasNext()) { throw new NoSuchElementException(); } try { return ArangoDBEdge.build(graph, new ArangoDBSimpleEdge(iter.iterator().next()), null, null); } 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); } } } }; }