Massive package refactoring
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / xml / ElementIterator.java
index 3b07081e4a7f3477e92a6137709eb95ad8f90bb4..3f747622195943cb617d1391b344c7b69275eedb 100644 (file)
@@ -3,13 +3,16 @@ package org.argeo.cms.acr.xml;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 
+import org.argeo.api.acr.ArgeoNamespace;
 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 +21,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 +52,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(ArgeoNamespace.CR_NAMESPACE_URI, CrName.mount.qName().getLocalPart());
+               if (isMount.equals("true")) {
+                       result = session.get(parent.getPath() + '/' + nextElement.getTagName());
+               }
+
+               else {
+                       result = new DomContent(session, provider, nextElement);
+               }
                currentIndex++;
                nextElement = findNext();
                return result;