diff --git a/main/jackrabbit-filesystem-adapter/pom.xml b/main/jackrabbit-filesystem-adapter/pom.xml
index 1b3c0ca08..d54f2073a 100644
--- a/main/jackrabbit-filesystem-adapter/pom.xml
+++ b/main/jackrabbit-filesystem-adapter/pom.xml
@@ -70,6 +70,11 @@
filesystem-inmemory
test
+
+ org.cryptomator
+ filesystem-nio
+ test
+
diff --git a/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/FileSystemBasedWebDavServer.java b/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/FileSystemBasedWebDavServer.java
new file mode 100644
index 000000000..54dae472e
--- /dev/null
+++ b/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/FileSystemBasedWebDavServer.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Sebastian Stenzel and others.
+ * This file is licensed under the terms of the MIT license.
+ * See the LICENSE.txt file for more info.
+ *
+ * Contributors:
+ * Sebastian Stenzel - initial API and implementation
+ *******************************************************************************/
+package org.cryptomator.webdav.jackrabbitservlet;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.EnumSet;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.servlet.DispatcherType;
+
+import org.cryptomator.filesystem.FileSystem;
+import org.cryptomator.webdav.filters.AcceptRangeFilter;
+import org.cryptomator.webdav.filters.UriNormalizationFilter;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
+import org.eclipse.jetty.util.thread.ThreadPool;
+
+class FileSystemBasedWebDavServer {
+
+ private final Server server;
+ private final ServerConnector localConnector;
+ private final ContextHandlerCollection servletCollection;
+
+ public FileSystemBasedWebDavServer(FileSystem fileSystem) {
+ final BlockingQueue queue = new LinkedBlockingQueue<>(10);
+ final ThreadPool tp = new QueuedThreadPool(4, 1, 1, queue);
+ server = new Server(tp);
+ localConnector = new ServerConnector(server);
+ localConnector.setHost("localhost");
+ localConnector.setPort(8080);
+ servletCollection = new ContextHandlerCollection();
+
+ URI servletContextRootUri;
+ try {
+ servletContextRootUri = new URI("http", null, "localhost", 8080, "/", null, null);
+ } catch (URISyntaxException e) {
+ throw new IllegalStateException(e);
+ }
+ final ServletContextHandler servletContext = new ServletContextHandler(servletCollection, "/", ServletContextHandler.SESSIONS);
+ final ServletHolder servletHolder = new ServletHolder("FileSystem-WebDAV-Servlet", new WebDavServlet(servletContextRootUri, fileSystem));
+ servletContext.addServlet(servletHolder, "/*");
+ servletContext.addFilter(AcceptRangeFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
+ servletContext.addFilter(UriNormalizationFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
+ servletCollection.mapContexts();
+
+ server.setConnectors(new Connector[] { localConnector });
+ server.setHandler(servletCollection);
+ }
+
+ public void start() throws Exception {
+ server.start();
+ }
+
+ public void stop() throws Exception {
+ server.stop();
+ }
+
+}
diff --git a/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/InMemoryWebDavServer.java b/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/InMemoryWebDavServer.java
index ccf50c333..1b2ef4efa 100644
--- a/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/InMemoryWebDavServer.java
+++ b/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/InMemoryWebDavServer.java
@@ -8,78 +8,17 @@
*******************************************************************************/
package org.cryptomator.webdav.jackrabbitservlet;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.nio.ByteBuffer;
-import java.util.EnumSet;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import javax.servlet.DispatcherType;
import org.cryptomator.filesystem.FileSystem;
import org.cryptomator.filesystem.WritableFile;
import org.cryptomator.filesystem.inmem.InMemoryFileSystem;
-import org.cryptomator.webdav.filters.AcceptRangeFilter;
-import org.cryptomator.webdav.filters.UriNormalizationFilter;
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.ContextHandlerCollection;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.thread.QueuedThreadPool;
-import org.eclipse.jetty.util.thread.ThreadPool;
public class InMemoryWebDavServer {
- private final Server server;
- private final ServerConnector localConnector;
- private final ContextHandlerCollection servletCollection;
- private final FileSystem inMemoryFileSystem = new InMemoryFileSystem();
-
- private InMemoryWebDavServer() {
- final BlockingQueue queue = new LinkedBlockingQueue<>(10);
- final ThreadPool tp = new QueuedThreadPool(4, 1, 1, queue);
- server = new Server(tp);
- localConnector = new ServerConnector(server);
- localConnector.setHost("localhost");
- localConnector.setPort(8080);
- servletCollection = new ContextHandlerCollection();
-
- URI servletContextRootUri;
- try {
- servletContextRootUri = new URI("http", null, "localhost", 8080, "/", null, null);
- } catch (URISyntaxException e) {
- throw new IllegalStateException(e);
- }
- final ServletContextHandler servletContext = new ServletContextHandler(servletCollection, "/", ServletContextHandler.SESSIONS);
- final ServletHolder servletHolder = new ServletHolder("InMemory-WebDAV-Servlet", new WebDavServlet(servletContextRootUri, inMemoryFileSystem));
- servletContext.addServlet(servletHolder, "/*");
- servletContext.addFilter(AcceptRangeFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
- servletContext.addFilter(UriNormalizationFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
- servletCollection.mapContexts();
-
- server.setConnectors(new Connector[] { localConnector });
- server.setHandler(servletCollection);
- }
-
- private void start() throws Exception {
- server.start();
- }
-
- private void stop() throws Exception {
- server.stop();
- }
-
public static void main(String[] args) throws Exception {
- final InMemoryWebDavServer server = new InMemoryWebDavServer();
-
- server.inMemoryFileSystem.folder("mamals").folder("cats").create();
- server.inMemoryFileSystem.folder("mamals").folder("dogs").create();
- try (WritableFile writable = server.inMemoryFileSystem.folder("mamals").folder("cats").file("Garfield.txt").openWritable()) {
- writable.write(ByteBuffer.wrap("meow".getBytes()));
- }
+ FileSystem fileSystem = setupFilesystem();
+ FileSystemBasedWebDavServer server = new FileSystemBasedWebDavServer(fileSystem);
server.start();
System.out.println("Server started. Press any key to stop it...");
@@ -87,4 +26,14 @@ public class InMemoryWebDavServer {
server.stop();
}
+ private static FileSystem setupFilesystem() {
+ FileSystem fileSystem = new InMemoryFileSystem();
+ fileSystem.folder("mamals").folder("cats").create();
+ fileSystem.folder("mamals").folder("dogs").create();
+ try (WritableFile writable = fileSystem.folder("mamals").folder("cats").file("Garfield.txt").openWritable()) {
+ writable.write(ByteBuffer.wrap("meow".getBytes()));
+ }
+ return fileSystem;
+ }
+
}
diff --git a/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/NioWebDavServer.java b/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/NioWebDavServer.java
new file mode 100644
index 000000000..378cea382
--- /dev/null
+++ b/main/jackrabbit-filesystem-adapter/src/test/java/org/cryptomator/webdav/jackrabbitservlet/NioWebDavServer.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Sebastian Stenzel and others.
+ * This file is licensed under the terms of the MIT license.
+ * See the LICENSE.txt file for more info.
+ *
+ * Contributors:
+ * Sebastian Stenzel - initial API and implementation
+ *******************************************************************************/
+package org.cryptomator.webdav.jackrabbitservlet;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.cryptomator.filesystem.FileSystem;
+import org.cryptomator.filesystem.nio.NioFileSystem;
+
+public class NioWebDavServer {
+
+ public static void main(String[] args) throws Exception {
+ FileSystem fileSystem = setupFilesystem();
+ FileSystemBasedWebDavServer server = new FileSystemBasedWebDavServer(fileSystem);
+
+ server.start();
+ System.out.println("Server started. Press any key to stop it...");
+ System.in.read();
+ server.stop();
+ }
+
+ private static FileSystem setupFilesystem() throws IOException {
+ BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset()));
+ System.out.print("Enter absolute path to serve (must be an existing directory): ");
+ Path path = Paths.get(in.readLine());
+ if (!Files.isDirectory(path)) {
+ throw new RuntimeException("Path is not a directory");
+ }
+ return NioFileSystem.rootedAt(path);
+ }
+
+}
diff --git a/main/pom.xml b/main/pom.xml
index 6b8ad2b48..e32a4e283 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -70,6 +70,11 @@
filesystem-api
${project.version}
+
+ org.cryptomator
+ filesystem-nio
+ ${project.version}
+
org.cryptomator
filesystem-inmemory