aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2018-01-27 17:57:33 +0000
committerMichael Williamson <mike@zwobble.org>2018-01-27 17:57:33 +0000
commitf7759a47067afc709383b42043c57f70744f2029 (patch)
treeb826cf571017b18be8b74cf6736b882589862776 /src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java
parentd85402e6633a66cb494bae77ea834b4be6619751 (diff)
Extract ZipPaths for splitting and joining zip paths
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java b/src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java
new file mode 100644
index 0000000..52fa2f4
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java
@@ -0,0 +1,54 @@
+package org.zwobble.mammoth.internal.archives;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static org.zwobble.mammoth.internal.util.Lists.eagerFilter;
+
+public class ZipPaths {
+ private ZipPaths() {
+ }
+
+ public static class SplitPath {
+ private final String dirname;
+ private final String basename;
+
+ public SplitPath(String dirname, String basename) {
+ this.dirname = dirname;
+ this.basename = basename;
+ }
+
+ public String getDirname() {
+ return dirname;
+ }
+
+ public String getBasename() {
+ return basename;
+ }
+ }
+
+ public static SplitPath splitPath(String path) {
+ int index = path.lastIndexOf("/");
+ if (index == -1) {
+ return new SplitPath("", path);
+ } else {
+ String dirname = path.substring(0, index);
+ String basename = path.substring(index + 1);
+ return new SplitPath(dirname, basename);
+ }
+ }
+
+ public static String joinPath(String... paths) {
+ List<String> nonEmptyPaths = eagerFilter(asList(paths), path -> !path.isEmpty());
+
+ List<String> relevantPaths = new ArrayList<>();
+ for (String path : nonEmptyPaths) {
+ if (path.startsWith("/")) {
+ relevantPaths.clear();
+ }
+ relevantPaths.add(path);
+ }
+ return String.join("/", relevantPaths);
+ }
+}