summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/archives/ZipPaths.java
blob: 52fa2f46d6cdb11b6cb675b7a73409eeb2e0af8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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);
    }
}