org.apache.commons.compress.archivers.zip
Class AsiExtraField

java.lang.Object
  extended by 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 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.

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.UnixStat
DEFAULT_DIR_PERM, DEFAULT_FILE_PERM, DEFAULT_LINK_PERM, DIR_FLAG, FILE_FLAG, LINK_FLAG, PERM_MASK
 
Constructor Summary
AsiExtraField()
          Constructor for AsiExtraField.
 
Method Summary
 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 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(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 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 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

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

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


Copyright © 2010 The Apache Software Foundation. All Rights Reserved.