## 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
`AsiExtraField()` Constructor for AsiExtraField.

Method Summary
`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
`clone, 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