Author: bodewig Date: Mon Jul 25 13:28:31 2011 New Revision: 1150694 URL: http://svn.apache.org/viewvc?rev=1150694&view=rev Log: Java5ify ZipArchiveInputStream implementation and related classes
Added: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipConstants.java (with props) Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEightByteInteger.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java Mon Jul 25 13:28:31 2011 @@ -35,10 +35,10 @@ public class ExtraFieldUtils { /** * Static registry of known extra fields. */ - private static final Map implementations; + private static final Map<ZipShort, Class<?>> implementations; static { - implementations = new HashMap(); + implementations = new HashMap<ZipShort, Class<?>>(); register(AsiExtraField.class); register(JarMarker.class); register(UnicodePathExtraField.class); @@ -53,7 +53,7 @@ public class ExtraFieldUtils { * the {@link ZipExtraField ZipExtraField interface}.</p> * @param c the class to register */ - public static void register(Class c) { + public static void register(Class<?> c) { try { ZipExtraField ze = (ZipExtraField) c.newInstance(); implementations.put(ze.getHeaderId(), c); @@ -76,7 +76,7 @@ public class ExtraFieldUtils { */ public static ZipExtraField createExtraField(ZipShort headerId) throws InstantiationException, IllegalAccessException { - Class c = (Class) implementations.get(headerId); + Class<?> c = implementations.get(headerId); if (c != null) { return (ZipExtraField) c.newInstance(); } @@ -127,7 +127,7 @@ public class ExtraFieldUtils { public static ZipExtraField[] parse(byte[] data, boolean local, UnparseableExtraField onUnparseableData) throws ZipException { - List v = new ArrayList(); + List<ZipExtraField> v = new ArrayList<ZipExtraField>(); int start = 0; LOOP: while (start <= data.length - WORD) { @@ -182,7 +182,7 @@ public class ExtraFieldUtils { } ZipExtraField[] result = new ZipExtraField[v.size()]; - return (ZipExtraField[]) v.toArray(result); + return v.toArray(result); } /** Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java Mon Jul 25 13:28:31 2011 @@ -149,6 +149,7 @@ public final class GeneralPurposeBit { return b; } + @Override public int hashCode() { return 3 * (7 * (13 * (17 * (encryptionFlag ? 1 : 0) + (strongEncryptionFlag ? 1 : 0)) @@ -156,6 +157,7 @@ public final class GeneralPurposeBit { + (dataDescriptorFlag ? 1 : 0)); } + @Override public boolean equals(Object o) { if (!(o instanceof GeneralPurposeBit)) { return false; Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java Mon Jul 25 13:28:31 2011 @@ -82,7 +82,7 @@ class Simple8BitZipEncoding implements Z * field. This list is used to binary search reverse mapping of * unicode characters with a character code greater than 127. */ - private final List reverseMapping; + private final List<Simple8BitChar> reverseMapping; /** * @param highChars The characters for byte values of 128 to 255 @@ -90,7 +90,7 @@ class Simple8BitZipEncoding implements Z */ public Simple8BitZipEncoding(char[] highChars) { this.highChars = (char[]) highChars.clone(); - List temp = new ArrayList(this.highChars.length); + List temp = new ArrayList<Simple8BitChar>(this.highChars.length); byte code = 127; @@ -172,7 +172,7 @@ class Simple8BitZipEncoding implements Z int i = i0 + (i1 - i0) / 2; - Simple8BitChar m = (Simple8BitChar) this.reverseMapping.get(i); + Simple8BitChar m = this.reverseMapping.get(i); if (m.unicode == c) { return m; @@ -189,7 +189,7 @@ class Simple8BitZipEncoding implements Z return null; } - Simple8BitChar r = (Simple8BitChar) this.reverseMapping.get(i0); + Simple8BitChar r = this.reverseMapping.get(i0); if (r.unicode != c) { return null; Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java Mon Jul 25 13:28:31 2011 @@ -79,7 +79,7 @@ public class ZipArchiveEntry extends jav private int internalAttributes = 0; private int platform = PLATFORM_FAT; private long externalAttributes = 0; - private LinkedHashMap/*<ZipShort, ZipExtraField>*/ extraFields = null; + private LinkedHashMap<ZipShort, ZipExtraField> extraFields = null; private UnparseableExtraFieldData unparseableExtra = null; private String name = null; private byte[] rawName = null; @@ -168,6 +168,7 @@ public class ZipArchiveEntry extends jav * Overwrite clone. * @return a cloned copy of this ZipArchiveEntry */ + @Override public Object clone() { ZipArchiveEntry e = (ZipArchiveEntry) super.clone(); @@ -286,7 +287,7 @@ public class ZipArchiveEntry extends jav * @param fields an array of extra fields */ public void setExtraFields(ZipExtraField[] fields) { - extraFields = new LinkedHashMap(); + extraFields = new LinkedHashMap<ZipShort, ZipExtraField>(); for (int i = 0; i < fields.length; i++) { if (fields[i] instanceof UnparseableExtraFieldData) { unparseableExtra = (UnparseableExtraFieldData) fields[i]; @@ -320,11 +321,12 @@ public class ZipArchiveEntry extends jav ? new ZipExtraField[0] : new ZipExtraField[] { unparseableExtra }; } - List result = new ArrayList(extraFields.values()); + List<ZipExtraField> result = + new ArrayList<ZipExtraField>(extraFields.values()); if (includeUnparseable && unparseableExtra != null) { result.add(unparseableExtra); } - return (ZipExtraField[]) result.toArray(new ZipExtraField[0]); + return result.toArray(new ZipExtraField[0]); } /** @@ -340,7 +342,7 @@ public class ZipArchiveEntry extends jav unparseableExtra = (UnparseableExtraFieldData) ze; } else { if (extraFields == null) { - extraFields = new LinkedHashMap(); + extraFields = new LinkedHashMap<ZipShort, ZipExtraField>(); } extraFields.put(ze.getHeaderId(), ze); } @@ -359,7 +361,7 @@ public class ZipArchiveEntry extends jav unparseableExtra = (UnparseableExtraFieldData) ze; } else { LinkedHashMap copy = extraFields; - extraFields = new LinkedHashMap(); + extraFields = new LinkedHashMap<ZipShort, ZipExtraField>(); extraFields.put(ze.getHeaderId(), ze); if (copy != null) { copy.remove(ze.getHeaderId()); @@ -403,7 +405,7 @@ public class ZipArchiveEntry extends jav */ public ZipExtraField getExtraField(ZipShort type) { if (extraFields != null) { - return (ZipExtraField) extraFields.get(type); + return extraFields.get(type); } return null; } @@ -427,6 +429,7 @@ public class ZipArchiveEntry extends jav * @throws RuntimeException if the bytes cannot be parsed * @throws RuntimeException on error */ + @Override public void setExtra(byte[] extra) throws RuntimeException { try { ZipExtraField[] local = @@ -434,7 +437,7 @@ public class ZipArchiveEntry extends jav ExtraFieldUtils.UnparseableExtraField.READ); mergeExtraFields(local, true); } catch (ZipException e) { - // actually this is not be possible as of Commons Compress 1.1 + // actually this is not possible as of Commons Compress 1.1 throw new RuntimeException("Error parsing extra fields for entry: " + getName() + " - " + e.getMessage(), e); } @@ -485,6 +488,7 @@ public class ZipArchiveEntry extends jav * Get the name of the entry. * @return the entry name */ + @Override public String getName() { return name == null ? super.getName() : name; } @@ -509,6 +513,7 @@ public class ZipArchiveEntry extends jav * Gets the uncompressed size of the entry data. * @return the entry size */ + @Override public long getSize() { return size; } @@ -519,6 +524,7 @@ public class ZipArchiveEntry extends jav * @exception IllegalArgumentException if the specified size is less * than 0 */ + @Override public void setSize(long size) { if (size < 0) { throw new IllegalArgumentException("invalid entry size"); @@ -559,6 +565,7 @@ public class ZipArchiveEntry extends jav * This uses the name as the hashcode. * @return a hashcode. */ + @Override public int hashCode() { // this method has severe consequences on performance. We cannot rely // on the super.hashCode() method since super.getName() always return @@ -627,6 +634,7 @@ public class ZipArchiveEntry extends jav /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ + @Override public boolean equals(Object obj) { if (this == obj) { return true; Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Mon Jul 25 13:28:31 2011 @@ -32,6 +32,9 @@ import java.util.zip.ZipException; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.ArchiveInputStream; +import static org.apache.commons.compress.archivers.zip.ZipConstants.SHORT; +import static org.apache.commons.compress.archivers.zip.ZipConstants.WORD; + /** * Implements an input stream that can read Zip archives. * <p> @@ -45,9 +48,6 @@ import org.apache.commons.compress.archi */ public class ZipArchiveInputStream extends ArchiveInputStream { - private static final int SHORT = 2; - private static final int WORD = 4; - /** * The zip encoding to use for filenames and the file comment. */ @@ -208,6 +208,7 @@ public class ZipArchiveInputStream exten } /** {@inheritDoc} */ + @Override public ArchiveEntry getNextEntry() throws IOException { return getNextZipEntry(); } @@ -219,6 +220,7 @@ public class ZipArchiveInputStream exten * compression method that hasn't been implemented yet.</p> * @since Apache Commons Compress 1.1 */ + @Override public boolean canReadEntryData(ArchiveEntry ae) { if (ae instanceof ZipArchiveEntry) { ZipArchiveEntry ze = (ZipArchiveEntry) ae; @@ -229,6 +231,7 @@ public class ZipArchiveInputStream exten return false; } + @Override public int read(byte[] buffer, int start, int length) throws IOException { if (closed) { throw new IOException("The stream is closed"); @@ -307,6 +310,7 @@ public class ZipArchiveInputStream exten throw new ArrayIndexOutOfBoundsException(); } + @Override public void close() throws IOException { if (!closed) { closed = true; @@ -329,6 +333,7 @@ public class ZipArchiveInputStream exten * @throws IOException - if an I/O error occurs. * @throws IllegalArgumentException - if value is negative. */ + @Override public long skip(long value) throws IOException { if (value >= 0) { long skipped = 0; Added: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipConstants.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipConstants.java?rev=1150694&view=auto ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipConstants.java (added) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipConstants.java Mon Jul 25 13:28:31 2011 @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.commons.compress.archivers.zip; + +/** + * Various constants used throughout the package. + * + * @since Apache Commons Compress 1.3 + */ +final class ZipConstants { + private ZipConstants() { } + + /** Masks last eight bits */ + static final int BYTE_MASK = 0xFF; + + /** length of a ZipShort in bytes */ + static final int SHORT = 2; + + /** length of a ZipLong in bytes */ + static final int WORD = 4; +} Propchange: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipConstants.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEightByteInteger.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEightByteInteger.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEightByteInteger.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEightByteInteger.java Mon Jul 25 13:28:31 2011 @@ -19,6 +19,8 @@ package org.apache.commons.compress.arch import java.math.BigInteger; +import static org.apache.commons.compress.archivers.zip.ZipConstants.BYTE_MASK; + /** * Utility class that represents an eight byte integer with conversion * rules for the big endian byte order of ZIP files. @@ -28,8 +30,6 @@ import java.math.BigInteger; */ public final class ZipEightByteInteger { - private static final int BYTE_MASK = 0xFF; - private static final int BYTE_1 = 1; private static final int BYTE_1_MASK = 0xFF00; private static final int BYTE_1_SHIFT = 8; @@ -206,6 +206,7 @@ public final class ZipEightByteInteger { * @param o an object to compare * @return true if the objects are equal */ + @Override public boolean equals(Object o) { if (o == null || !(o instanceof ZipEightByteInteger)) { return false; @@ -217,10 +218,12 @@ public final class ZipEightByteInteger { * Override to make two instances with same value equal. * @return the hashCode of the value stored in the ZipEightByteInteger */ + @Override public int hashCode() { return value.hashCode(); } + @Override public String toString() { return "ZipEightByteInteger value: " + value; } Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java Mon Jul 25 13:28:31 2011 @@ -62,10 +62,10 @@ abstract class ZipEncodingHelper { } } - private static final Map simpleEncodings; + private static final Map<String, SimpleEncodingHolder> simpleEncodings; static { - simpleEncodings = new HashMap(); + simpleEncodings = new HashMap<String, SimpleEncodingHolder>(); char[] cp437_high_chars = new char[] { 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, @@ -218,8 +218,7 @@ abstract class ZipEncodingHelper { return new FallbackZipEncoding(); } - SimpleEncodingHolder h = - (SimpleEncodingHolder) simpleEncodings.get(name); + SimpleEncodingHolder h = simpleEncodings.get(name); if (h!=null) { return h.getEncoding(); Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java Mon Jul 25 13:28:31 2011 @@ -17,6 +17,9 @@ */ package org.apache.commons.compress.archivers.zip; +import static org.apache.commons.compress.archivers.zip.ZipConstants.BYTE_MASK; +import static org.apache.commons.compress.archivers.zip.ZipConstants.WORD; + /** * Utility class that represents a four byte integer with conversion * rules for the big endian byte order of ZIP files. @@ -24,9 +27,7 @@ package org.apache.commons.compress.arch */ public final class ZipLong implements Cloneable { - private static final int WORD = 4; //private static final int BYTE_BIT_SIZE = 8; - private static final int BYTE_MASK = 0xFF; private static final int BYTE_1 = 1; private static final int BYTE_1_MASK = 0xFF00; @@ -137,6 +138,7 @@ public final class ZipLong implements Cl * @param o an object to compare * @return true if the objects are equal */ + @Override public boolean equals(Object o) { if (o == null || !(o instanceof ZipLong)) { return false; @@ -148,10 +150,12 @@ public final class ZipLong implements Cl * Override to make two instances with same value equal. * @return the value stored in the ZipLong */ + @Override public int hashCode() { return (int) value; } + @Override public Object clone() { try { return super.clone(); @@ -161,6 +165,7 @@ public final class ZipLong implements Cl } } + @Override public String toString() { return "ZipLong value: " + value; } Modified: commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java?rev=1150694&r1=1150693&r2=1150694&view=diff ============================================================================== --- commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java (original) +++ commons/proper/compress/branches/zip64/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java Mon Jul 25 13:28:31 2011 @@ -17,13 +17,14 @@ */ package org.apache.commons.compress.archivers.zip; +import static org.apache.commons.compress.archivers.zip.ZipConstants.BYTE_MASK; + /** * Utility class that represents a two byte integer with conversion * rules for the big endian byte order of ZIP files. * @Immutable */ public final class ZipShort implements Cloneable { - private static final int BYTE_MASK = 0xFF; private static final int BYTE_1_MASK = 0xFF00; private static final int BYTE_1_SHIFT = 8; @@ -111,6 +112,7 @@ public final class ZipShort implements C * @param o an object to compare * @return true if the objects are equal */ + @Override public boolean equals(Object o) { if (o == null || !(o instanceof ZipShort)) { return false; @@ -122,10 +124,12 @@ public final class ZipShort implements C * Override to make two instances with same value equal. * @return the value stored in the ZipShort */ + @Override public int hashCode() { return value; } + @Override public Object clone() { try { return super.clone(); @@ -135,6 +139,7 @@ public final class ZipShort implements C } } + @Override public String toString() { return "ZipShort value: " + value; }