RELEASE NOTES DRAFT 7: + ArchiveFactory Interface has changed + Factory can identify archives by heade RELEASE NOTES DRAFT 6: + use of parameter overloading is back + divided between Decompressor and Comressor - compressor does not accept filenames as string arguments - deleted AbstractCompressor.createTempFile + created CompressUtils + Moved copy of AbstractCompressor into CompressUtils + Added new methods for decompressing/compressing + changed FileInputStream return methods to InputStream + refactored the archiver interface + Archive to Stream + Exceptions use initCause(Throwable) for exception chaining + one can add InputStreams now instead of files now * TODO: This list bases on comments from the user/development list which has NOT beeing implemented yet but should be checked for implementaton or should be implemented. ** BASED ON DRAFT 6: * handle file overwriting f.e. - Archiver.setOverwriteFilter(TrueFileFilter.INSTANCE) - Compresser.setOverwrite(true); * Recursivley add directories * For both of ArchiveType and CompressorType add a valueOf(String) method. This is what Java 1.5 Enums have and it lets you convert a String, say from a config file, into an Enum. To do this right you'll need to keep track of other Types with a Map or something in the constructor. * TestCases are out of date * New Feature: delete from archives * if an archive is set with the setArchive or the getInstance(File) method the archives fileentrys must be added to the internal entrylist for possible manipulation * Merge Plexus Code, if there is something which is good for compress * Propose new name? The maingoal is not to compress, imho * refactor and review tar, zip and bzip2 implementations * rebuild javadoc * check out how compress could fit in VFS best * Check wether TAR works on solaris or not. "Background: The original tar format supports a maximum path size of 99 characters. If you use Solaris tar, you will not see a problem, because Solaris tar extends this format beyond 99 characters but in a Solaris-only way. GNU tar has a different way of extending the format, so is incompatible with the Solaris tar. WinZip and Cygnus GNU tar 1.11.8 do not support the Solaris way. We recommended that you use Solaris tar to extract the archive, or use the jar tool or WinZip to extract the zip version." http://java.sun.com/products/archive/j2se/1.2.2_017/install-docs.html ** BASED ON DRAFT 5: * ZipInputStream/TarInputStream: skimming it I don't it. It looks like it's taking the InputStream concept and corrupting it with the notion of many separate streams for each file in one stream. This is confusing because it doesn't fit the expectations of an InputStream. IMO it should be it's something similar to an Iterator that takes a raw InputStream and provides a way to get at metadata sequentially from the raw InputStream. From the meta data you should be able to get an InputStream which is just for that file in the archive. * ZipOutputStream/TarOutputStream: Same problem as TarInputStream but with an OutputStream. Because TarOutputStream subclasses OutputStream it makes write methods available. But using these methods are dangerous because if you write a different number of bytes than what was passed when putNextEntry(TarEntry) was called you corrupt the archive. A good API doesn't let the programmer make mistakes. I'd change this to be it's own object type that accepts TarEntrys with all the needed to add a file in one step that either succeeds or fails. * ZipLong, ZipShort: these are both public, and I don't see why they need to be. They are only used inside the package with the exception of 3 places ZipShort is used as a parameter type in a public method. I don't see why those ZipShorts cannot be converted to shorts for the public API and both of them made package private.