Author: chatellier Date: 2009-08-26 15:34:26 +0000 (Wed, 26 Aug 2009) New Revision: 2536 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java Log: New unzip implementation (more efficient with excluded paths) Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-08-26 15:11:28 UTC (rev 2535) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-08-26 15:34:26 UTC (rev 2536) @@ -23,7 +23,6 @@ import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -31,12 +30,14 @@ import java.io.StringWriter; import java.io.Writer; import java.rmi.RemoteException; +import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.concurrent.Semaphore; import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import org.apache.commons.io.FileUtils; @@ -46,7 +47,6 @@ import org.codelutin.util.FileUtil; import org.codelutin.util.MD5; import org.codelutin.util.MD5InputStream; -import org.codelutin.util.ZipUtil; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; @@ -1051,51 +1051,56 @@ return remotePath; } - + /** * Unzip compressed archive and keep non exluded patterns. * * @param file archive file * @param targetDir destination file - * @param excludes excludes pattern + * @param excludes excludes pattern (pattern must match complete entry name including root folder) * @throws IOException * - * @Deprecated this code may be in lutin util later... + * @deprecated this code may be in lutin util later... */ protected void uncompressFiltred(File file, File targetDir, String... excludes) throws IOException { - ZipInputStream in = new ZipInputStream(new FileInputStream(file)); - ZipEntry entry; - while ((entry = in.getNextEntry()) != null) { + + ZipFile zipFile = new ZipFile(file); + + Enumeration<? extends ZipEntry> entries = zipFile.entries(); + + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); String name = entry.getName(); - // add continue to break loop + boolean excludeEntry = false; if (excludes != null) { - boolean excludeEntry = false; for (String exclude : excludes) { if (name.matches(exclude)) { excludeEntry = true; } } - if (excludeEntry) { - continue; - } } - File target = new File(targetDir, name); - if (entry.isDirectory()) { - target.mkdirs(); - } else { - target.getParentFile().mkdirs(); - OutputStream out = new BufferedOutputStream(new FileOutputStream(target)); - byte[] buffer = new byte[8 * 1024]; - int len; - while ((len = in.read(buffer, 0, 8 * 1024)) != -1) { - out.write(buffer, 0, len); + if (!excludeEntry) { + File target = new File(targetDir, name); + if (entry.isDirectory()) { + target.mkdirs(); + } else { + // get inputstream only here + InputStream in = zipFile.getInputStream(entry); + target.getParentFile().mkdirs(); + OutputStream out = new BufferedOutputStream(new FileOutputStream(target)); + byte[] buffer = new byte[8 * 1024]; + int len; + + while ((len = in.read(buffer, 0, 8 * 1024)) != -1) { + out.write(buffer, 0, len); + } + out.close(); + in.close(); } - out.close(); } } - in.close(); } } Modified: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java =================================================================== --- isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2009-08-26 15:11:28 UTC (rev 2535) +++ isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2009-08-26 15:34:26 UTC (rev 2536) @@ -27,11 +27,8 @@ import org.apache.commons.logging.LogFactory; import org.junit.Test; -import com.sun.source.tree.AssertTree; - import fr.ifremer.isisfish.AbstractIsisFishTest; import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.simulator.SimulationHelperTest; import freemarker.template.TemplateException; /**