X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.jcr%2Fsrc%2Forg%2Fargeo%2Fjcr%2Ffs%2FJcrFileSystemProvider.java;h=dcc59476ff646b59a97a54567958c325f19bbb84;hb=5330a39edafd14df2e6cdc57aae4e9393ebca75c;hp=3e07697dc5c2699661a982af278731d544f82076;hpb=d8037dd6a59ff5d38d7c7182a9ef6c26c8001a4f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java index 3e07697dc..dcc59476f 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java @@ -40,13 +40,16 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { try { Node node = toNode(path); if (node == null) { - Node parentNode = toNode(path.getParent()); - if (parentNode == null) + Node parent = toNode(path.getParent()); + if (parent == null) throw new JcrFsException("No parent directory for " + path); - if (!(parentNode.getPath().equals("/") || parentNode.isNodeType(NodeType.NT_FOLDER))) - throw new JcrFsException("Parent of " + path + " is not a directory"); + if (parent.getPrimaryNodeType().isNodeType(NodeType.NT_FILE) + || parent.getPrimaryNodeType().isNodeType(NodeType.NT_LINKED_FILE)) + throw new JcrFsException(path + " parent is a file"); - node = parentNode.addNode(path.getFileName().toString(), NodeType.NT_FILE); + String fileName = path.getFileName().toString(); + fileName = Text.escapeIllegalJcrChars(fileName); + node = parent.addNode(fileName, NodeType.NT_FILE); node.addMixin(NodeType.MIX_CREATED); node.addMixin(NodeType.MIX_LAST_MODIFIED); } @@ -76,9 +79,12 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { Node parent = toNode(dir.getParent()); if (parent == null) throw new IOException("Parent of " + dir + " does not exist"); - if (!(parent.getPath().equals("/") || parent.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))) - throw new JcrFsException(dir + " parent is not a directory"); - node = parent.addNode(dir.getFileName().toString(), NodeType.NT_FOLDER); + if (parent.getPrimaryNodeType().isNodeType(NodeType.NT_FILE) + || parent.getPrimaryNodeType().isNodeType(NodeType.NT_LINKED_FILE)) + throw new JcrFsException(dir + " parent is a file"); + String fileName = dir.getFileName().toString(); + fileName = Text.escapeIllegalJcrChars(fileName); + node = parent.addNode(fileName, NodeType.NT_FOLDER); node.addMixin(NodeType.MIX_CREATED); node.addMixin(NodeType.MIX_LAST_MODIFIED); node.getSession().save();