X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Fxml%2FDomContentProvider.java;h=54013e2ad1301deb66235671fcce278e6be64b58;hb=da9d144b6b241e1526a3bd255dff905a7969a5bc;hp=423b60eadd15f982cba3fb1cd4d115ea3f8c2646;hpb=fdf44255df56ae179b904e4ab326bf595674800e;p=lgpl%2Fargeo-commons.git 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 423b60ead..54013e2ad 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 @@ -61,27 +61,40 @@ public class DomContentProvider implements ContentProvider, NamespaceContext { // } @Override - public ProvidedContent get(ProvidedSession session, String mountPath, String relativePath) { + public ProvidedContent get(ProvidedSession session, String relativePath) { if ("".equals(relativePath)) return new DomContent(session, this, document.getDocumentElement()); + + NodeList nodes = findContent(relativePath); + if (nodes.getLength() > 1) + throw new IllegalArgumentException("Multiple content found for " + relativePath + " under " + mountPath); + if (nodes.getLength() == 0) + throw new ContentNotFoundException("Path " + relativePath + " under " + mountPath + " was not found"); + Element element = (Element) nodes.item(0); + return new DomContent(session, this, element); + } + + protected NodeList findContent(String relativePath) { if (relativePath.startsWith("/")) throw new IllegalArgumentException("Relative path cannot start with /"); - String xPathExpression = '/' + relativePath; if ("/".equals(mountPath)) xPathExpression = "/cr:root" + xPathExpression; try { NodeList nodes = (NodeList) xPath.get().evaluate(xPathExpression, document, XPathConstants.NODESET); - if (nodes.getLength() > 1) - throw new IllegalArgumentException( - "Multiple content found for " + relativePath + " under " + mountPath); - if (nodes.getLength() == 0) - throw new ContentNotFoundException("Path " + relativePath + " under " + mountPath + " was not found"); - Element element = (Element) nodes.item(0); - return new DomContent(session, this, element); + return nodes; } catch (XPathExpressionException e) { throw new IllegalArgumentException("XPath expression " + xPathExpression + " cannot be evaluated", e); } + + } + + @Override + public boolean exists(ProvidedSession session, String relativePath) { + if ("".equals(relativePath)) + return true; + NodeList nodes = findContent(relativePath); + return nodes.getLength() != 0; } public void persist(ProvidedSession session) {