Author: bodewig Date: Wed Mar 4 05:07:25 2009 New Revision: 749906 URL: http://svn.apache.org/viewvc?rev=749906&view=rev Log: Turn Unicode extra field handling into an enum since there are more than two options. SANDBOX-176
Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java?rev=749906&r1=749905&r2=749906&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java Wed Mar 4 05:07:25 2009 @@ -231,7 +231,8 @@ /** * whether to create UnicodePathExtraField-s for each entry. */ - private boolean createUnicodeExtraFields = false; + private UnicodeExtraFieldPolicy createUnicodeExtraFields = + UnicodeExtraFieldPolicy.NEVER; /** * Creates a new ZIP OutputStream filtering the underlying stream. @@ -314,11 +315,11 @@ } /** - * Whether to create Unicode Extra Fields for all entries. + * Whether to create Unicode Extra Fields. * - * <p>Defaults to false.</p> + * <p>Defaults to NEVER.</p> */ - public void setCreateUnicodeExtraFields(boolean b) { + public void setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy b) { createUnicodeExtraFields = b; } @@ -615,28 +616,30 @@ boolean encodable = this.zipEncoding.canEncode(ze.getName()); ByteBuffer name = this.zipEncoding.encode(ze.getName()); - if (createUnicodeExtraFields) { + if (createUnicodeExtraFields != UnicodeExtraFieldPolicy.NEVER) { - /* if (!encodable) { -- FIXME decide what to*/ + if (createUnicodeExtraFields == UnicodeExtraFieldPolicy.ALWAYS + || !encodable) { ze.addExtraField(new UnicodePathExtraField(ze.getName(), name.array(), name.arrayOffset(), name.limit())); - /* } */ + } String comm = ze.getComment(); if (comm != null && !"".equals(comm)) { boolean commentEncodable = this.zipEncoding.canEncode(comm); - /* if (!commentEncodable) { -- FIXME decide what to*/ + if (createUnicodeExtraFields == UnicodeExtraFieldPolicy.ALWAYS + || !commentEncodable) { ByteBuffer commentB = this.zipEncoding.encode(comm); ze.addExtraField(new UnicodeCommentExtraField(comm, commentB.array(), commentB.arrayOffset(), commentB.limit()) ); - /* } */ + } } } @@ -930,4 +933,35 @@ // general purpose bit flag writeOut(ZipShort.getBytes(generalPurposeFlag)); } + + /** + * enum that represents the possible policies for creating Unicode + * extra fields. + */ + public static final class UnicodeExtraFieldPolicy { + /** + * Always create Unicode extra fields. + */ + public static final UnicodeExtraFieldPolicy ALWAYS = + new UnicodeExtraFieldPolicy("always"); + /** + * Never create Unicode extra fields. + */ + public static final UnicodeExtraFieldPolicy NEVER = + new UnicodeExtraFieldPolicy("never"); + /** + * Create Unicode extra fields for filenames that cannot be + * encoded using the specified encoding. + */ + public static final UnicodeExtraFieldPolicy NOT_ENCODABLE = + new UnicodeExtraFieldPolicy("not encodable"); + + private final String name; + private UnicodeExtraFieldPolicy(String n) { + name = n; + } + public String toString() { + return name; + } + } } Modified: commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java?rev=749906&r1=749905&r2=749906&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java (original) +++ commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java Wed Mar 4 05:07:25 2009 @@ -161,7 +161,11 @@ zos = new ZipArchiveOutputStream(file); zos.setEncoding(encoding); zos.setUseLanguageEncodingFlag(withEFS); - zos.setCreateUnicodeExtraFields(!withExplicitUnicodeExtra); + zos.setCreateUnicodeExtraFields(withExplicitUnicodeExtra ? + ZipArchiveOutputStream + .UnicodeExtraFieldPolicy.NEVER + : ZipArchiveOutputStream + .UnicodeExtraFieldPolicy.ALWAYS); ZipArchiveEntry ze = new ZipArchiveEntry(OIL_BARREL_TXT); if (withExplicitUnicodeExtra