X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Fxml%2FDomContent.java;h=9a1a58c55a7ef3162739d8c7fed32bceed5d0e01;hb=e3db2eba9a7f8380a6f76d7b0e6cd4825e91893e;hp=9e370db0c07ebfd552186300c59b677ff87952c3;hpb=ceb6d574e9ea49fcac490d0923d23f259f271f8d;p=lgpl%2Fargeo-commons.git
diff --git a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java
index 9e370db0c..9a1a58c55 100644
--- a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java
+++ b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java
@@ -1,9 +1,12 @@
package org.argeo.cms.acr.xml;
+import java.nio.CharBuffer;
+import java.nio.file.Path;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
+import java.util.concurrent.CompletableFuture;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
@@ -11,9 +14,12 @@ import javax.xml.namespace.QName;
import org.argeo.api.acr.Content;
import org.argeo.api.acr.ContentName;
+import org.argeo.api.acr.ContentUtils;
+import org.argeo.api.acr.CrName;
import org.argeo.api.acr.spi.AbstractContent;
import org.argeo.api.acr.spi.ProvidedContent;
import org.argeo.api.acr.spi.ProvidedSession;
+import org.argeo.cms.acr.fs.FsContent;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -43,6 +49,13 @@ public class DomContent extends AbstractContent implements ProvidedContent {
@Override
public QName getName() {
+ if (element.getParentNode() == null) {// root
+ String mountPath = provider.getMountPath();
+ if (mountPath != null) {
+ Content mountPoint = session.getMountPoint(mountPath);
+ return mountPoint.getName();
+ }
+ }
return toQName(this.element);
}
@@ -173,14 +186,19 @@ public class DomContent extends AbstractContent implements ProvidedContent {
@Override
public Content getParent() {
- Node parent = element.getParentNode();
- if (parent == null)
- return null;
- if (parent instanceof Document)
+ Node parentNode = element.getParentNode();
+ if (parentNode == null) {
+ String mountPath = provider.getMountPath();
+ if (mountPath == null)
+ return null;
+ String[] parent = ContentUtils.getParentPath(mountPath);
+ return session.get(parent[0]);
+ }
+ if (parentNode instanceof Document)
return null;
- if (!(parent instanceof Element))
+ if (!(parentNode instanceof Element))
throw new IllegalStateException("Parent is not an element");
- return new DomContent(this, (Element) parent);
+ return new DomContent(this, (Element) parentNode);
}
@Override
@@ -211,6 +229,36 @@ public class DomContent extends AbstractContent implements ProvidedContent {
}
+ @Override
+ public A adapt(Class clss) throws IllegalArgumentException {
+ if (CharBuffer.class.isAssignableFrom(clss)) {
+ String textContent = element.getTextContent();
+ CharBuffer buf = CharBuffer.wrap(textContent);
+ return (A) buf;
+ }
+ return super.adapt(clss);
+ }
+
+ public CompletableFuture write(Class clss) {
+ if (String.class.isAssignableFrom(clss)) {
+ CompletableFuture res = new CompletableFuture<>();
+ res.thenAccept((s) -> element.setTextContent(s));// .thenRun(() -> provider.persist(session));
+ return (CompletableFuture) res;
+ }
+ return super.write(clss);
+ }
+
+ /*
+ * MOUNT MANAGEMENT
+ */
+ @Override
+ public ProvidedContent getMountPoint(String relativePath) {
+ // FIXME use qualified names
+ Element childElement = (Element) element.getElementsByTagName(relativePath).item(0);
+ // TODO check that it is a mount
+ return new DomContent(this, childElement);
+ }
+
public ProvidedSession getSession() {
return session;
}