org.apache.commons.compress.archivers.zip

## Class AsiExtraField

- java.lang.Object
- - org.apache.commons.compress.archivers.zip.AsiExtraField

- All Implemented Interfaces:
    Cloneable, UnixStat, ZipExtraField

      public class AsiExtraField
      extends Object
      implements ZipExtraField, UnixStat, 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 file name

  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.

  This class is not thread-safe

    Since the documentation this class is based upon doesn't mention the character encoding of the file name at all, it is assumed that it uses the current platform's default encoding.

- - ### Field Summary

    - ### Fields inherited from interface org.apache.commons.compress.archivers.zip.ZipExtraField

      `EXTRAFIELD_HEADER_SIZE`

    - ### Fields inherited from interface org.apache.commons.compress.archivers.zip.UnixStat

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

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `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.
    `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(String name)` Indicate that this entry is a symbolic link to the given file name.
    `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

    - #### clone

          public Object clone()

      Overrides:
        `clone` in class `Object`

    - #### getCentralDirectoryData

          public byte[] getCentralDirectoryData()

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

    - #### getCentralDirectoryLength

          public ZipShort getCentralDirectoryLength()

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

    - #### getGroupId

          public int getGroupId()

      Get the group id.
      Returns:
        the group id

    - #### getHeaderId

          public ZipShort getHeaderId()

      The Header-ID.
      Specified by:
        `getHeaderId` in interface `ZipExtraField`
      Returns:
        the value for the header id for this extrafield

    - #### getLinkedFile

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

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

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

    - #### getMode

          public int getMode()

      File mode of this file.
      Returns:
        the file mode

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

    - #### getUserId

          public int getUserId()

      Get the user id.
      Returns:
        the user id

    - #### isDirectory

          public boolean isDirectory()

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

    - #### isLink

          public boolean isLink()

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

    - #### parseFromCentralDirectoryData

          public void parseFromCentralDirectoryData(byte[] buffer,
                                                    int offset,
                                                    int length)
                                             throws 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:
        `ZipException` - on error

    - #### parseFromLocalFileData

          public void parseFromLocalFileData(byte[] data,
                                             int offset,
                                             int length)
                                      throws 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:
        `ZipException` - on error

    - #### setDirectory

          public void setDirectory(boolean dirFlag)

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

    - #### setGroupId

          public void setGroupId(int gid)

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

    - #### setLinkedFile

          public void setLinkedFile(String name)

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

    - #### setMode

          public void setMode(int mode)

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

    - #### setUserId

          public void setUserId(int uid)

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

Copyright © 2002–2022 The Apache Software Foundation. All rights reserved.