]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/xml/ElementIterator.java
Use runtime namespace context as default.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / xml / ElementIterator.java
1 package org.argeo.cms.acr.xml;
2
3 import java.util.Iterator;
4 import java.util.NoSuchElementException;
5
6 import org.argeo.api.acr.Content;
7 import org.argeo.api.acr.CrName;
8 import org.argeo.api.acr.spi.ProvidedSession;
9 import org.w3c.dom.Element;
10 import org.w3c.dom.Node;
11 import org.w3c.dom.NodeList;
12
13 class ElementIterator implements Iterator<Content> {
14 private DomContent parent;
15 private final ProvidedSession session;
16 private final DomContentProvider provider;
17 private final NodeList nodeList;
18
19 private int currentIndex;
20 private final int length;
21 private Element nextElement = null;
22
23 public ElementIterator(DomContent parent, ProvidedSession session, DomContentProvider provider, NodeList nodeList) {
24 this.parent = parent;
25 this.session = session;
26 this.provider = provider;
27 this.nodeList = nodeList;
28
29 this.length = nodeList.getLength();
30 this.currentIndex = 0;
31 this.nextElement = findNext();
32 }
33
34 private Element findNext() {
35 while (currentIndex < length) {
36 Node node = nodeList.item(currentIndex);
37 if (node instanceof Element) {
38 return (Element) node;
39 }
40 currentIndex++;
41 }
42 return null;
43 }
44
45 @Override
46 public boolean hasNext() {
47 return nextElement != null;
48 }
49
50 @Override
51 public Content next() {
52 if (nextElement == null)
53 throw new NoSuchElementException();
54 Content result;
55 String isMount = nextElement.getAttributeNS(CrName.CR_NAMESPACE_URI, CrName.MOUNT.get().getLocalPart());
56 if (isMount.equals("true")) {
57 result = session.get(parent.getPath() + '/' + nextElement.getTagName());
58 }
59
60 else {
61 result = new DomContent(session, provider, nextElement);
62 }
63 currentIndex++;
64 nextElement = findNext();
65 return result;
66 }
67
68 }