Class AsiExtraField

  • All Implemented Interfaces:
    java.lang.Cloneable, ZipExtraField

    public class AsiExtraField
    extends java.lang.Object
    implements ZipExtraField, java.lang.Cloneable
    This is a class that has been made significantly smaller (deleted a bunch of methods) and originally is from the Apache Ant Project (http://ant.apache.org), org.apache.tools.zip package. All license and other documentation is intact. 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 
      Modifier and Type Field Description
      private java.util.zip.CRC32 crc
      Instance used to calculate checksums.
      (package private) int DEFAULT_DIR_PERM
      Default permissions for directories.
      (package private) int DEFAULT_FILE_PERM
      Default permissions for plain files.
      (package private) int DEFAULT_LINK_PERM
      Default permissions for symbolic links.
      (package private) int DIR_FLAG
      Indicates directories.
      private boolean dirFlag
      Is this an entry for a directory?
      (package private) int FILE_FLAG
      Indicates plain files.
      private int gid
      Group ID.
      private static ZipShort HEADER_ID  
      private java.lang.String link
      File this entry points to, if it is a symbolic link.
      (package private) int LINK_FLAG
      Indicates symbolic links.
      private int mode
      Standard Unix stat(2) file mode.
      (package private) int PERM_MASK
      Bits used for permissions (and sticky bit)
      private int uid
      User ID.
      private static int WORD  
    • Constructor Summary

      Constructors 
      Constructor Description
      AsiExtraField()
      Constructor for AsiExtraField.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method 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 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
    • Field Detail

      • PERM_MASK

        final int PERM_MASK
        Bits used for permissions (and sticky bit)
        Since:
        1.1
        See Also:
        Constant Field Values
      • DEFAULT_LINK_PERM

        final int DEFAULT_LINK_PERM
        Default permissions for symbolic links.
        Since:
        1.1
        See Also:
        Constant Field Values
      • DEFAULT_DIR_PERM

        final int DEFAULT_DIR_PERM
        Default permissions for directories.
        Since:
        1.1
        See Also:
        Constant Field Values
      • DEFAULT_FILE_PERM

        final int DEFAULT_FILE_PERM
        Default permissions for plain files.
        Since:
        1.1
        See Also:
        Constant Field Values
      • HEADER_ID

        private static final ZipShort HEADER_ID
      • mode

        private int mode
        Standard Unix stat(2) file mode.
        Since:
        1.1
      • uid

        private int uid
        User ID.
        Since:
        1.1
      • gid

        private int gid
        Group ID.
        Since:
        1.1
      • link

        private java.lang.String link
        File this entry points to, if it is a symbolic link.

        empty string - if entry is not a symbolic link.

        Since:
        1.1
      • dirFlag

        private boolean dirFlag
        Is this an entry for a directory?
        Since:
        1.1
      • crc

        private java.util.zip.CRC32 crc
        Instance used to calculate checksums.
        Since:
        1.1
    • 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