Quellcode durchsuchen

Refactor LocationPreset enum:
* use static inner class
* add getDisplayName method
* make instance variables final

Co-authored-by: Sebastian Stenzel <overheadhunter@users.noreply.github.com>

Armin Schrenk vor 2 Jahren
Ursprung
Commit
5ab74affb5
1 geänderte Dateien mit 23 neuen und 14 gelöschten Zeilen
  1. 23 14
      src/main/java/org/cryptomator/common/LocationPreset.java

+ 23 - 14
src/main/java/org/cryptomator/common/LocationPreset.java

@@ -19,22 +19,12 @@ public enum LocationPreset {
 
 	LOCAL("local");
 
-	final String name;
-	final List<Path> candidates;
+	private final String name;
+	private final List<Path> candidates;
 
 	LocationPreset(String name, String... candidates) {
 		this.name = name;
-
-		String userHome = System.getProperty("user.home");
-		this.candidates = Arrays.stream(candidates).map(c -> LocationPreset.resolveHomePath(userHome, c)).map(Path::of).toList();
-	}
-
-	private static String resolveHomePath(String home, String path) {
-		if (path.startsWith("~/")) {
-			return home + path.substring(1);
-		} else {
-			return path;
-		}
+		this.candidates = Arrays.stream(candidates).map(UserHome::resolve).map(Path::of).toList();
 	}
 
 	/**
@@ -46,9 +36,28 @@ public enum LocationPreset {
 		return candidates.stream().filter(Files::isDirectory).findFirst().orElse(null);
 	}
 
+	public String getDisplayName() {
+		return name;
+	}
+
 	@Override
 	public String toString() {
-		return name;
+		return getDisplayName();
+	}
+
+	//this contruct is needed, since static members are initialized after every enum member is initialized
+	//TODO: refactor this to normal class and use this also in different parts of the project
+	private static class UserHome {
+
+		private static final String USER_HOME = System.getProperty("user.home");
+
+		private static String resolve(String path) {
+			if (path.startsWith("~/")) {
+				return UserHome.USER_HOME + path.substring(1);
+			} else {
+				return path;
+			}
+		}
 	}
 
 }