From be6d2dbdf3ccafc9b8ac8820a68a3eb7de859b06 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 17 Jun 2023 07:50:28 +0200 Subject: [PATCH] Make DOM ACR more robust when used as repository root. --- .../src/org/argeo/cms/acr/xml/DomContent.java | 11 ++++++----- .../org/argeo/cms/acr/xml/DomContentProvider.java | 13 ++----------- 2 files changed, 8 insertions(+), 16 deletions(-) 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 a4c14186a..1520bc2cf 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,7 +1,5 @@ package org.argeo.cms.acr.xml; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; @@ -25,7 +23,6 @@ import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; @@ -389,7 +386,9 @@ public class DomContent extends AbstractContent implements ProvidedContent { List res = new ArrayList<>(); if (isLocalRoot()) { String mountPath = provider.getMountPath(); - if (mountPath != null) { + if (ContentUtils.SLASH_STRING.equals(mountPath)) {// repository root + res.add(CrName.root.qName()); + } else { Content mountPoint = getSession().getMountPoint(mountPath); res.addAll(mountPoint.getContentClasses()); } @@ -403,7 +402,9 @@ public class DomContent extends AbstractContent implements ProvidedContent { public void addContentClasses(QName... contentClass) { if (isLocalRoot()) { String mountPath = provider.getMountPath(); - if (mountPath != null) { + if (ContentUtils.SLASH_STRING.equals(mountPath)) {// repository root + throw new IllegalArgumentException("Cannot add content classes to repository root"); + } else { Content mountPoint = getSession().getMountPoint(mountPath); mountPoint.addContentClasses(contentClass); } diff --git a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java index 66ff878d5..d56935097 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java @@ -22,6 +22,7 @@ import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.cms.acr.CmsContentRepository; +import org.argeo.cms.acr.ContentUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -57,16 +58,6 @@ public class DomContentProvider implements ContentProvider, NamespaceContext { }; } -// @Override -// public Content get() { -// return new DomContent(this, document.getDocumentElement()); -// } - -// public Element createElement(String name) { -// return document.createElementNS(null, name); -// -// } - @Override public ProvidedContent get(ProvidedSession session, String relativePath) { if ("".equals(relativePath)) @@ -86,7 +77,7 @@ public class DomContentProvider implements ContentProvider, NamespaceContext { if (relativePath.startsWith("/")) throw new IllegalArgumentException("Relative path cannot start with /"); String xPathExpression = '/' + relativePath; - if ("/".equals(mountPath)) + if (ContentUtils.SLASH_STRING.equals(mountPath)) // repository root xPathExpression = "/" + CrName.root.qName() + xPathExpression; try { NodeList nodes = (NodeList) xPath.get().evaluate(xPathExpression, document, XPathConstants.NODESET); -- 2.30.2