]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java
Improve error feedback in JCR FS
[lgpl/argeo-commons.git] / org.argeo.jcr / src / org / argeo / jcr / fs / JcrFileSystemProvider.java
index 85c2bcfd0c7ad5552a2dadc3a492359267e49e38..804be94fdb752f83aa6ce830cbe39f085efbe46f 100644 (file)
@@ -2,7 +2,6 @@ package org.argeo.jcr.fs;
 
 import java.io.IOException;
 import java.nio.channels.SeekableByteChannel;
-import java.nio.charset.Charset;
 import java.nio.file.AccessMode;
 import java.nio.file.CopyOption;
 import java.nio.file.DirectoryNotEmptyException;
@@ -31,7 +30,6 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.nodetype.PropertyDefinition;
 
-import org.apache.commons.io.FileExistsException;
 import org.argeo.jcr.JcrUtils;
 
 public abstract class JcrFileSystemProvider extends FileSystemProvider {
@@ -50,6 +48,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider {
                                        throw new IOException(path + " parent is a 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);
@@ -67,6 +66,8 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider {
        public DirectoryStream<Path> newDirectoryStream(Path dir, Filter<? super Path> filter) throws IOException {
                try {
                        Node base = toNode(dir);
+                       if (base == null)
+                               throw new IOException(dir + " is not a JCR node");
                        return new NodeDirectoryStream((JcrFileSystem) dir.getFileSystem(), base.getNodes(), filter);
                } catch (RepositoryException e) {
                        throw new IOException("Cannot list directory", e);
@@ -85,13 +86,14 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider {
                                                || parent.getPrimaryNodeType().isNodeType(NodeType.NT_LINKED_FILE))
                                        throw new IOException(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();
                        } else {
-                               if (!node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
-                                       throw new FileExistsException(dir + " exists and is not a directory");
+                               // if (!node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
+                               // throw new FileExistsException(dir + " exists and is not a directory");
                        }
                } catch (RepositoryException e) {
                        discardChanges(node);