X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Facr%2FJcrContent.java;h=880f29eeaebf4c30f87fd850ddd8ab84036b48c1;hb=5e444f98184584e55114e86c5baf3a4bcb458cdf;hp=fa34d678c8d80e0693fb02e10f3155b3d849ae4a;hpb=d981afdf4eb85f6a6b7a3015d8a02002b94556d0;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 fa34d67..880f29e 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 @@ -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; @@ -510,13 +508,13 @@ public class JcrContent extends AbstractContent { try { if (InputStream.class.isAssignableFrom(clss)) { Node node = getJcrNode(); - System.out.println(node.getSession()); +// System.out.println(node.getSession()); if (Jcr.isNodeType(node, NodeType.NT_FILE)) { return (C) JcrUtils.getFileAsStream(node); } } else if (OutputStream.class.isAssignableFrom(clss)) { Node node = openForEdit(); - System.out.println(node.getSession()); +// System.out.println(node.getSession()); if (Jcr.isNodeType(node, NodeType.NT_FILE)) { Node content = node.getNode(Node.JCR_CONTENT); AsyncPipedOutputStream out = new AsyncPipedOutputStream();