- Revision
- 1330
- Author
- mauro
- Date
- 2009-10-13 17:24:03 -0500 (Tue, 13 Oct 2009)
Log Message
ZipFileArchiver now supports both zipping and unzipping of files.
Modified Paths
- trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java
- trunk/web/web-io/src/main/java/org/jbehave/web/io/FileArchiver.java
- trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java
Added Paths
Removed Paths
Diff
Modified: trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java (1329 => 1330)
--- trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java 2009-10-13 11:54:46 UTC (rev 1329) +++ trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java 2009-10-13 22:24:03 UTC (rev 1330) @@ -38,7 +38,7 @@ } public List<File> listContent(String path){ - return archiver.listContent(archiver.unarchivedDir(new File(path))); + return archiver.listContent(archiver.directoryOf(new File(path))); } public void delete(List<String> paths) { @@ -56,7 +56,7 @@ } if ( archiver.isArchive(file) ){ // delete the unarchived directory too - deleteFile(archiver.unarchivedDir(file)); + deleteFile(archiver.directoryOf(file)); } file.delete(); }
Modified: trunk/web/web-io/src/main/java/org/jbehave/web/io/FileArchiver.java (1329 => 1330)
--- trunk/web/web-io/src/main/java/org/jbehave/web/io/FileArchiver.java 2009-10-13 11:54:46 UTC (rev 1329) +++ trunk/web/web-io/src/main/java/org/jbehave/web/io/FileArchiver.java 2009-10-13 22:24:03 UTC (rev 1330) @@ -10,10 +10,14 @@ boolean isArchive(File file); - void unarchive(File archive, File outputDir); + void archive(File archive, File directory); + + void unarchive(File archive, File directory); - File unarchivedDir(File archive); + List<File> listContent(File directory); - List<File> listContent(File directory); - + File directoryOf(File archive); + + File relativeTo(File file, File directory); + } \ No newline at end of file
Deleted: trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java (1329 => 1330)
--- trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java 2009-10-13 11:54:46 UTC (rev 1329) +++ trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java 2009-10-13 22:24:03 UTC (rev 1330) @@ -1,113 +0,0 @@ -package org.jbehave.web.io; - -import static org.apache.commons.lang.StringUtils.removeEnd; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; - -import org.apache.commons.compress.archivers.ArchiveInputStream; -import org.apache.commons.compress.archivers.ArchiveStreamFactory; -import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; -import org.apache.commons.compress.archivers.zip.ZipFile; -import org.apache.commons.io.IOUtils; - -/** - * File archiver for zip files - */ -public class ZipFileArchiver implements FileArchiver { - - private static final String ZIP = "zip"; - private static final String ZIP_EXT = ".zip"; - private ArchiveStreamFactory factory = new ArchiveStreamFactory(); - - public boolean isArchive(File file) { - return file.getName().endsWith(ZIP_EXT); - } - - public File unarchivedDir(File archive) { - return new File(removeEnd(archive.getPath(), ZIP_EXT)); - } - - public void unarchive(File archive, File outputDir) { - try { - ArchiveInputStream in = factory.createArchiveInputStream(ZIP, - new FileInputStream(archive)); - ZipFile zipfile = new ZipFile(archive); - for (Enumeration<?> e = zipfile.getEntries(); e.hasMoreElements();) { - ZipArchiveEntry entry = (ZipArchiveEntry) e.nextElement(); - unzipEntry(entry, in, outputDir); - } - in.close(); - } catch (Exception e) { - throw new FileUnarchiveFailedException(archive, outputDir, e); - } - } - - public List<File> listContent(File directory) { - List<File> content = new ArrayList<File>(); - try { - content.add(directory); - if (directory.isDirectory()) { - for (File file : directory.listFiles()) { - content.addAll(listContent(file)); - } - } - } catch (Exception e) { - } - return content; - } - - private void unzipEntry(ZipArchiveEntry entry, InputStream in, - File outputDir) throws IOException { - - if (entry.isDirectory()) { - createDir(new File(outputDir, entry.getName())); - return; - } - - File outputFile = new File(outputDir, entry.getName()); - if (!outputFile.getParentFile().exists()) { - createDir(outputFile.getParentFile()); - } - - copy(entry, in, outputDir); - - } - - private void createDir(File dir) throws IOException { - if (dir.exists()) { - return; - } - if (!dir.mkdirs()) { - throw new IOException("Failed to create dir " + dir); - } - } - - private void copy(ZipArchiveEntry entry, InputStream in, File outputDir) - throws FileNotFoundException, IOException { - File entryFile = new File(outputDir, entry.getName()); - OutputStream out = new FileOutputStream(entryFile); - IOUtils.copy(in, out); - out.close(); - } - - @SuppressWarnings("serial") - public static final class FileUnarchiveFailedException extends - RuntimeException { - - public FileUnarchiveFailedException(File archive, File outputDir, - Exception cause) { - super("Failed to unarchive " + archive + " to output dir " + outputDir, cause); - } - - } - -}
Added: trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java (0 => 1330)
--- trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java (rev 0) +++ trunk/web/web-io/src/main/java/org/jbehave/web/io/ZipFileArchiver.java 2009-10-13 22:24:03 UTC (rev 1330) @@ -0,0 +1,155 @@ +package org.jbehave.web.io; + +import static org.apache.commons.lang.StringUtils.removeEnd; +import static org.apache.commons.lang.StringUtils.removeStart; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +import org.apache.commons.compress.archivers.ArchiveInputStream; +import org.apache.commons.compress.archivers.ArchiveOutputStream; +import org.apache.commons.compress.archivers.ArchiveStreamFactory; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipFile; +import org.apache.commons.io.IOUtils; + +/** + * File archiver for zip files + */ +public class ZipFileArchiver implements FileArchiver { + + private static final String ZIP = "zip"; + private static final String ZIP_EXT = ".zip"; + private ArchiveStreamFactory factory = new ArchiveStreamFactory(); + + public boolean isArchive(File file) { + return file.getName().endsWith(ZIP_EXT); + } + + public void archive(File archive, File directory) { + try { + ArchiveOutputStream out = factory.createArchiveOutputStream(ZIP, + new FileOutputStream(archive)); + List<File> files = listContent(directory); + for (File file : files) { + if ( !file.isDirectory() ){ + ZipArchiveEntry entry = new ZipArchiveEntry(relativeTo(file, directory).getPath()); + zipEntry(entry, out, file); + } + } + out.close(); + } catch (Exception e) { + throw new FileArchiveFailedException(archive, directory, e); + } + } + + public File relativeTo(File file, File directory) { + return new File(removeStart(file.getPath(), directory.getPath()+"/")); + } + + private void zipEntry(ZipArchiveEntry entry, ArchiveOutputStream out, File file) + throws IOException, FileNotFoundException { + out.putArchiveEntry(entry); + IOUtils.copy(new FileInputStream(file), out); + out.closeArchiveEntry(); + } + + public File directoryOf(File archive) { + return new File(removeEnd(archive.getPath(), ZIP_EXT)); + } + + public void unarchive(File archive, File directory) { + try { + ArchiveInputStream in = factory.createArchiveInputStream(ZIP, + new FileInputStream(archive)); + ZipFile zipfile = new ZipFile(archive); + for (Enumeration<?> e = zipfile.getEntries(); e.hasMoreElements();) { + ZipArchiveEntry entry = (ZipArchiveEntry) e.nextElement(); + unzipEntry(entry, in, directory); + } + in.close(); + } catch (Exception e) { + throw new FileUnarchiveFailedException(archive, directory, e); + } + } + + public List<File> listContent(File directory) { + List<File> content = new ArrayList<File>(); + try { + content.add(directory); + if (directory.isDirectory()) { + for (File file : directory.listFiles()) { + content.addAll(listContent(file)); + } + } + } catch (Exception e) { + } + return content; + } + + private void unzipEntry(ZipArchiveEntry entry, InputStream in, + File directory) throws IOException { + + if (entry.isDirectory()) { + createDir(new File(directory, entry.getName())); + return; + } + + File outputFile = new File(directory, entry.getName()); + if (!outputFile.getParentFile().exists()) { + createDir(outputFile.getParentFile()); + } + + copy(entry, in, directory); + + } + + private void createDir(File dir) throws IOException { + if (dir.exists()) { + return; + } + if (!dir.mkdirs()) { + throw new IOException("Failed to create dir " + dir); + } + } + + private void copy(ZipArchiveEntry entry, InputStream in, File directory) + throws FileNotFoundException, IOException { + File entryFile = new File(directory, entry.getName()); + OutputStream out = new FileOutputStream(entryFile); + IOUtils.copy(in, out); + out.close(); + } + + @SuppressWarnings("serial") + public static final class FileArchiveFailedException extends + RuntimeException { + + public FileArchiveFailedException(File archive, File directory, + Exception cause) { + super("Failed to archive dir " + directory + " to " + archive, cause); + } + + } + + + @SuppressWarnings("serial") + public static final class FileUnarchiveFailedException extends + RuntimeException { + + public FileUnarchiveFailedException(File archive, File directory, + Exception cause) { + super("Failed to unarchive " + archive + " to dir " + directory, cause); + } + + } + +}
Modified: trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java (1329 => 1330)
--- trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java 2009-10-13 11:54:46 UTC (rev 1329) +++ trunk/web/web-io/src/test/java/org/jbehave/web/io/ZipFileArchiverTest.java 2009-10-13 22:24:03 UTC (rev 1330) @@ -14,19 +14,26 @@ public class ZipFileArchiverTest { private File dir; + private FileArchiver archiver = new ZipFileArchiver(); @Before public void setup() throws IOException { - dir = File.createTempFile("dir", ""); - dir.delete(); + dir = new File("/tmp", "dir"); + } + + @Test + public void canArchiveZip() throws IOException { + File zip = new File("target", "dir1.zip"); dir.mkdir(); + archiver.archive(zip , dir); } @Test public void canUnarchiveZip() throws IOException { - FileArchiver archiver = new ZipFileArchiver(); File zip = resourceFile("dir1.zip"); assertTrue(archiver.isArchive(zip)); + dir.delete(); + dir.mkdir(); archiver.unarchive(zip, dir); assertFilesUnarchived(asList("dir1", "dir1/file1.txt", "dir1/subdir1", "dir1/subdir1/subfile1.txt")); @@ -34,16 +41,16 @@ @Test public void canListFileContentOfUnarchiveZip() throws IOException { - FileArchiver archiver = new ZipFileArchiver(); File zip = resourceFile("dir1.zip"); assertTrue(archiver.isArchive(zip)); - archiver.unarchive(zip, dir); + archiver.unarchive(zip, dir); List<File> content = archiver.listContent(new File(dir, "dir1")); - assertFilesEquals(content, asList("dir1", "dir1/file1.txt", "dir1/subdir1", - "dir1/subdir1/subfile1.txt")); + assertFilesEquals(content, asList("dir1", "dir1/file1.txt", + "dir1/subdir1", "dir1/subdir1/subfile1.txt")); } - private void assertFilesEquals(List<File> content, List<String> expectedPaths) { + private void assertFilesEquals(List<File> content, + List<String> expectedPaths) { for (int i = 0; i < content.size(); i++) { File file = content.get(i); assertEquals(file, new File(dir, expectedPaths.get(i)));
To unsubscribe from this list please visit:
