package com.github.sriki77.apiproxy.instrument.io;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.zeroturnaround.zip.ZipUtil;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class ProxyZipFileHandler extends ProxyDirectoryHandler {
private File zipFile;
public ProxyZipFileHandler(File zipFile) throws Exception {
super(expandZipFile(zipFile));
this.zipFile = zipFile;
}
static File expandZipFile(File zipFile) throws IOException {
final Path tempDirectory = Files.createTempDirectory(zipFile.getName());
ZipUtil.unpack(zipFile, tempDirectory.toFile());
return tempDirectory.toFile();
}
public File buildInstrumentedZipFile() {
final File parentDir = zipFile.getParentFile();
final File targetZipFile = targetZipFile(parentDir);
FileUtils.deleteQuietly(targetZipFile);
ZipUtil.pack(proxyDir, targetZipFile);
return targetZipFile;
}
private File targetZipFile(File parentDir) {
final String origName = zipFile.getName();
final String newName = FilenameUtils.getBaseName(origName) + "_instr." +
FilenameUtils.getExtension(origName);
return new File(parentDir, newName);
}
@Override
public void close() throws IOException {
super.close();
File instrZipFile = buildInstrumentedZipFile();
System.err.println("Instrument File generated: " + instrZipFile);
}
}