X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Facr%2FJcrContent.java;h=6a0cccb84fb8e9d0ae976a163e6f983c12e566bb;hb=41b3ea51a9fb6ed1ccb4e13897bcca3fbba00754;hp=03160ba72ad93db7a1d0bf133f8073d8d0cca7a1;hpb=33f48a9a8053afdbd42776a73ac7867fffc463a7;p=gpl%2Fargeo-jcr.git diff --git a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java index 03160ba..6a0cccb 100644 --- a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java +++ b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java @@ -46,7 +46,7 @@ import org.argeo.api.acr.NamespaceUtils; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.api.cms.CmsConstants; import org.argeo.cms.acr.AbstractContent; -import org.argeo.cms.acr.ContentUtils; +import org.argeo.cms.acr.CmsContent; import org.argeo.cms.util.AsyncPipedOutputStream; import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrException; @@ -78,7 +78,7 @@ public class JcrContent extends AbstractContent { this.jcrWorkspace = jcrWorkspace; this.jcrPath = jcrPath; - this.isMountBase = ContentUtils.SLASH_STRING.equals(jcrPath); + this.isMountBase = "/".equals(jcrPath); } /* @@ -90,7 +90,7 @@ public class JcrContent extends AbstractContent { String name = Jcr.getName(getJcrNode()); if (name.equals("")) {// root String mountPath = provider.getMountPath(); - name = ContentUtils.getParentPath(mountPath)[1]; + name = CmsContent.getParentPath(mountPath)[1]; // name = Jcr.getWorkspaceName(getJcrNode()); } return NamespaceUtils.parsePrefixedName(provider, name); @@ -251,7 +251,7 @@ public class JcrContent extends AbstractContent { String mountPath = provider.getMountPath(); if (mountPath == null || mountPath.equals("/")) return null; - String[] parent = ContentUtils.getParentPath(mountPath); + String[] parent = CmsContent.getParentPath(mountPath); return getSession().get(parent[0]); } // if (Jcr.isRoot(getJcrNode())) // root @@ -290,10 +290,19 @@ public class JcrContent extends AbstractContent { @Override public Content add(QName name, QName... classes) { try { + Node node = openForEdit(); Node child; if (classes.length > 0) { + classes: for (int i = 0; i < classes.length; i++) { + if (classes[i].equals(DName.collection.qName())) { + List lst = new ArrayList<>(Arrays.asList(classes)); + lst.add(0, NtType.folder.qName()); + lst.remove(DName.collection.qName()); + classes = lst.toArray(new QName[lst.size()]); + break classes; + } + } QName primaryType = classes[0]; - Node node = openForEdit(); child = Jcr.addNode(node, name.toString(), primaryType.toString()); for (int i = 1; i < classes.length; i++) @@ -302,18 +311,11 @@ public class JcrContent extends AbstractContent { if (NtType.file.qName().equals(primaryType)) { // TODO optimise when we have a proper save mechanism child.addNode(Node.JCR_CONTENT, NodeType.NT_UNSTRUCTURED); -// Binary binary; -// try (InputStream in = new ByteArrayInputStream(new byte[0])) { -// binary = content.getSession().getValueFactory().createBinary(in); -// content.setProperty(Property.JCR_DATA, binary); -// } catch (IOException e) { -// throw new UncheckedIOException(e); -// } - child.getSession().save(); } } else { - child = Jcr.addNode(getJcrNode(), name.toString(), NodeType.NT_UNSTRUCTURED); + child = Jcr.addNode(node, name.toString(), NodeType.NT_UNSTRUCTURED); } + saveEditedNode(node); return new JcrContent(getSession(), provider, jcrWorkspace, child.getPath()); } catch (RepositoryException e) { throw new JcrException("Cannot add child to " + jcrPath + " in " + jcrWorkspace, e); @@ -327,11 +329,7 @@ public class JcrContent extends AbstractContent { lst.add(0, NtType.file.qName()); classes = lst.toArray(new QName[lst.size()]); } - if (attrs.containsKey(DName.collection.qName())) { - List lst = Arrays.asList(classes); - lst.add(0, NtType.folder.qName()); - classes = lst.toArray(new QName[lst.size()]); - } + Content child = add(name, classes); child.putAll(attrs); return child; @@ -457,9 +455,9 @@ public class JcrContent extends AbstractContent { @Override public boolean isParentAccessible() { - String jcrParentPath = ContentUtils.getParentPath(jcrPath)[0]; + String jcrParentPath = CmsContent.getParentPath(jcrPath)[0]; if ("".equals(jcrParentPath)) // JCR root node - jcrParentPath = ContentUtils.SLASH_STRING; + jcrParentPath = "/"; try { return getJcrSession().hasPermission(jcrParentPath, Session.ACTION_READ); } catch (RepositoryException e) {