org.apache.tools.zip

## Class AsiExtraField

- java.lang.Object
- - org.apache.tools.zip.AsiExtraField

All Implemented Interfaces:
  java.lang.Cloneable, UnixStat, ZipExtraField

    public class AsiExtraField
    extends java.lang.Object
    implements ZipExtraField, UnixStat, java.lang.Cloneable

Adds Unix file permission and UID/GID fields as well as symbolic link handling.

This class uses the ASi extra field in the format:

             Value         Size            Description
             -----         ----            -----------
     (Unix3) 0x756e        Short           tag for this extra block type
             TSize         Short           total data size for this block
             CRC           Long            CRC-32 of the remaining data
             Mode          Short           file permissions
             SizDev        Long            symlink'd size OR major/minor dev num
             UID           Short           user ID
             GID           Short           group ID
             (var.)        variable        symbolic link filename

taken from appnote.iz (Info-ZIP note, 981119) found at ftp://ftp.uu.net/pub/archiving/zip/doc/

Short is two bytes and Long is four bytes in big endian byte and word order, device numbers are currently not supported.

### Field Summary

### Fields inherited from interface org.apache.tools.zip.UnixStat

`DEFAULT_DIR_PERM, DEFAULT_FILE_PERM, DEFAULT_LINK_PERM, DIR_FLAG, FILE_FLAG, LINK_FLAG, PERM_MASK`

### Constructor Summary

Constructors
Constructor and Description
`AsiExtraField()` Constructor for AsiExtraField.

### Method Summary

Methods
`java.lang.Object` `clone()`
`byte[]` `getCentralDirectoryData()` Delegate to local file data.
`ZipShort` `getCentralDirectoryLength()` Delegate to local file data.
`int` `getGroupId()` Get the group id.
`ZipShort` `getHeaderId()` The Header-ID.
`java.lang.String` `getLinkedFile()` Name of linked file
`byte[]` `getLocalFileDataData()` The actual data to put into local file data - without Header-ID or length specifier.
`ZipShort` `getLocalFileDataLength()` Length of the extra field in the local file data - without Header-ID or length specifier.
`int` `getMode()` File mode of this file.
`protected int` `getMode(int mode)` Get the file mode for given permissions with the correct file type.
`int` `getUserId()` Get the user id.
`boolean` `isDirectory()` Is this entry a directory?
`boolean` `isLink()` Is this entry a symbolic link?
`void` `parseFromLocalFileData(byte[] data, int offset, int length)` Populate data from this array as if it was in local file data.
`void` `setDirectory(boolean dirFlag)` Indicate whether this entry is a directory.
`void` `setGroupId(int gid)` Set the group id.
`void` `setLinkedFile(java.lang.String name)` Indicate that this entry is a symbolic link to the given filename.
`void` `setMode(int mode)` File mode of this file.
`void` `setUserId(int uid)` Set the user id.

### Methods inherited from class java.lang.Object

`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### AsiExtraField

    public AsiExtraField()

Constructor for AsiExtraField.

### Method Detail

#### getHeaderId

    public ZipShort getHeaderId()

The Header-ID.

Specified by:
  `getHeaderId` in interface `ZipExtraField`
Returns:
  the value for the header id for this extrafield
Since:
  1.1

#### getLocalFileDataLength

    public ZipShort getLocalFileDataLength()

Length of the extra field in the local file data - without Header-ID or length specifier.

Specified by:
  `getLocalFileDataLength` in interface `ZipExtraField`
Returns:
  a `ZipShort` for the length of the data of this extra field
Since:
  1.1

#### getCentralDirectoryLength

    public ZipShort getCentralDirectoryLength()

Delegate to local file data.

Specified by:
  `getCentralDirectoryLength` in interface `ZipExtraField`
Returns:
  the centralDirectory length
Since:
  1.1

#### getLocalFileDataData

    public byte[] getLocalFileDataData()

The actual data to put into local file data - without Header-ID or length specifier.

Specified by:
  `getLocalFileDataData` in interface `ZipExtraField`
Returns:
  get the data
Since:
  1.1

#### getCentralDirectoryData

    public byte[] getCentralDirectoryData()

Delegate to local file data.

Specified by:
  `getCentralDirectoryData` in interface `ZipExtraField`
Returns:
  the local file data
Since:
  1.1

#### setUserId

    public void setUserId(int uid)

Set the user id.

Parameters:
  `uid` - the user id
Since:
  1.1

#### getUserId

    public int getUserId()

Get the user id.

Returns:
  the user id
Since:
  1.1

#### setGroupId

    public void setGroupId(int gid)

Set the group id.

Parameters:
  `gid` - the group id
Since:
  1.1

#### getGroupId

    public int getGroupId()

Get the group id.

Returns:
  the group id
Since:
  1.1

#### setLinkedFile

    public void setLinkedFile(java.lang.String name)

Indicate that this entry is a symbolic link to the given filename.

Parameters:
  `name` - Name of the file this entry links to, empty String if it is not a symbolic link.
Since:
  1.1

#### getLinkedFile

    public java.lang.String getLinkedFile()

Name of linked file

Returns:
  name of the file this entry links to if it is a symbolic link, the empty string otherwise.
Since:
  1.1

#### isLink

    public boolean isLink()

Is this entry a symbolic link?

Returns:
  true if this is a symbolic link
Since:
  1.1

#### setMode

    public void setMode(int mode)

File mode of this file.

Parameters:
  `mode` - the file mode
Since:
  1.1

#### getMode

    public int getMode()

File mode of this file.

Returns:
  the file mode
Since:
  1.1

#### setDirectory

    public void setDirectory(boolean dirFlag)

Indicate whether this entry is a directory.

Parameters:
  `dirFlag` - if true, this entry is a directory
Since:
  1.1

#### isDirectory

    public boolean isDirectory()

Is this entry a directory?

Returns:
  true if this entry is a directory
Since:
  1.1

#### parseFromLocalFileData

    public void parseFromLocalFileData(byte[] data,
                              int offset,
                              int length)
                                throws java.util.zip.ZipException

Populate data from this array as if it was in local file data.

Specified by:
  `parseFromLocalFileData` in interface `ZipExtraField`
Parameters:
  `data` - an array of bytes
  `offset` - the start offset
  `length` - the number of bytes in the array from offset
Throws:
  `java.util.zip.ZipException` - on error
Since:
  1.1

#### getMode

    protected int getMode(int mode)

Get the file mode for given permissions with the correct file type.

Parameters:
  `mode` - the mode
Returns:
  the type with the mode
Since:
  1.1

#### clone

    public java.lang.Object clone()

Overrides:
  `clone` in class `java.lang.Object`