Browse Source

allow extra fields to be added at the front

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@745537 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 16 years ago
parent
commit
9416f208d9
2 changed files with 62 additions and 0 deletions
  1. +22
    -0
      src/main/org/apache/tools/zip/ZipEntry.java
  2. +40
    -0
      src/tests/junit/org/apache/tools/zip/ZipEntryTest.java

+ 22
- 0
src/main/org/apache/tools/zip/ZipEntry.java View File

@@ -215,6 +215,9 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
/**
* Adds an extra fields - replacing an already present extra field
* of the same type.
*
* <p>If no extra field of the same type exists, the field will be
* added as last field.</p>
* @param ze an extra field
* @since 1.1
*/
@@ -226,6 +229,25 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable {
setExtra();
}

/**
* Adds an extra fields - replacing an already present extra field
* of the same type.
*
* <p>The new extra field will be the first one.</p>
* @param ze an extra field
* @since 1.1
*/
public void addAsFirstExtraField(ZipExtraField ze) {
LinkedHashMap copy = extraFields;
extraFields = new LinkedHashMap();
extraFields.put(ze.getHeaderId(), ze);
if (copy != null) {
copy.remove(ze.getHeaderId());
extraFields.putAll(copy);
}
setExtra();
}

/**
* Remove an extra fields.
* @param type the type of extra field to remove


+ 40
- 0
src/tests/junit/org/apache/tools/zip/ZipEntryTest.java View File

@@ -85,6 +85,46 @@ public class ZipEntryTest extends TestCase {
}
}

/**
* test handling of extra fields
*
* @since 1.1
*/
public void testAddAsFirstExtraField() {
AsiExtraField a = new AsiExtraField();
a.setDirectory(true);
a.setMode(0755);
UnrecognizedExtraField u = new UnrecognizedExtraField();
u.setHeaderId(new ZipShort(1));
u.setLocalFileDataData(new byte[0]);

ZipEntry ze = new ZipEntry("test/");
ze.setExtraFields(new ZipExtraField[] {a, u});
byte[] data1 = ze.getExtra();

UnrecognizedExtraField u2 = new UnrecognizedExtraField();
u2.setHeaderId(new ZipShort(1));
u2.setLocalFileDataData(new byte[] {1});

ze.addAsFirstExtraField(u2);
byte[] data2 = ze.getExtra();
ZipExtraField[] result = ze.getExtraFields();
assertEquals("second pass", 2, result.length);
assertSame(u2, result[0]);
assertSame(a, result[1]);
assertEquals("length second pass", data1.length + 1, data2.length);

UnrecognizedExtraField u3 = new UnrecognizedExtraField();
u3.setHeaderId(new ZipShort(2));
u3.setLocalFileDataData(new byte[] {1});
ze.addAsFirstExtraField(u3);
result = ze.getExtraFields();
assertEquals("third pass", 3, result.length);
assertSame(u3, result[0]);
assertSame(u2, result[1]);
assertSame(a, result[2]);
}

public void testUnixMode() {
ZipEntry ze = new ZipEntry("foo");
assertEquals(0, ze.getPlatform());


Loading…
Cancel
Save