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

    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.

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