]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.jcr/src/org/argeo/jcr/fs/NodeDirectoryStream.java
[maven-release-plugin] prepare release argeo-commons-2.1.60
[lgpl/argeo-commons.git] / org.argeo.jcr / src / org / argeo / jcr / fs / NodeDirectoryStream.java
1 package org.argeo.jcr.fs;
2
3 import java.io.IOException;
4 import java.nio.file.DirectoryStream;
5 import java.nio.file.Path;
6 import java.util.Iterator;
7
8 import javax.jcr.Node;
9 import javax.jcr.NodeIterator;
10
11 public class NodeDirectoryStream implements DirectoryStream<Path> {
12 private final JcrFileSystem fs;
13 private final NodeIterator nodeIterator;
14 private final Filter<? super Path> filter;
15
16 public NodeDirectoryStream(JcrFileSystem fs, NodeIterator nodeIterator, Filter<? super Path> filter) {
17 this.fs = fs;
18 this.nodeIterator = nodeIterator;
19 this.filter = filter;
20 }
21
22 @Override
23 public void close() throws IOException {
24 }
25
26 @Override
27 public Iterator<Path> iterator() {
28 return new Iterator<Path>() {
29 private JcrPath next = null;
30
31 @Override
32 public synchronized boolean hasNext() {
33 if (next != null)
34 return true;
35 nodes: while (nodeIterator.hasNext()) {
36 try {
37 Node node = nodeIterator.nextNode();
38 next = new JcrPath(fs, node);
39 if (filter != null) {
40 if (filter.accept(next))
41 break nodes;
42 } else
43 break nodes;
44 } catch (Exception e) {
45 throw new JcrFsException("Could not get next path", e);
46 }
47 }
48 return next != null;
49 }
50
51 @Override
52 public synchronized Path next() {
53 if (!hasNext())// make sure has next has been called
54 return null;
55 JcrPath res = next;
56 next = null;
57 return res;
58 }
59
60 };
61 }
62
63 }