]> git.argeo.org Git - lgpl/argeo-commons.git/blob - ElementIterator.java
db25b653d85f9c33f8f2d9e6b5de0f8d3a5a659f
[lgpl/argeo-commons.git] / ElementIterator.java
1 package org.argeo.cms.gcr.xml;
2
3 import java.util.Iterator;
4 import java.util.NoSuchElementException;
5
6 import org.argeo.api.gcr.Content;
7 import org.argeo.api.gcr.spi.ProvidedSession;
8 import org.w3c.dom.Element;
9 import org.w3c.dom.Node;
10 import org.w3c.dom.NodeList;
11
12 class ElementIterator implements Iterator<Content> {
13 private final ProvidedSession session;
14 private final DomContentProvider provider;
15 private final NodeList nodeList;
16
17 private int currentIndex;
18 private final int length;
19 private Element nextElement = null;
20
21 public ElementIterator(ProvidedSession session, DomContentProvider provider, NodeList nodeList) {
22 this.session = session;
23 this.provider = provider;
24 this.nodeList = nodeList;
25
26 this.length = nodeList.getLength();
27 this.currentIndex = 0;
28 this.nextElement = findNext();
29 }
30
31 private Element findNext() {
32 while (currentIndex < length) {
33 Node node = nodeList.item(currentIndex);
34 if (node instanceof Element) {
35 return (Element) node;
36 }
37 currentIndex++;
38 }
39 return null;
40 }
41
42 @Override
43 public boolean hasNext() {
44 return nextElement != null;
45 }
46
47 @Override
48 public Content next() {
49 if (nextElement == null)
50 throw new NoSuchElementException();
51 DomContent result = new DomContent(session, provider, nextElement);
52 currentIndex++;
53 nextElement = findNext();
54 return result;
55 }
56
57 }