Title: [1330] trunk/web/web-io/src/test/java/org/jbehave/web/io: ZipFileArchiver now supports both zipping and unzipping of files.

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:

http://xircles.codehaus.org/manage_email

Reply via email to