|
39 | 39 | import ru.olegcherednik.zip4jvm.utils.function.Writer;
|
40 | 40 |
|
41 | 41 | import lombok.extern.slf4j.Slf4j;
|
| 42 | +import org.apache.commons.lang3.StringUtils; |
42 | 43 |
|
43 | 44 | import java.io.IOException;
|
44 | 45 | import java.nio.file.Files;
|
@@ -74,35 +75,59 @@ public ZipEngine(Path zip, ZipSettings settings) throws IOException {
|
74 | 75 | }
|
75 | 76 |
|
76 | 77 | @Override
|
77 |
| - public void add(Path path, String name) { |
| 78 | + public void add(Path path) { |
| 79 | + add(path, PathUtils.getName(path), ""); |
| 80 | + } |
| 81 | + |
| 82 | + @Override |
| 83 | + public void addWithRename(Path path, String name) { |
| 84 | + add(path, name, ""); |
| 85 | + } |
| 86 | + |
| 87 | + @Override |
| 88 | + public void addWithMove(Path path, String dir) { |
| 89 | + add(path, PathUtils.getName(path), dir); |
| 90 | + } |
| 91 | + |
| 92 | + private void add(Path path, String name, String dir) { |
78 | 93 | if (!Files.exists(path))
|
79 | 94 | return;
|
80 | 95 |
|
81 | 96 | if (Files.isSymbolicLink(path))
|
82 | 97 | path = ZipSymlinkEngine.getSymlinkTarget(path);
|
83 | 98 |
|
| 99 | + for (NamedPath namedPath : getNamedPaths(path, name, dir)) { |
| 100 | + String entryName = namedPath.getEntryName(); |
| 101 | + ZipEntrySettings entrySettings = settings.getEntrySettings(entryName); |
| 102 | + add(namedPath.createZipEntry(entrySettings)); |
| 103 | + } |
| 104 | + } |
| 105 | + |
| 106 | + private List<NamedPath> getNamedPaths(Path path, String name, String dir) { |
84 | 107 | if (Files.isDirectory(path))
|
85 |
| - zipSymlinkEngine.list(getDirectoryNamedPaths(path, name)).stream() |
86 |
| - .map(namedPath -> { |
87 |
| - String entryName = namedPath.getEntryName(); |
88 |
| - ZipEntrySettings entrySettings = settings.getEntrySettings(entryName); |
89 |
| - return namedPath.createZipEntry(entrySettings); |
90 |
| - }) |
91 |
| - .forEach(this::add); |
92 |
| - else if (Files.isRegularFile(path)) { |
93 |
| - ZipEntrySettings entrySettings = settings.getEntrySettings(name); |
94 |
| - ZipEntry zipEntry = ZipEntryBuilder.regularFile(path, name, entrySettings); |
95 |
| - add(zipEntry); |
96 |
| - } else |
97 |
| - log.warn("Unknown path type '{}'; ignore it", path); |
98 |
| - } |
99 |
| - |
100 |
| - private List<NamedPath> getDirectoryNamedPaths(Path path, String name) { |
101 |
| - return settings.isRemoveRootDir() ? PathUtils.list(path).stream() |
102 |
| - .map(NamedPath::create) |
103 |
| - .sorted(NamedPath.SORT_BY_NAME_ASC) |
104 |
| - .collect(Collectors.toList()) |
105 |
| - : Collections.singletonList(NamedPath.create(path, name)); |
| 108 | + return zipSymlinkEngine.list(getDirectoryNamedPaths(path, name, dir)); |
| 109 | + |
| 110 | + if (Files.isRegularFile(path)) { |
| 111 | + if (StringUtils.isNotBlank(dir)) |
| 112 | + name = dir + '/' + name; |
| 113 | + |
| 114 | + return Collections.singletonList(NamedPath.create(path, name)); |
| 115 | + } |
| 116 | + |
| 117 | + log.warn("Unknown path type '{}'; ignore it", path); |
| 118 | + return Collections.emptyList(); |
| 119 | + } |
| 120 | + |
| 121 | + private List<NamedPath> getDirectoryNamedPaths(Path path, String name, String dir) { |
| 122 | + if (settings.isRemoveRootDir()) |
| 123 | + return PathUtils.list(path).stream() |
| 124 | + .map(p -> StringUtils.isNotBlank(dir) |
| 125 | + ? NamedPath.create(p, dir + '/' + PathUtils.getName(p)) |
| 126 | + : NamedPath.create(p)) |
| 127 | + .sorted(NamedPath.SORT_BY_NAME_ASC) |
| 128 | + .collect(Collectors.toList()); |
| 129 | + |
| 130 | + return Collections.singletonList(NamedPath.create(path, name)); |
106 | 131 | }
|
107 | 132 |
|
108 | 133 | @Override
|
|
0 commit comments