Commons Compress 1.5-redhat-1

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

java.lang.Object
  extended by org.apache.commons.compress.archivers.zip.X5455_ExtendedTimestamp
All Implemented Interfaces:
Serializable, Cloneable, ZipExtraField

public class X5455_ExtendedTimestamp
extends Object
implements ZipExtraField, Cloneable, Serializable

An extra field that stores additional file and directory timestamp data for zip entries. Each zip entry can include up to three timestamps (modify, access, create*). The timestamps are stored as 32 bit unsigned integers representing seconds since UNIX epoch (Jan 1st, 1970, UTC). This field improves on zip's default timestamp granularity, since it allows one to store additional timestamps, and, in addition, the timestamps are stored using per-second granularity (zip's default behaviour can only store timestamps to the nearest even second).

Unfortunately, 32 (unsigned) bits can only store dates up to the year 2106, and so this extra field will eventually be obsolete. Enjoy it while it lasts!

We're using the field definition given in Info-Zip's source archive: zip-3.0.tar.gz/proginfo/extrafld.txt

 Value         Size        Description
 -----         ----        -----------
 0x5455        Short       tag for this extra block type ("UT")
 TSize         Short       total data size for this block
 Flags         Byte        info bits
 (ModTime)     Long        time of last modification (UTC/GMT)
 (AcTime)      Long        time of last access (UTC/GMT)
 (CrTime)      Long        time of original creation (UTC/GMT)

 Central-header version:

 Value         Size        Description
 -----         ----        -----------
 0x5455        Short       tag for this extra block type ("UT")
 TSize         Short       total data size for this block
 Flags         Byte        info bits (refers to local header!)
 (ModTime)     Long        time of last modification (UTC/GMT)
 

Since:
1.5
See Also:
Serialized Form

Constructor Summary
X5455_ExtendedTimestamp()
          Constructor for X5455_ExtendedTimestamp.
 
Method Summary
 Object clone()
           
 boolean equals(Object o)
           
 Date getAccessJavaTime()
          Returns the access time as a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry.
 ZipLong getAccessTime()
          Returns the access time (seconds since epoch) of this zip entry as a ZipLong object, or null if no such timestamp exists in the zip entry.
 byte[] getCentralDirectoryData()
          The actual data to put into central directory data - without Header-ID or length specifier.
 ZipShort getCentralDirectoryLength()
          Length of the extra field in the local file data - without Header-ID or length specifier.
 Date getCreateJavaTime()
           Returns the create time as a a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry.
 ZipLong getCreateTime()
           Returns the create time (seconds since epoch) of this zip entry as a ZipLong object, or null if no such timestamp exists in the zip entry.
 byte getFlags()
          Gets flags byte.
 ZipShort getHeaderId()
          The Header-ID.
 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.
 Date getModifyJavaTime()
          Returns the modify time as a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry.
 ZipLong getModifyTime()
          Returns the modify time (seconds since epoch) of this zip entry as a ZipLong object, or null if no such timestamp exists in the zip entry.
 int hashCode()
           
 boolean isBit0_modifyTimePresent()
          Returns whether bit0 of the flags byte is set or not, which should correspond to the presence or absence of a modify timestamp in this particular zip entry.
 boolean isBit1_accessTimePresent()
          Returns whether bit1 of the flags byte is set or not, which should correspond to the presence or absence of a "last access" timestamp in this particular zip entry.
 boolean isBit2_createTimePresent()
          Returns whether bit2 of the flags byte is set or not, which should correspond to the presence or absence of a create timestamp in this particular zip entry.
 void parseFromCentralDirectoryData(byte[] buffer, int offset, int length)
          Doesn't do anything special since this class always uses the same parsing logic for both 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 setAccessJavaTime(Date d)
           Sets the access time as a java.util.Date of this zip entry.
 void setAccessTime(ZipLong l)
           Sets the access time (seconds since epoch) of this zip entry using a ZipLong object
 void setCreateJavaTime(Date d)
           Sets the create time as a java.util.Date of this zip entry.
 void setCreateTime(ZipLong l)
           Sets the create time (seconds since epoch) of this zip entry using a ZipLong object
 void setFlags(byte flags)
          Sets flags byte.
 void setModifyJavaTime(Date d)
           Sets the modify time as a java.util.Date of this zip entry.
 void setModifyTime(ZipLong l)
           Sets the modify time (seconds since epoch) of this zip entry using a ZipLong object.
 String toString()
          Returns a String representation of this class useful for debugging purposes.
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

X5455_ExtendedTimestamp

public X5455_ExtendedTimestamp()
Constructor for X5455_ExtendedTimestamp.

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()
Length of the extra field in the local file data - without Header-ID or length specifier.

For X5455 the central length is often smaller than the local length, because central cannot contain access or create timestamps.

Specified by:
getCentralDirectoryLength in interface ZipExtraField
Returns:
a ZipShort for the length of the data of this extra field

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()
The actual data to put into central directory data - without Header-ID or length specifier.

