From d397f59565448d83ace35b3db4f0edf513406311 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 21 Mar 2016 14:46:15 +0100 Subject: [PATCH] fixes #181 --- .../filesystem/delegating/DelegatingFolder.java | 3 ++- .../filesystem/crypto/CryptoFolder.java | 3 ++- .../webdav/jackrabbitservlet/DavFolder.java | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/main/filesystem-api/src/main/java/org/cryptomator/filesystem/delegating/DelegatingFolder.java b/main/filesystem-api/src/main/java/org/cryptomator/filesystem/delegating/DelegatingFolder.java index 475acadd7..68a963f6d 100644 --- a/main/filesystem-api/src/main/java/org/cryptomator/filesystem/delegating/DelegatingFolder.java +++ b/main/filesystem-api/src/main/java/org/cryptomator/filesystem/delegating/DelegatingFolder.java @@ -13,6 +13,7 @@ import java.util.Optional; import java.util.stream.Stream; import org.cryptomator.common.WeakValuedCache; +import org.cryptomator.common.streams.AutoClosingStream; import org.cryptomator.filesystem.File; import org.cryptomator.filesystem.Folder; import org.cryptomator.filesystem.Node; @@ -35,7 +36,7 @@ public abstract class DelegatingFolder, F exten @Override public Stream children() throws UncheckedIOException { - return Stream.concat(folders(), files()); + return AutoClosingStream.from(Stream.concat(folders(), files())); } @Override diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java index 304b30467..3f19353e4 100644 --- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java +++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java @@ -23,6 +23,7 @@ import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.cryptomator.common.LazyInitializer; import org.cryptomator.common.WeakValuedCache; +import org.cryptomator.common.streams.AutoClosingStream; import org.cryptomator.crypto.engine.Cryptor; import org.cryptomator.filesystem.Deleter; import org.cryptomator.filesystem.File; @@ -74,7 +75,7 @@ class CryptoFolder extends CryptoNode implements Folder { @Override public Stream children() { - return Stream.concat(files(), folders()); + return AutoClosingStream.from(Stream.concat(files(), folders())); } @Override diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/DavFolder.java b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/DavFolder.java index be079ca02..fe72d862a 100644 --- a/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/DavFolder.java +++ b/main/frontend-webdav/src/main/java/org/cryptomator/frontend/webdav/jackrabbitservlet/DavFolder.java @@ -32,6 +32,7 @@ import org.apache.jackrabbit.webdav.property.DavProperty; import org.apache.jackrabbit.webdav.property.DavPropertyName; import org.apache.jackrabbit.webdav.property.DefaultDavProperty; import org.apache.jackrabbit.webdav.property.ResourceType; +import org.cryptomator.common.streams.AutoClosingStream; import org.cryptomator.filesystem.Folder; import org.cryptomator.filesystem.Node; import org.cryptomator.filesystem.WritableFile; @@ -90,7 +91,8 @@ class DavFolder extends DavNode { public DavResourceIterator getMembers() { final Stream folders = node.folders().map(this::folderToDavFolder); final Stream files = node.files().map(this::fileToDavFile); - return new DavResourceIteratorImpl(Stream.concat(folders, files).collect(Collectors.toList())); + final Stream members = AutoClosingStream.from(Stream.concat(folders, files)); + return new DavResourceIteratorImpl(members.collect(Collectors.toList())); } private DavFolder folderToDavFolder(FolderLocator memberFolder) { @@ -115,9 +117,15 @@ class DavFolder extends DavNode { * Error 404 if no child with the given name exists */ private Node getMemberNode(String name) throws DavException { - return node.children().filter(c -> c.name().equals(name)).findAny().orElseThrow(() -> { - return new DavException(DavServletResponse.SC_NOT_FOUND, "No such file or directory: " + node.getResourcePath() + name); - }); + Node file = node.file(name); + Node folder = node.folder(name); + if (file.exists()) { + return file; + } else if (folder.exists()) { + return folder; + } else { + throw new DavException(DavServletResponse.SC_NOT_FOUND, "No such file or directory: " + node.getResourcePath() + name); + } } @Override