Add collaboration feature
[sdc.git] / openecomp-be / tools / zusammen-tools / src / main / java / org / openecomp / core / tools / util / ZipUtils.java
1 package org.openecomp.core.tools.util;
2
3 import com.google.common.io.ByteStreams;
4 import org.openecomp.sdc.logging.api.Logger;
5 import org.openecomp.sdc.logging.api.LoggerFactory;
6
7 import java.io.BufferedOutputStream;
8 import java.io.File;
9 import java.io.FileInputStream;
10 import java.io.FileOutputStream;
11 import java.io.IOException;
12 import java.nio.file.Files;
13 import java.nio.file.Path;
14 import java.nio.file.Paths;
15 import java.util.Objects;
16 import java.util.Scanner;
17 import java.util.Set;
18 import java.util.stream.Collectors;
19 import java.util.zip.ZipEntry;
20 import java.util.zip.ZipInputStream;
21 import java.util.zip.ZipOutputStream;
22
23 public class ZipUtils {
24
25     private static final Logger logger = LoggerFactory.getLogger(ZipUtils.class);
26
27     public static void createZip(String zipFileName, Path dir) throws IOException {
28         File dirObj = dir.toFile();
29         Path zippedFile = Files.createFile(Paths.get(zipFileName));
30         try (
31                 FileOutputStream fileOutputStream = new FileOutputStream(File.separator + zippedFile.toFile());
32                 BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
33                 ZipOutputStream out = new ZipOutputStream(bos)) {
34             File[] files = dirObj.listFiles();
35             for (File file : files) {
36                 out.putNextEntry(new ZipEntry(file.getName()));
37                 Files.copy(Paths.get(file.getPath()), out);
38                 out.closeEntry();
39             }
40             Utils.printMessage(logger, "Zip file was created " + zipFileName);
41         }
42     }
43
44     public static final Set<String> cleanStr(Set<String> inFilterStrs) {
45         return inFilterStrs.stream().map(inFilterStr -> {
46                     if (Objects.isNull(inFilterStr)) {
47                         return inFilterStr;
48                     }
49                     Scanner scan = new Scanner(inFilterStr);
50                     while (scan.hasNextLine()) {
51                         inFilterStr = scan.nextLine().replaceAll("[^a-zA-Z0-9]", "");
52                     }
53                     return inFilterStr;
54                 }
55         ).collect(Collectors.toSet());
56     }
57
58     static void addDir(File dirObj, ZipOutputStream out, String root, Set<String> filterItem) throws IOException {
59         File[] files = dirObj.listFiles();
60         filterItem = cleanStr(filterItem);
61
62         for (int i = 0; i < files.length; i++) {
63             if (files[i].isDirectory()) {
64                 addDir(files[i], out, root, filterItem);
65                 String filePath = files[i].getAbsolutePath().replace(root + File.separator, "") + File.separator;
66                 out.putNextEntry(new ZipEntry(filePath));
67                 continue;
68             }
69             try (FileInputStream in = new FileInputStream((files[i].getAbsolutePath()))) {
70                 String filePath = files[i].getAbsolutePath().replace(root + File.separator, "");
71                 if (filterItem.isEmpty() || filterItem.stream().anyMatch(s -> filePath.contains(s))) {
72                     out.putNextEntry(new ZipEntry(filePath));
73                     try {
74                         ByteStreams.copy(in, out);
75                     } finally {
76                         out.closeEntry();
77                     }
78                 }
79
80             }
81         }
82     }
83
84     public static void unzip(Path zipFile, Path outputFolder) throws IOException {
85         if (zipFile == null || outputFolder == null) {
86             return;
87         }
88         if (!outputFolder.toFile().exists()) {
89             Files.createDirectories(outputFolder);
90         }
91
92         try (FileInputStream fileInputStream = new FileInputStream(zipFile.toFile());
93              ZipInputStream zis = new ZipInputStream(fileInputStream)) {
94             ZipEntry ze = zis.getNextEntry();
95             while (ze != null) {
96                 String fileName = ze.getName();
97                 File newFile = new File(outputFolder.toString() + File.separator + fileName);
98                 if (ze.isDirectory()) {
99                     Path path = newFile.toPath();
100                     if (!path.toFile().exists()) {
101                         Files.createDirectories(path);
102                     }
103                 } else {
104                     new File(newFile.getParent()).mkdirs();
105                     try (FileOutputStream fos = new FileOutputStream(newFile)) {
106                         ByteStreams.copy(zis, fos);
107                     }
108                 }
109                 ze = zis.getNextEntry();
110             }
111
112             zis.closeEntry();
113         }
114
115     }
116 }
117