From 97f2cee1ae63c8839c5990156756be648a96b7a5 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 19 Dec 2016 13:57:14 +0100 Subject: [PATCH] mount name now included in servlet path --- .../java/org/cryptomator/ui/model/Vault.java | 40 ++----------------- .../ui/settings/VaultSettings.java | 29 +++++++++++++- .../ui/settings/VaultSettingsJsonAdapter.java | 2 +- .../VaultSettingsTest.java} | 14 +++---- 4 files changed, 39 insertions(+), 46 deletions(-) rename main/ui/src/test/java/org/cryptomator/ui/{model/VaultTest.java => settings/VaultSettingsTest.java} (58%) diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java b/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java index 4d739d44b..bb4255b54 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java @@ -14,8 +14,6 @@ import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.text.Normalizer; -import java.text.Normalizer.Form; import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; @@ -63,11 +61,6 @@ public class Vault { this.vaultSettings = vaultSettings; this.server = server; this.closer = closer; - try { - setMountName(name().getValue()); - } catch (IllegalArgumentException e) { - // mount name needs to be set by the user explicitly later - } } // ****************************************************************************** @@ -102,7 +95,7 @@ public class Vault { if (!server.isRunning()) { server.start(); } - server.startWebDavServlet(fs.getPath("/"), vaultSettings.getId()); + server.startWebDavServlet(fs.getPath("/"), vaultSettings.getId() + "/" + vaultSettings.getMountName()); } catch (IOException e) { LOG.error("Unable to provide frontend", e); } finally { @@ -215,32 +208,6 @@ public class Vault { return 0l; } - /** - * Tries to form a similar string using the regular latin alphabet. - * - * @param string - * @return a string composed of a-z, A-Z, 0-9, and _. - */ - public static String normalize(String string) { - String normalized = Normalizer.normalize(string, Form.NFD); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < normalized.length(); i++) { - char c = normalized.charAt(i); - if (Character.isWhitespace(c)) { - if (builder.length() == 0 || builder.charAt(builder.length() - 1) != '_') { - builder.append('_'); - } - } else if (c < 127 && Character.isLetterOrDigit(c)) { - builder.append(c); - } else if (c < 127) { - if (builder.length() == 0 || builder.charAt(builder.length() - 1) != '_') { - builder.append('_'); - } - } - } - return builder.toString(); - } - public String getMountName() { return vaultSettings.getMountName(); } @@ -252,11 +219,10 @@ public class Vault { * @throws IllegalArgumentException if the name is empty after normalization */ public void setMountName(String mountName) throws IllegalArgumentException { - String normalized = normalize(mountName); - if (StringUtils.isEmpty(normalized)) { + if (StringUtils.isBlank(mountName)) { throw new IllegalArgumentException("mount name is empty"); } else { - vaultSettings.setMountName(normalized); + vaultSettings.setMountName(mountName); } } diff --git a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java index 1082cc8a3..168e6ef19 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java +++ b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java @@ -7,6 +7,8 @@ import java.util.Base64; import java.util.Objects; import java.util.UUID; +import org.apache.commons.lang3.StringUtils; + import com.google.gson.annotations.JsonAdapter; import javafx.beans.property.Property; @@ -46,6 +48,28 @@ public class VaultSettings { return uuidBuffer.array(); } + /* + * visible for testing + */ + static String normalizeMountName(String mountName) { + String normalizedMountName = StringUtils.stripAccents(mountName); + StringBuilder builder = new StringBuilder(); + for (char c : normalizedMountName.toCharArray()) { + if (Character.isWhitespace(c)) { + if (builder.length() == 0 || builder.charAt(builder.length() - 1) != '_') { + builder.append('_'); + } + } else if (c < 127 && Character.isLetterOrDigit(c)) { + builder.append(c); + } else { + if (builder.length() == 0 || builder.charAt(builder.length() - 1) != '_') { + builder.append('_'); + } + } + } + return builder.toString(); + } + /* Getter/Setter */ public String getId() { @@ -62,6 +86,9 @@ public class VaultSettings { public void setPath(Path path) { this.path.setValue(path); + if (StringUtils.isBlank(getMountName())) { + setMountName(path.getFileName().toString()); + } } public Property mountNameProperty() { @@ -73,7 +100,7 @@ public class VaultSettings { } public void setMountName(String mountName) { - this.mountName.setValue(mountName); + this.mountName.setValue(normalizeMountName(mountName)); } public Property winDriveLetterProperty() { diff --git a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java index a6ed2393e..bbccdc159 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java +++ b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java @@ -55,8 +55,8 @@ class VaultSettingsJsonAdapter extends TypeAdapter { in.endObject(); VaultSettings settings = (id == null) ? VaultSettings.withRandomId() : new VaultSettings(id); - settings.setPath(Paths.get(path)); settings.setMountName(mountName); + settings.setPath(Paths.get(path)); settings.setWinDriveLetter(winDriveLetter); return settings; } diff --git a/main/ui/src/test/java/org/cryptomator/ui/model/VaultTest.java b/main/ui/src/test/java/org/cryptomator/ui/settings/VaultSettingsTest.java similarity index 58% rename from main/ui/src/test/java/org/cryptomator/ui/model/VaultTest.java rename to main/ui/src/test/java/org/cryptomator/ui/settings/VaultSettingsTest.java index 02860edc2..604e43ed8 100644 --- a/main/ui/src/test/java/org/cryptomator/ui/model/VaultTest.java +++ b/main/ui/src/test/java/org/cryptomator/ui/settings/VaultSettingsTest.java @@ -6,21 +6,21 @@ * Contributors: * Sebastian Stenzel - initial API and implementation *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.ui.settings; import static org.junit.Assert.assertEquals; import org.junit.Test; -public class VaultTest { +public class VaultSettingsTest { @Test public void testNormalize() throws Exception { - assertEquals("_", Vault.normalize(" ")); - assertEquals("a", Vault.normalize("ä")); - assertEquals("C", Vault.normalize("Ĉ")); - assertEquals("_", Vault.normalize(":")); - assertEquals("", Vault.normalize("汉语")); + assertEquals("_", VaultSettings.normalizeMountName(" ")); + assertEquals("a", VaultSettings.normalizeMountName("ä")); + assertEquals("C", VaultSettings.normalizeMountName("Ĉ")); + assertEquals("_", VaultSettings.normalizeMountName(":")); + assertEquals("_", VaultSettings.normalizeMountName("汉语")); } }