r1690 - in trunk/src: main/java/org/nuiton/util test/java/org/nuiton/util test/resources test/resources/zip
Author: echatellier Date: 2009-10-29 18:28:59 +0100 (Thu, 29 Oct 2009) New Revision: 1690 Added: trunk/src/test/resources/zip/ trunk/src/test/resources/zip/test-uncompress.zip Modified: trunk/src/main/java/org/nuiton/util/ZipUtil.java trunk/src/test/java/org/nuiton/util/ZipUtilTest.java Log: Move uncompress filtred method from isis to nuiton-utils. Modified: trunk/src/main/java/org/nuiton/util/ZipUtil.java =================================================================== --- trunk/src/main/java/org/nuiton/util/ZipUtil.java 2009-10-26 16:26:38 UTC (rev 1689) +++ trunk/src/main/java/org/nuiton/util/ZipUtil.java 2009-10-29 17:28:59 UTC (rev 1690) @@ -26,6 +26,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; @@ -424,6 +425,55 @@ } /** + * Unzip compressed archive and keep non excluded patterns. + * + * @param file archive file + * @param targetDir destination file + * @param excludes excludes pattern (pattern must match complete entry name including root folder) + * @throws IOException + */ + protected static void uncompressFiltred(File file, File targetDir, String... excludes) throws IOException { + + 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) { + for (String exclude : excludes) { + if (name.matches(exclude)) { + excludeEntry = true; + } + } + } + + 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(); + } + } + } + } + /** * @deprecated unused/undocumented function */ public static String convertToZipEntryName(String txt, boolean isDir) { Modified: trunk/src/test/java/org/nuiton/util/ZipUtilTest.java =================================================================== --- trunk/src/test/java/org/nuiton/util/ZipUtilTest.java 2009-10-26 16:26:38 UTC (rev 1689) +++ trunk/src/test/java/org/nuiton/util/ZipUtilTest.java 2009-10-29 17:28:59 UTC (rev 1690) @@ -143,4 +143,46 @@ Assert.assertTrue(md5File.length() > 0); } + /** + * Test la fonction de decompression sans filtres. + * + * @throws IOException + */ + @Test + public void testUncompressFiltredWithoutFilter() throws IOException { + File archive = new File("src" + File.separator + "test" + + File.separator + "resources" + File.separator + "zip" + + File.separator + "test-uncompress.zip"); + File dest = new File("target", "testunzip"); + + if (log.isInfoEnabled()) { + log.info("Extracting " + archive + " to " + dest); + } + + ZipUtil.uncompressFiltred(archive, dest); + File ruleFile = new File(dest, "test-nonregression-20090203" + File.separator + "scripts" + File.separator + "RuleUtil.java"); + Assert.assertTrue(ruleFile.exists()); + } + + /** + * Test la fonction de decompression avec filtres. + * + * @throws IOException + */ + @Test + public void testUncompressFiltredWithFilter() throws IOException { + File archive = new File("src" + File.separator + "test" + + File.separator + "resources" + File.separator + "zip" + + File.separator + "test-uncompress.zip"); + File dest = new File("target", "testunzip2"); + String pattern = ".*/scripts/.*"; + + if (log.isInfoEnabled()) { + log.info("Extracting " + archive + " to " + dest + " without " + pattern); + } + + ZipUtil.uncompressFiltred(archive, dest, pattern); + File ruleFile = new File(dest, "test-nonregression-20090203" + File.separator + "scripts" + File.separator + "RuleUtil.java"); + Assert.assertFalse(ruleFile.exists()); + } } Added: trunk/src/test/resources/zip/test-uncompress.zip =================================================================== (Binary files differ) Property changes on: trunk/src/test/resources/zip/test-uncompress.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream
participants (1)
-
echatellier@users.nuiton.org