Introduce CRUD to GCR
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / gcr / xml / DomContent.java
index b42e0cf0dd8c6f76f33c424c47b0ea996082e9a9..30d590df4f48720768ea011cb55a3cf5c50f5452 100644 (file)
@@ -5,7 +5,7 @@ import java.util.Iterator;
 import java.util.Set;
 
 import org.argeo.api.gcr.Content;
-import org.argeo.api.gcr.ContentSystemProvider;
+import org.argeo.api.gcr.ContentName;
 import org.argeo.api.gcr.spi.AbstractContent;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
@@ -16,21 +16,21 @@ import org.w3c.dom.Text;
 
 public class DomContent extends AbstractContent implements Content {
 
-       private final DomContentSession contentSession;
+       private final DomContentProvider contentProvider;
        private final Element element;
 
 //     private String text = null;
        private Boolean hasText = null;
 
-       public DomContent(DomContentSession contentSession, Element element) {
-               this.contentSession = contentSession;
+       public DomContent(DomContentProvider contentProvider, Element element) {
+               this.contentProvider = contentProvider;
                this.element = element;
        }
 
        @Override
        public Iterator<Content> iterator() {
                NodeList nodeList = element.getChildNodes();
-               return new ElementIterator(contentSession, nodeList);
+               return new ElementIterator(contentProvider, nodeList);
        }
 
        @Override
@@ -63,7 +63,6 @@ public class DomContent extends AbstractContent implements Content {
                        return null;
        }
 
-
        @Override
        public boolean hasText() {
 //             return element instanceof Text;
@@ -77,7 +76,7 @@ public class DomContent extends AbstractContent implements Content {
                nodes: for (int i = 0; i < nodeList.getLength(); i++) {
                        Node node = nodeList.item(i);
                        if (node instanceof Text) {
-                               Text text =(Text) node;
+                               Text text = (Text) node;
                                if (!text.isElementContentWhitespace()) {
                                        hasText = true;
                                        break nodes;
@@ -101,4 +100,34 @@ public class DomContent extends AbstractContent implements Content {
                        return null;
        }
 
+       @Override
+       public Content getParent() {
+               Node parent = element.getParentNode();
+               if (parent == null)
+                       return null;
+               if (!(parent instanceof Element))
+                       throw new IllegalStateException("Parent is not an element");
+               return new DomContent(contentProvider, (Element) parent);
+       }
+
+       @Override
+       public Content add(String name, ContentName... classes) {
+               // TODO consider classes
+               Element child = contentProvider.createElement(name);
+               return new DomContent(contentProvider, child);
+       }
+
+       @Override
+       public void remove() {
+               // TODO make it more robust
+               element.getParentNode().removeChild(element);
+
+       }
+
+       @Override
+       protected void removeAttr(String key) {
+               element.removeAttribute(key);
+
+       }
+
 }