AsiExtraField
Date: 2017-02-08

org.apache.commons.compress.archivers.zip

## Class AsiExtraField

- java.lang.Object
- - org.apache.commons.compress.archivers.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.commons.compress.archivers.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
    Modifier and Type | Method and Description
    --- | ---
    `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` | `parseFromCentralDirectoryData(byte[] buffer, int offset, int length)` Doesn't do anything special since this class always uses the same data in central directory and local file data.
    `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

    - #### 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

    - #### getCentralDirectoryLength

          public ZipShort getCentralDirectoryLength()

      Delegate to local file data.
      Specified by:
        `getCentralDirectoryLength` in interface `ZipExtraField`
      Returns:
        the centralDirectory length

    - #### 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

    - #### getCentralDirectoryData

          public byte[] getCentralDirectoryData()

      Delegate to local file data.
      Specified by:
        `getCentralDirectoryData` in interface `ZipExtraField`
      Returns:
        the local file data

    - #### setUserId

          public void setUserId(int uid)

      Set the user id.
      Parameters:
        `uid` - the user id

    - #### getUserId

          public int getUserId()

      Get the user id.
      Returns:
        the user id

    - #### setGroupId

          public void setGroupId(int gid)

      Set the group id.
      Parameters:
        `gid` - the group id

    - #### getGroupId

          public int getGroupId()

      Get the group id.
      Returns:
        the group id

    - #### 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.

    - #### 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.

    - #### isLink

          public boolean isLink()

      Is this entry a symbolic link?
      Returns:
        true if this is a symbolic link

    - #### setMode

          public void setMode(int mode)

      File mode of this file.
      Parameters:
        `mode` - the file mode

    - #### getMode

          public int getMode()

      File mode of this file.
      Returns:
        the file mode

    - #### setDirectory

          public void setDirectory(boolean dirFlag)

      Indicate whether this entry is a directory.
      Parameters:
        `dirFlag` - if true, this entry is a directory

    - #### isDirectory

          public boolean isDirectory()

      Is this entry a directory?
      Returns:
        true if this entry is a directory

    - #### 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

    - #### parseFromCentralDirectoryData

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

      Doesn't do anything special since this class always uses the same data in central directory and local file data.
      Specified by:
        `parseFromCentralDirectoryData` in interface `ZipExtraField`
      Parameters:
        `buffer` - the buffer to read data from
        `offset` - offset into buffer to read data
        `length` - the length of data
      Throws:
        `java.util.zip.ZipException` - on error

    - #### 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

    - #### clone

          public java.lang.Object clone()

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