diff --git a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/AbstractSessionAwareWebDavResourceFactory.java b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/AbstractSessionAwareWebDavResourceFactory.java deleted file mode 100644 index edd85a9db..000000000 --- a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/AbstractSessionAwareWebDavResourceFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.cryptomator.webdav.jackrabbit; - -import org.apache.jackrabbit.webdav.DavException; -import org.apache.jackrabbit.webdav.DavResource; -import org.apache.jackrabbit.webdav.DavResourceFactory; -import org.apache.jackrabbit.webdav.DavResourceLocator; -import org.apache.jackrabbit.webdav.DavServletRequest; -import org.apache.jackrabbit.webdav.DavServletResponse; -import org.apache.jackrabbit.webdav.DavSession; - -abstract class AbstractSessionAwareWebDavResourceFactory implements DavResourceFactory { - - @Override - public DavResource createResource(DavResourceLocator locator, DavServletRequest request, DavServletResponse response) throws DavException { - final DavSession session = request.getDavSession(); - if (session != null && session instanceof WebDavSession) { - return createDavResource(locator, (WebDavSession) session, request, response); - } else { - throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, "Unsupported session type."); - } - } - - protected abstract DavResource createDavResource(DavResourceLocator locator, WebDavSession session, DavServletRequest request, DavServletResponse response) throws DavException; - - @Override - public DavResource createResource(DavResourceLocator locator, DavSession session) throws DavException { - if (session != null && session instanceof WebDavSession) { - return createDavResource(locator, (WebDavSession) session); - } else { - throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, "Unsupported session type."); - } - } - - protected abstract DavResource createDavResource(DavResourceLocator locator, WebDavSession session); - -} diff --git a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavLocatorFactory.java b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavLocatorFactoryImpl.java similarity index 95% rename from main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavLocatorFactory.java rename to main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavLocatorFactoryImpl.java index ee00c53aa..24e7bbf25 100644 --- a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavLocatorFactory.java +++ b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavLocatorFactoryImpl.java @@ -21,14 +21,14 @@ import org.cryptomator.crypto.Cryptor; import org.cryptomator.crypto.CryptorIOSupport; import org.cryptomator.crypto.SensitiveDataSwipeListener; -class WebDavLocatorFactory extends AbstractLocatorFactory implements SensitiveDataSwipeListener, CryptorIOSupport { +class DavLocatorFactoryImpl extends AbstractLocatorFactory implements SensitiveDataSwipeListener, CryptorIOSupport { private static final int MAX_CACHED_PATHS = 10000; private final Path fsRoot; private final Cryptor cryptor; private final BidiMap pathCache = new BidiLRUMap<>(MAX_CACHED_PATHS); // - WebDavLocatorFactory(String fsRoot, String httpRoot, Cryptor cryptor) { + DavLocatorFactoryImpl(String fsRoot, String httpRoot, Cryptor cryptor) { super(httpRoot); this.fsRoot = FileSystems.getDefault().getPath(fsRoot); this.cryptor = cryptor; diff --git a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavResourceFactory.java b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavResourceFactoryImpl.java similarity index 96% rename from main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavResourceFactory.java rename to main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavResourceFactoryImpl.java index d4dabcd73..834c01f9f 100644 --- a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavResourceFactory.java +++ b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavResourceFactoryImpl.java @@ -30,13 +30,13 @@ import org.cryptomator.webdav.jackrabbit.resources.NonExistingNode; import org.cryptomator.webdav.jackrabbit.resources.ResourcePathUtils; import org.eclipse.jetty.http.HttpHeader; -class WebDavResourceFactory implements DavResourceFactory { +class DavResourceFactoryImpl implements DavResourceFactory { private final LockManager lockManager = new SimpleLockManager(); private final Cryptor cryptor; private final boolean checkFileIntegrity; - WebDavResourceFactory(Cryptor cryptor, boolean checkFileIntegrity) { + DavResourceFactoryImpl(Cryptor cryptor, boolean checkFileIntegrity) { this.cryptor = cryptor; this.checkFileIntegrity = checkFileIntegrity; } diff --git a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavSession.java b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavSessionImpl.java similarity index 62% rename from main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavSession.java rename to main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavSessionImpl.java index 79e90dc14..01d2cf92d 100644 --- a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavSession.java +++ b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavSessionImpl.java @@ -8,49 +8,38 @@ ******************************************************************************/ package org.cryptomator.webdav.jackrabbit; +import java.util.HashSet; + import org.apache.jackrabbit.webdav.DavSession; -import org.apache.jackrabbit.webdav.WebdavRequest; -class WebDavSession implements DavSession { - - private final WebdavRequest request; - - WebDavSession(WebdavRequest request) { - this.request = request; - } +class DavSessionImpl implements DavSession { + + private final HashSet lockTokens = new HashSet(); + private final HashSet references = new HashSet(); @Override public void addReference(Object reference) { - // TODO Auto-generated method stub - + references.add(reference); } @Override public void removeReference(Object reference) { - // TODO Auto-generated method stub - + references.remove(reference); } @Override public void addLockToken(String token) { - // TODO Auto-generated method stub - + lockTokens.add(token); } @Override public String[] getLockTokens() { - // TODO Auto-generated method stub - return null; + return lockTokens.toArray(new String[lockTokens.size()]); } @Override public void removeLockToken(String token) { - // TODO Auto-generated method stub - - } - - public WebdavRequest getRequest() { - return request; + lockTokens.remove(token); } } diff --git a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavSessionProvider.java b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavSessionProviderImpl.java similarity index 67% rename from main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavSessionProvider.java rename to main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavSessionProviderImpl.java index 0b6ca8aab..54cd05d6a 100644 --- a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavSessionProvider.java +++ b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/DavSessionProviderImpl.java @@ -9,21 +9,28 @@ package org.cryptomator.webdav.jackrabbit; import org.apache.jackrabbit.webdav.DavException; +import org.apache.jackrabbit.webdav.DavSession; import org.apache.jackrabbit.webdav.DavSessionProvider; import org.apache.jackrabbit.webdav.WebdavRequest; -class WebDavSessionProvider implements DavSessionProvider { +class DavSessionProviderImpl implements DavSessionProvider { @Override public boolean attachSession(WebdavRequest request) throws DavException { // every request gets a session - request.setDavSession(new WebDavSession(request)); + final DavSession session = new DavSessionImpl(); + session.addReference(request); + request.setDavSession(session); return true; } @Override public void releaseSession(WebdavRequest request) { - // do nothing + final DavSession session = request.getDavSession(); + if (session != null) { + session.removeReference(request); + request.setDavSession(null); + } } } diff --git a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavServlet.java b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavServlet.java index 8c5c6c96e..cc5e9bee6 100644 --- a/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavServlet.java +++ b/main/core/src/main/java/org/cryptomator/webdav/jackrabbit/WebDavServlet.java @@ -39,14 +39,14 @@ public class WebDavServlet extends AbstractWebdavServlet { public void init(ServletConfig config) throws ServletException { super.init(config); - davSessionProvider = new WebDavSessionProvider(); + davSessionProvider = new DavSessionProviderImpl(); final String fsRoot = config.getInitParameter(CFG_FS_ROOT); final String httpRoot = config.getInitParameter(CFG_HTTP_ROOT); final boolean checkFileIntegrity = Boolean.parseBoolean(config.getInitParameter(CFG_CHECK_FILE_INTEGRITY)); - this.davLocatorFactory = new WebDavLocatorFactory(fsRoot, httpRoot, cryptor); + this.davLocatorFactory = new DavLocatorFactoryImpl(fsRoot, httpRoot, cryptor); - this.davResourceFactory = new WebDavResourceFactory(cryptor, checkFileIntegrity); + this.davResourceFactory = new DavResourceFactoryImpl(cryptor, checkFileIntegrity); } @Override