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;
this.jcrWorkspace = jcrWorkspace;
this.jcrPath = jcrPath;
- this.isMountBase = ContentUtils.SLASH_STRING.equals(jcrPath);
+ this.isMountBase = "/".equals(jcrPath);
}
/*
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);
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
@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<QName> 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++)
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);
lst.add(0, NtType.file.qName());
classes = lst.toArray(new QName[lst.size()]);
}
- if (attrs.containsKey(DName.collection.qName())) {
- List<QName> 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;
@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) {