1 package eu.ehri.project.acl.wrapper; 2 3 import com.tinkerpop.blueprints.CloseableIterable; 4 import com.tinkerpop.blueprints.Vertex; 5 6 import java.util.Iterator; 7 import java.util.NoSuchElementException; 8 9 10 public class AclVertexIterable implements CloseableIterable<Vertex> { 11 private final Iterable<Vertex> iterable; 12 private final AclGraph<?> aclGraph; 13 14 public AclVertexIterable(Iterable<Vertex> iterable, AclGraph<?> aclGraph) { 15 this.iterable = iterable; 16 this.aclGraph = aclGraph; 17 } 18 19 @Override 20 public void close() { 21 if (this.iterable instanceof CloseableIterable) { 22 ((CloseableIterable) iterable).close(); 23 } 24 } 25 26 @Override 27 public Iterator<Vertex> iterator() { 28 return new Iterator<Vertex>() { 29 private final Iterator<Vertex> itty = iterable.iterator(); 30 private AclVertex nextVertex; 31 32 @Override 33 public boolean hasNext() { 34 if (null != this.nextVertex) { 35 return true; 36 } 37 while (this.itty.hasNext()) { 38 Vertex vertex = this.itty.next(); 39 if (aclGraph.evaluateVertex(vertex)) { 40 this.nextVertex = new AclVertex(vertex, aclGraph); 41 return true; 42 } 43 } 44 return false; 45 46 } 47 48 @Override 49 public Vertex next() { 50 if (null != this.nextVertex) { 51 AclVertex temp = this.nextVertex; 52 this.nextVertex = null; 53 return temp; 54 } else { 55 while (this.itty.hasNext()) { 56 Vertex vertex = this.itty.next(); 57 if (aclGraph.evaluateVertex(vertex)) { 58 return new AclVertex(vertex, aclGraph); 59 } 60 } 61 throw new NoSuchElementException(); 62 } 63 } 64 65 @Override 66 public void remove() { 67 throw new UnsupportedOperationException(); 68 } 69 }; 70 } 71 }