Author: sebb Date: Tue Mar 31 00:35:56 2009 New Revision: 760276 URL: http://svn.apache.org/viewvc?rev=760276&view=rev Log: Add generic methods for creating Archive Entries. This helps with testing, and will make it easier to implement put(File) later
Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveOutputStream.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveOutputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveOutputStream.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveOutputStream.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveOutputStream.java Tue Mar 31 00:35:56 2009 @@ -18,6 +18,7 @@ */ package org.apache.commons.compress.archivers; +import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -55,6 +56,17 @@ */ public abstract void closeArchiveEntry() throws IOException; + /** + * Create an archive entry using the inputFile and entryName provided. + * + * @param inputFile + * @param entryName + * @return the ArchiveEntry set up with details from the file + * + * @throws IOException + */ + public abstract ArchiveEntry createArchiveEntry(File inputFile, String entryName) throws IOException; + // Generic implementations of OutputStream methods that may be useful to sub-classes /** Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java Tue Mar 31 00:35:56 2009 @@ -18,6 +18,8 @@ */ package org.apache.commons.compress.archivers.ar; +import java.io.File; + import org.apache.commons.compress.archivers.ArchiveEntry; /** @@ -54,7 +56,12 @@ this.lastModified = lastModified; } - public long getSize() { + public ArArchiveEntry(File inputFile, String entryName) { + // TODO sort out mode + this(entryName, inputFile.length(), 0, 0, 0, inputFile.lastModified()); + } + + public long getSize() { return this.getLength(); } Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java Tue Mar 31 00:35:56 2009 @@ -18,6 +18,7 @@ */ package org.apache.commons.compress.archivers.ar; +import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -99,7 +100,7 @@ final String n = pEntry.getName(); if (n.length() > 16) { - throw new IOException("filename too long"); + throw new IOException("filename too long, > 16 chars: "+n); } offset += write(n); @@ -156,4 +157,9 @@ prevEntry = null; } + public ArchiveEntry createArchiveEntry(File inputFile, String entryName) + throws IOException { + return new ArArchiveEntry(inputFile, entryName); + } + } Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java Tue Mar 31 00:35:56 2009 @@ -18,6 +18,8 @@ */ package org.apache.commons.compress.archivers.cpio; +import java.io.File; + import org.apache.commons.compress.archivers.ArchiveEntry; /** @@ -249,6 +251,20 @@ this.setSize(size); } + public CpioArchiveEntry(File inputFile, String entryName) { + this(entryName, inputFile.length()); + long mode=0; + if (inputFile.isDirectory()){ + mode |= C_ISDIR; + } else if (inputFile.isFile()){ + mode |= C_ISREG; + } else { + throw new IllegalArgumentException("Cannot determine type of file "+inputFile.getName()); + } + // TODO set other fields as needed + setMode(mode); + } + /** * Check if the method is allowed for the defined format. */ Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java Tue Mar 31 00:35:56 2009 @@ -18,6 +18,7 @@ */ package org.apache.commons.compress.archivers.cpio; +import java.io.File; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -379,4 +380,9 @@ out.write('\0'); } + public ArchiveEntry createArchiveEntry(File inputFile, String entryName) + throws IOException { + return new CpioArchiveEntry(inputFile, entryName); + } + } Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java Tue Mar 31 00:35:56 2009 @@ -193,15 +193,26 @@ /** * Construct an entry for a file. File is set to file, and the * header is constructed from information from the file. + * The name is set from the normalized file path. * * @param file The file that the entry represents. */ public TarArchiveEntry(File file) { + this(file, normalizeFileName(file.getPath())); + } + + /** + * Construct an entry for a file. File is set to file, and the + * header is constructed from information from the file. + * + * @param file The file that the entry represents. + * @param fileName the name to be used for the entry. + */ + public TarArchiveEntry(File file, String fileName) { this(); this.file = file; - String fileName = normalizeFileName(file.getPath()); this.linkName = new StringBuffer(""); this.name = new StringBuffer(fileName); Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java Tue Mar 31 00:35:56 2009 @@ -18,6 +18,7 @@ */ package org.apache.commons.compress.archivers.tar; +import java.io.File; import java.io.IOException; import java.io.OutputStream; import org.apache.commons.compress.archivers.ArchiveEntry; @@ -336,4 +337,9 @@ return "tar"; } + public ArchiveEntry createArchiveEntry(File inputFile, String entryName) + throws IOException { + return new TarArchiveEntry(inputFile, entryName); + } + } Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java Tue Mar 31 00:35:56 2009 @@ -17,6 +17,7 @@ */ package org.apache.commons.compress.archivers.zip; +import java.io.File; import java.util.LinkedHashMap; import java.util.zip.ZipException; import org.apache.commons.compress.archivers.ArchiveEntry; @@ -84,6 +85,11 @@ super(""); } + public ZipArchiveEntry(File inputFile, String entryName) { + this(entryName); + // TODO are there any other fields we can set here? + } + /** * Overwrite clone. * @return a cloned copy of this ZipArchiveEntry Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java?rev=760276&r1=760275&r2=760276&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java Tue Mar 31 00:35:56 2009 @@ -910,4 +910,9 @@ return name; } } + + public ArchiveEntry createArchiveEntry(File inputFile, String entryName) + throws IOException { + return new ZipArchiveEntry(inputFile, entryName); + } }