JCR as an ACR backend
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / xml / ElementIterator.java
index 3b07081e4a7f3477e92a6137709eb95ad8f90bb4..1206fa86a10f3759b4cdee662b963eb1d6846b77 100644 (file)
@@ -4,12 +4,14 @@ import java.util.Iterator;
 import java.util.NoSuchElementException;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.acr.CrName;
 import org.argeo.api.acr.spi.ProvidedSession;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 class ElementIterator implements Iterator<Content> {
+       private DomContent parent;
        private final ProvidedSession session;
        private final DomContentProvider provider;
        private final NodeList nodeList;
@@ -18,7 +20,8 @@ class ElementIterator implements Iterator<Content> {
        private final int length;
        private Element nextElement = null;
 
-       public ElementIterator(ProvidedSession session, DomContentProvider provider, NodeList nodeList) {
+       public ElementIterator(DomContent parent, ProvidedSession session, DomContentProvider provider, NodeList nodeList) {
+               this.parent = parent;
                this.session = session;
                this.provider = provider;
                this.nodeList = nodeList;
@@ -48,7 +51,15 @@ class ElementIterator implements Iterator<Content> {
        public Content next() {
                if (nextElement == null)
                        throw new NoSuchElementException();
-               DomContent result = new DomContent(session, provider, nextElement);
+               Content result;
+               String isMount = nextElement.getAttributeNS(CrName.CR_NAMESPACE_URI, CrName.MOUNT.get().getLocalPart());
+               if (isMount.equals("true")) {
+                       result = session.get(parent.getPath() + '/' + nextElement.getTagName());
+               }
+
+               else {
+                       result = new DomContent(session, provider, nextElement);
+               }
                currentIndex++;
                nextElement = findNext();
                return result;