@@ -18,7 +18,7 @@
package org.apache.tools.zip;
import java.util.Vector ;
import java.util.LinkedHashMap ;
import java.util.zip.ZipException;
/**
@@ -36,7 +36,7 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
private int internalAttributes = 0;
private int platform = PLATFORM_FAT;
private long externalAttributes = 0;
private Vector/*< ZipExtraField>*/ extraFields = null;
private LinkedHashMap/*<ZipShort, ZipExtraField>*/ extraFields = null;
private String name = null;
/**
@@ -93,7 +93,7 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
public Object clone() {
ZipEntry e = (ZipEntry) super.clone();
e.extraFields = extraFields != null ? (Vector ) extraFields.clone() : null;
e.extraFields = extraFields != null ? (LinkedHashMap ) extraFields.clone() : null;
e.setInternalAttributes(getInternalAttributes());
e.setExternalAttributes(getExternalAttributes());
e.setExtraFields(getExtraFields());
@@ -192,9 +192,9 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
* @since 1.1
*/
public void setExtraFields(ZipExtraField[] fields) {
extraFields = new Vector ();
extraFields = new LinkedHashMap ();
for (int i = 0; i < fields.length; i++) {
extraFields.addElement( fields[i]);
extraFields.put(fields[i].getHeaderId(), fields[i]);
}
setExtra();
}
@@ -209,8 +209,7 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
return new ZipExtraField[0];
}
ZipExtraField[] result = new ZipExtraField[extraFields.size()];
extraFields.copyInto(result);
return result;
return (ZipExtraField[]) extraFields.values().toArray(result);
}
/**
@@ -221,19 +220,9 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
*/
public void addExtraField(ZipExtraField ze) {
if (extraFields == null) {
extraFields = new Vector();
}
ZipShort type = ze.getHeaderId();
boolean done = false;
for (int i = 0, fieldsSize = extraFields.size(); !done && i < fieldsSize; i++) {
if (((ZipExtraField) extraFields.elementAt(i)).getHeaderId().equals(type)) {
extraFields.setElementAt(ze, i);
done = true;
}
}
if (!done) {
extraFields.addElement(ze);
extraFields = new LinkedHashMap();
}
extraFields.put(ze.getHeaderId(), ze);
setExtra();
}
@@ -244,16 +233,9 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
*/
public void removeExtraField(ZipShort type) {
if (extraFields == null) {
extraFields = new Vector();
}
boolean done = false;
for (int i = 0, fieldsSize = extraFields.size(); !done && i < fieldsSize; i++) {
if (((ZipExtraField) extraFields.elementAt(i)).getHeaderId().equals(type)) {
extraFields.removeElementAt(i);
done = true;
}
throw new java.util.NoSuchElementException();
}
if (!done ) {
if (extraFields.remove(type) == null) {
throw new java.util.NoSuchElementException();
}
setExtra();