Package org.apache.tools.zip

# Class AsiExtraField

java.lang.Object
org.apache.tools.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 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.

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.tools.zip.UnixStat

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

- ## Constructor Summary

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

- ## Method Summary

  Modifier and Type
  Method
  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`
  `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 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 Details

  - ### AsiExtraField

    public AsiExtraField()
    Constructor for AsiExtraField.

- ## Method Details

  - ### 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(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 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 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
    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 Object clone()
    Overrides:
      `clone` in class `Object`