/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.test.infrastructure.process.rules;
import static org.apache.commons.io.FileUtils.copyInputStreamToFile;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.commons.io.FileUtils;
public class DistroUnzipper {
private File file;
private File destDir;
private File rootFile;
public DistroUnzipper(File file, File destDir) {
this.file = file;
this.destDir = destDir;
}
public File muleHome() {
return rootFile;
}
public DistroUnzipper unzip() throws IOException {
try (ZipFile zip = new ZipFile(file)) {
Enumeration<? extends ZipEntry> zipFileEntries = zip.entries();
ZipEntry root = zipFileEntries.nextElement();
rootFile = new File(destDir, root.getName());
rootFile.mkdirs();
chmodRwx(rootFile);
while (zipFileEntries.hasMoreElements()) {
ZipEntry entry = zipFileEntries.nextElement();
File destFile = new File(destDir, entry.getName());
if (entry.isDirectory()) {
destFile.mkdir();
} else {
copyInputStreamToFile(zip.getInputStream(entry), destFile);
chmodRwx(destFile);
}
}
return this;
}
}
private void chmodRwx(File destFile) {
destFile.setExecutable(true, false);
destFile.setWritable(true, false);
destFile.setReadable(true, false);
}
}