org.schmant.task.at4j.bzip2
Class BZip2ReadableFileProxy

java.lang.Object
  extended by org.schmant.task.at4j.bzip2.BZip2ReadableFileProxy
All Implemented Interfaces:
Lockable, ReadLockable, ReadableFile

public class BZip2ReadableFileProxy
extends Object
implements ReadableFile

This proxy bzip2 decodes data read from another WritableFile. It can be used together with the ArgumentInterpreter.

The difference between this object and the BZip2ReadableFile is that this object uses the ArgumentInterpreter for interpreting the proxied file object.

The proxied object is interpreted using InterpretAsReadableFileStrategy.

Since:
0.8
Author:
Karl Gustafsson
See Also:
GZipReadableFileProxy, LzmaReadableFileProxy, BZip2NewWritableFileProxy, BZip2ExistingWritableFileProxy
Task_package:
org.at4j

Constructor Summary
BZip2ReadableFileProxy(Object proxied)
          Create a new bzip2 readable file proxy.
BZip2ReadableFileProxy(Object proxied, boolean readFileHeader)
          Deprecated. 
 
Method Summary
 long getDataSize()
          Get the size of the data in the file.
 EntityLock getReadLock()
          Get the read lock without locking it.
 long getSize()
          Get the size of the file (in bytes).
 boolean isReadLockedByCurrentThread()
          Does the calling thread hold a read lock for this object? A write lock also qualifies as a read lock.
 EntityLock lockForReading()
          Lock object for reading and return the lock.
 ReadableByteChannel openChannelForRead()
          Open a ReadableByteChannel for reading from the file.
 InputStream openForRead()
          Opens the file for reading.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BZip2ReadableFileProxy

public BZip2ReadableFileProxy(Object proxied)
Create a new bzip2 readable file proxy. The proxied file is assumed to start with the bzip2 file header ("BZ").

Parameters:
proxied - The proxied file.

BZip2ReadableFileProxy

@Deprecated
public BZip2ReadableFileProxy(Object proxied,
                                         boolean readFileHeader)
Deprecated. 

Create a new bzip2 readable file proxy.

Parameters:
proxied - The proxied file.
readFileHeader - This property is disabled and must be set to true.
Method Detail

getDataSize

public long getDataSize()
                 throws ReadLockRequiredException,
                        AccessDeniedException
Description copied from interface: ReadableFile
Get the size of the data in the file. For compressed files, this is larger than the value returned by ReadableFile.getSize().

Warning: Calculating the data size of a file has the potential of being really slow, depending on the implementation used. The entire file may have to be read through in order to calculate the size of its data.

Implementation note: If the size of the backing file is not known, the StreamUtil.getSizeOfDataInStream(InputStream, int) method can be used to calculate it.

Specified by:
getDataSize in interface ReadableFile
Returns:
The data size of the file, including the bzip2 file header, if present.
Throws:
ReadLockRequiredException - If the client does not have a read lock for the file.
AccessDeniedException - If the client does not have read access to the file.
See Also:
ReadableFile.getSize()

getSize

public long getSize()
             throws ReadLockRequiredException,
                    AccessDeniedException
Description copied from interface: ReadableFile
Get the size of the file (in bytes). This is the number of bytes that the file occupies where it is stored.

Note: Most, but not all, implementations know their sizes. If an implementation does not know its size beforehand, this method will be slow since it has to calculate the file size when it is called.

Implementation note: If the size of the backing file is not known, the StreamUtil.getSizeOfDataInStream(InputStream, int) method can be used to calculate it.

Specified by:
getSize in interface ReadableFile
Returns:
The size of the file, in bytes.
Throws:
ReadLockRequiredException - If the client does not have a read lock for the file.
AccessDeniedException - If the client does not have read access to the file.
See Also:
ReadableFile.getDataSize()

openChannelForRead

public ReadableByteChannel openChannelForRead()
                                       throws ReadLockRequiredException,
                                              AccessDeniedException
Description copied from interface: ReadableFile
Open a ReadableByteChannel for reading from the file. The semantics of this method is the same as for ReadableFile.openForRead().

Although a read lock on the file is required for the execution thread opening the channel, the channel itself is not protected from access by other threads. It can be protected by wrapping it in a LockAwareReadableByteChannel.

Specified by:
openChannelForRead in interface ReadableFile
Returns:
An open ReadableByteChannel. The channel must be closed by the caller. The channel may be a ScatteringByteChannel, but that is not required.
Throws:
ReadLockRequiredException - If the client does not have a read lock for the file.
AccessDeniedException - If the client does not have read access to the file.
See Also:
ReadableFile.openForRead()

openForRead

public InputStream openForRead()
                        throws ReadLockRequiredException,
                               AccessDeniedException
Description copied from interface: ReadableFile
Opens the file for reading. The caller is responsible for closing the returned stream.

Although a read lock on the file is required for the execution thread opening the stream, the stream itself is not protected from access by other threads. It can be protected by wrapping it in a LockAwareInputStream.

Specified by:
openForRead in interface ReadableFile
Returns:
An InputStream on the file. The stream must be closed by the caller.
Throws:
ReadLockRequiredException - If the client does not have a read lock for the file.
AccessDeniedException - If the client does not have read access to the file.

getReadLock

public EntityLock getReadLock()
Description copied from interface: ReadLockable
Get the read lock without locking it.

This method always returns a lock, even if the object's file system is not locking or if the object is read only.

Specified by:
getReadLock in interface ReadLockable
Returns:
The lockable's read lock. This might be unlocked or locked by someone else.

isReadLockedByCurrentThread

public boolean isReadLockedByCurrentThread()
                                    throws IllegalStateException
Description copied from interface: ReadLockable
Does the calling thread hold a read lock for this object? A write lock also qualifies as a read lock.

Specified by:
isReadLockedByCurrentThread in interface ReadLockable
Returns:
true if the lockable object is read or write locked by the current thread.
Throws:
IllegalStateException - If this is called on a disconnected entity view.

lockForReading

public EntityLock lockForReading()
                          throws LockTimeoutException
Description copied from interface: ReadLockable
Lock object for reading and return the lock. How the lock is acquired is determined by the EntityLockAdapterFactory and LockAcquiringStrategy used. If this is called on an object that somehow is connected to an entity object, that entity's file system's entity lock adapter factory and lock acquiring strategy is used.

A read lock cannot be upgraded to a write lock (just like how Java's ReadWriteLock works).

For more discussions on locks and locking, see Entity and FileSystem.

This method always returns a lock, even if the object's file system is not locking or if the object is read only.

Specified by:
lockForReading in interface ReadLockable
Returns:
A locked read lock.
Throws:
LockTimeoutException - If the lock acquiring timed out. (It is up to the LockAcquiringStrategy to decide if lock acquiring can time out.)