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