X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.jcr%2Fsrc%2Forg%2Fargeo%2Fjcr%2Ffs%2FJcrFileSystemProvider.java;h=7dbd4e43f88116e96a127b3b305fd1fae8dfe515;hb=a8731626eaf812794bec138649de575e6e036245;hp=85c2bcfd0c7ad5552a2dadc3a492359267e49e38;hpb=5d7dadc47fe52f2dcfe2cd13a4165ad4e3ffbb57;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 85c2bcfd0..7dbd4e43f 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java @@ -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,13 +48,14 @@ 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); } if (!node.isNodeType(NodeType.NT_FILE)) throw new UnsupportedOperationException(node + " must be a file"); - return new BinaryChannel(node); + return new BinaryChannel(node, path); } catch (RepositoryException e) { discardChanges(node); throw new IOException("Cannot read file", e); @@ -67,6 +66,8 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { public DirectoryStream newDirectoryStream(Path dir, Filter 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); @@ -169,7 +171,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { @Override public boolean isHidden(Path path) throws IOException { - return false; + return path.getFileName().toString().charAt(0) == '.'; } @Override