From dae2814b0fd1e92caa2577a3d35f6e4a807c8402 Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Mon, 20 Jul 2020 22:01:10 +0200 Subject: [PATCH] Added MountPointRequirement-Enum Added MountPointRequirement-Enum and added method getMountPointRequirement() to Volume (and all implementing classes) to query the requirment for the specific VolumeProvider. --- .../common/vaults/DokanyVolume.java | 5 +++ .../cryptomator/common/vaults/FuseVolume.java | 5 +++ .../common/vaults/MountPointRequirement.java | 36 +++++++++++++++++++ .../org/cryptomator/common/vaults/Volume.java | 2 ++ .../common/vaults/WebDavVolume.java | 5 +++ 5 files changed, 53 insertions(+) create mode 100644 main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java index 1bfd813e3..0c0e4761e 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java @@ -106,6 +106,11 @@ public class DokanyVolume implements Volume { return Optional.ofNullable(mountPoint); } + @Override + public MountPointRequirement getMountPointRequirement() { + return MountPointRequirement.EMPTY_MOUNT_POINT; + } + public static boolean isSupportedStatic() { return MountFactory.isApplicable(); } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java index bce307afc..e944d5fd6 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java @@ -182,6 +182,11 @@ public class FuseVolume implements Volume { return Optional.ofNullable(mountPoint); } + @Override + public MountPointRequirement getMountPointRequirement() { + return SystemUtils.IS_OS_WINDOWS ? MountPointRequirement.PARENT_NO_MOUNT_POINT : MountPointRequirement.EMPTY_MOUNT_POINT; + } + public static boolean isSupportedStatic() { return FuseMountFactory.isFuseSupported(); } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java b/main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java new file mode 100644 index 000000000..192079220 --- /dev/null +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java @@ -0,0 +1,36 @@ +package org.cryptomator.common.vaults; + +/** + * Enumeration used to indicate the requirements for mounting a vault + * using a specific {@link Volume VolumeProvider}, e.g. {@link FuseVolume}. + */ +public enum MountPointRequirement { + + /** + * No Mountpoint on the local filesystem required. (e.g. WebDAV) + */ + NONE, + + /** + * A parent folder is required, but the actual Mountpoint must not exist. + */ + PARENT_NO_MOUNT_POINT, + + /** + * A parent folder is required, but the actual Mountpoint may exist. + */ + PARENT_OPT_MOUNT_POINT, + + /** + * The actual Mountpoint must exist, must be empty and the parent must exist aswell. + */ + EMPTY_MOUNT_POINT; + +// /** +// * The actual Mountpoint must exist and may contain files. +// */ +// MOUNT_POINT; + + + +} \ No newline at end of file diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java index a0aa11be8..22759d61b 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java @@ -32,6 +32,8 @@ public interface Volume { Optional getMountPoint(); + MountPointRequirement getMountPointRequirement(); + // optional forced unmounting: default boolean supportsForcedUnmount() { diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java index a12236230..a8e84c80c 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java @@ -101,6 +101,11 @@ public class WebDavVolume implements Volume { return Optional.ofNullable(mountPoint); } + @Override + public MountPointRequirement getMountPointRequirement() { + return MountPointRequirement.NONE; + } + private String getLocalhostAliasOrNull() { try { InetAddress alias = InetAddress.getByName(LOCALHOST_ALIAS);