ikrs.httpd.resource
Class ResourceDelegation

java.lang.Object
  extended by ikrs.httpd.resource.AbstractResource
      extended by ikrs.httpd.resource.ResourceDelegation
All Implemented Interfaces:
Resource
Direct Known Subclasses:
RangedResource

public abstract class ResourceDelegation
extends AbstractResource

The ResourceDelegation is an abstract wrapper class that holds an internal Resource instance. All methods are implemented and just redirect the calls to the internal delegated core instance. This class is meant to be extended and some desired method(s) to be overriden to slightly change its behavior. Example: the RangedResource class overrides the open(...) method and skips some bytes at the beginning.


Constructor Summary
ResourceDelegation(Resource resource, HTTPHandler handler, CustomLogger logger)
           
 
Method Summary
 boolean close()
          Closes this resource.
protected  Resource getCoreResource()
           
 HypertextAccessFile getHypertextAccessFile()
          Get the resource's hypertext access file settings.
 java.io.InputStream getInputStream()
          Get the input stream from this resource.
 long getLength()
          This method returns the *actual* length of the underlying resource.
 ResourceMetaData getMetaData()
          Get the meta data for this resource.
 java.io.OutputStream getOutputStream()
          Get the output stream to this resource.
 java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock getReadLock()
          This method returns the read lock for this resource.
 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock getWriteLock()
          This method returns the write lock for this resource.
 boolean isOpen()
          This method determines if this resource was alerady opened or not.
 boolean isReadOnly()
          This method returns true if the underlying resource is read-only (in general).
 void open(boolean readOnly)
          This method opens the underlying resource.
 
Methods inherited from class ikrs.httpd.resource.AbstractResource
getHTTPHandler, getLogger, setHypertextAccessFile
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ResourceDelegation

public ResourceDelegation(Resource resource,
                          HTTPHandler handler,
                          CustomLogger logger)
Method Detail

getCoreResource

protected Resource getCoreResource()

getMetaData

public ResourceMetaData getMetaData()
Get the meta data for this resource.

Specified by:
getMetaData in interface Resource
Overrides:
getMetaData in class AbstractResource

getHypertextAccessFile

public HypertextAccessFile getHypertextAccessFile()
Get the resource's hypertext access file settings. If the resource has no hypertext access settings available the method may return null.

Specified by:
getHypertextAccessFile in interface Resource
Overrides:
getHypertextAccessFile in class AbstractResource

getReadLock

public java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock getReadLock()
This method returns the read lock for this resource.

Specified by:
getReadLock in interface Resource
Overrides:
getReadLock in class AbstractResource

getWriteLock

public java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock getWriteLock()
This method returns the write lock for this resource.

Specified by:
getWriteLock in interface Resource
Overrides:
getWriteLock in class AbstractResource

open

public void open(boolean readOnly)
          throws java.io.IOException
This method opens the underlying resource. Don't forget to close.

Specified by:
open in interface Resource
Specified by:
open in class AbstractResource
Parameters:
readOnly - if set to true, the resource will be opned in read-only mode.
Throws:
ReadOnlyException - If the underlying resource is read-only in general.
java.io.IOException - If any other IO error occurs.
See Also:
isReadOnly()

isOpen

public boolean isOpen()
               throws java.io.IOException
This method determines if this resource was alerady opened or not.

Specified by:
isOpen in interface Resource
Specified by:
isOpen in class AbstractResource
Throws:
java.io.IOException - If any IO error occurs.

isReadOnly

public boolean isReadOnly()
                   throws java.io.IOException
This method returns true if the underlying resource is read-only (in general).

Specified by:
isReadOnly in interface Resource
Specified by:
isReadOnly in class AbstractResource
Throws:
java.io.IOException - If any IO error occurs.

getLength

public long getLength()
               throws java.io.IOException
This method returns the *actual* length of the underlying resource. This length will be used in the HTTP header fields to specify the transaction length. During read-process (you used the locks, didn't you?) the length MUST NOT change.

Specified by:
getLength in interface Resource
Specified by:
getLength in class AbstractResource
Returns:
the length of the resource's data in bytes.
Throws:
java.io.IOException - If any IO error occurs.

getOutputStream

public java.io.OutputStream getOutputStream()
                                     throws ReadOnlyException,
                                            java.io.IOException
Get the output stream to this resource.

Specified by:
getOutputStream in interface Resource
Specified by:
getOutputStream in class AbstractResource
Throws:
ReadOnlyException - If this resource was opened with the read-only flag set.
java.io.IOException - If any other IO error occurs.

getInputStream

public java.io.InputStream getInputStream()
                                   throws java.io.IOException
Get the input stream from this resource.

Specified by:
getInputStream in interface Resource
Specified by:
getInputStream in class AbstractResource
Throws:
java.io.IOException - If any IO error occurs.

close

public boolean close()
              throws java.io.IOException
Closes this resource.

Specified by:
close in interface Resource
Specified by:
close in class AbstractResource
Returns:
false if the resource was already closed, false otherwise.
Throws:
java.io.IOException