Specified by:
getCentralDirectoryData in interface ZipExtraField
Returns:
the central directory data

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 parsing logic for both 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

setFlags

public void setFlags(byte flags)
Sets flags byte. The flags byte tells us which of the three datestamp fields are present in the data:
 bit0 - modify time
 bit1 - access time
 bit2 - create time
 
Only first 3 bits of flags are used according to the latest version of the spec (December 2012).

Parameters:
flags - flags byte indicating which of the three datestamp fields are present.

getFlags

public byte getFlags()
Gets flags byte. The flags byte tells us which of the three datestamp fields are present in the data:
 bit0 - modify time
 bit1 - access time
 bit2 - create time
 
Only first 3 bits of flags are used according to the latest version of the spec (December 2012).

Returns:
flags byte indicating which of the three datestamp fields are present.

isBit0_modifyTimePresent

public boolean isBit0_modifyTimePresent()
Returns whether bit0 of the flags byte is set or not, which should correspond to the presence or absence of a modify timestamp in this particular zip entry.

Returns:
true if bit0 of the flags byte is set.

isBit1_accessTimePresent

public boolean isBit1_accessTimePresent()
Returns whether bit1 of the flags byte is set or not, which should correspond to the presence or absence of a "last access" timestamp in this particular zip entry.

Returns:
true if bit1 of the flags byte is set.

isBit2_createTimePresent

public boolean isBit2_createTimePresent()
Returns whether bit2 of the flags byte is set or not, which should correspond to the presence or absence of a create timestamp in this particular zip entry.

Returns:
true if bit2 of the flags byte is set.

getModifyTime

public ZipLong getModifyTime()
Returns the modify time (seconds since epoch) of this zip entry as a ZipLong object, or null if no such timestamp exists in the zip entry.

Returns:
modify time (seconds since epoch) or null.

getAccessTime

public ZipLong getAccessTime()
Returns the access time (seconds since epoch) of this zip entry as a ZipLong object, or null if no such timestamp exists in the zip entry.

Returns:
access time (seconds since epoch) or null.

getCreateTime

public ZipLong getCreateTime()

Returns the create time (seconds since epoch) of this zip entry as a ZipLong object, or null if no such timestamp exists in the zip entry.

Note: modern linux file systems (e.g., ext2) do not appear to store a "create time" value, and so it's usually omitted altogether in the zip extra field. Perhaps other unix systems track this.

Returns:
create time (seconds since epoch) or null.

getModifyJavaTime

public Date getModifyJavaTime()
Returns the modify time as a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry. The milliseconds are always zeroed out, since the underlying data offers only per-second precision.

Returns:
modify time as java.util.Date or null.

getAccessJavaTime

public Date getAccessJavaTime()
Returns the access time as a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry. The milliseconds are always zeroed out, since the underlying data offers only per-second precision.

Returns:
access time as java.util.Date or null.

getCreateJavaTime

public Date getCreateJavaTime()

Returns the create time as a a java.util.Date of this zip entry, or null if no such timestamp exists in the zip entry. The milliseconds are always zeroed out, since the underlying data offers only per-second precision.

Note: modern linux file systems (e.g., ext2) do not appear to store a "create time" value, and so it's usually omitted altogether in the zip extra field. Perhaps other unix systems track this.

Returns:
create time as java.util.Date or null.

setModifyTime

public void setModifyTime(ZipLong l)

Sets the modify time (seconds since epoch) of this zip entry using a ZipLong object.

Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

Parameters:
l - ZipLong of the modify time (seconds per epoch)

setAccessTime

public void setAccessTime(ZipLong l)

Sets the access time (seconds since epoch) of this zip entry using a ZipLong object

Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

Parameters:
l - ZipLong of the access time (seconds per epoch)

setCreateTime

public void setCreateTime(ZipLong l)

Sets the create time (seconds since epoch) of this zip entry using a ZipLong object

Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

Parameters:
l - ZipLong of the create time (seconds per epoch)

setModifyJavaTime

public void setModifyJavaTime(Date d)

Sets the modify time as a java.util.Date of this zip entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).

Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

Parameters:
d - modify time as java.util.Date

setAccessJavaTime

public void setAccessJavaTime(Date d)

Sets the access time as a java.util.Date of this zip entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).

Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

Parameters:
d - access time as java.util.Date

setCreateJavaTime

public void setCreateJavaTime(Date d)

Sets the create time as a java.util.Date of this zip entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).

Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.

Parameters:
d - create time as java.util.Date

toString

public String toString()
Returns a String representation of this class useful for debugging purposes.

Overrides:
toString in class Object
Returns:
A String representation of this class useful for debugging purposes.

clone

public Object clone()
             throws CloneNotSupportedException
Overrides:
clone in class Object
Throws:
CloneNotSupportedException

equals

public boolean equals(Object o)
Overrides:
equals in class Object

hashCode

public int hashCode()
Overrides:
hashCode in class Object

Commons Compress 1.5-redhat-1

Copyright © 2013 JBoss by Red Hat. All Rights Reserved.