package jp.co.worksap.workspace.common; import java.io.File; import lombok.extern.slf4j.Slf4j; import org.codehaus.plexus.archiver.AbstractUnArchiver; import org.codehaus.plexus.archiver.tar.TarGZipUnArchiver; import org.codehaus.plexus.archiver.zip.ZipUnArchiver; import org.codehaus.plexus.logging.AbstractLogger; import org.codehaus.plexus.logging.Logger; public class UnArchiver { public void extract(File source, File destDirectory) { final AbstractUnArchiver unarchiver; if (source.getName().endsWith(".gz")) { unarchiver = new TarGZipUnArchiver(); } else if (source.getName().endsWith(".zip")) { unarchiver = new ZipUnArchiver(); } else { throw new IllegalArgumentException("Unknown format: " + source.getName()); } destDirectory.mkdirs(); unarchiver.setSourceFile(source); unarchiver.setDestDirectory(destDirectory); unarchiver.enableLogging(new SLf4jBridgingLogger( org.codehaus.plexus.logging.Logger.LEVEL_INFO, "console" )); unarchiver.extract(); } @Slf4j private static final class SLf4jBridgingLogger extends AbstractLogger { public SLf4jBridgingLogger(int threshold, String name) { super(threshold, name); } @Override public void debug(String message, Throwable throwable) { log.debug(message, throwable); } @Override public void info(String message, Throwable throwable) { log.info(message, throwable); } @Override public void warn(String message, Throwable throwable) { log.warn(message, throwable); } @Override public void error(String message, Throwable throwable) { log.error(message, throwable); } @Override public void fatalError(String message, Throwable throwable) { log.error(message, throwable); } @Override public Logger getChildLogger(String name) { return this; } } }