org.dspace.app.xmlui.cocoon
Class BitstreamReader

java.lang.Object
  extended by org.apache.cocoon.util.AbstractLogEnabled
      extended by org.apache.cocoon.reading.AbstractReader
          extended by org.dspace.app.xmlui.cocoon.BitstreamReader
All Implemented Interfaces:
org.apache.avalon.excalibur.pool.Poolable, org.apache.avalon.excalibur.pool.Recyclable, org.apache.cocoon.reading.Reader, org.apache.cocoon.sitemap.SitemapModelComponent, org.apache.cocoon.sitemap.SitemapOutputComponent

public class BitstreamReader
extends org.apache.cocoon.reading.AbstractReader
implements org.apache.avalon.excalibur.pool.Recyclable

The BitstreamReader will query DSpace for a particular bitstream and transmit it to the user. There are several method of specifing the bitstream to be develivered. You may refrence a bitstream by either it's id or attempt to resolve the bitstream's name. /bitstream/{handle}/{sequence}/{name} <map:read type="BitstreamReader"> <map:parameter name="handle" value="{1}/{2}"/> <map:parameter name="sequence" value="{3}"/> <map:parameter name="name" value="{4}"/> </map:read> When no handle is assigned yet you can access a bistream using it's internal ID. /bitstream/id/{bitstreamID}/{sequence}/{name} <map:read type="BitstreamReader"> <map:parameter name="bitstreamID" value="{1}"/> <map:parameter name="sequence" value="{2}"/> </map:read> Alternativly, you can access the bitstream via a name instead of directly through it's sequence. /html/{handle}/{name} <map:read type="BitstreamReader"> <map:parameter name="handle" value="{1}/{2}"/> <map:parameter name="name" value="{3}"/> </map:read> Again when no handle is available you can also access it via an internal itemID & name. /html/id/{itemID}/{name} <map:read type="BitstreamReader"> <map:parameter name="itemID" value="{1}"/> <map:parameter name="name" value="{2}"/> </map:read>

Author:
Scott Phillips

Field Summary
protected  InputStream bitstreamInputStream
          The bitstream file
protected  String bitstreamMimeType
          The bitstream's mime-type
protected  String bitstreamName
          The bitstream's name
protected  long bitstreamSize
          The bitstream's reported size
protected static int BUFFER_SIZE
          How big of a buffer should we use when reading from the bitstream before writting to the HTTP response?
protected static int expires
          When should a bitstream expire in milliseconds.
protected  boolean isAnonymouslyReadable
          True if bitstream is readable by anonymous users
protected  org.apache.cocoon.environment.Request request
          The Cocoon request
protected  org.apache.cocoon.environment.Response response
          The Cocoon response
 
Fields inherited from class org.apache.cocoon.reading.AbstractReader
objectModel, out, parameters, resolver, source
 
Fields inherited from interface org.apache.cocoon.reading.Reader
ROLE
 
Constructor Summary
BitstreamReader()
           
 
Method Summary
 void generate()
          Write the actual data out to the response.
 String getMimeType()
          Returns the mime-type of the bitstream.
 void recycle()
          Recycle
 void setup(org.apache.cocoon.environment.SourceResolver resolver, Map objectModel, String src, org.apache.avalon.framework.parameters.Parameters par)
          Set up the bitstream reader.
 
Methods inherited from class org.apache.cocoon.reading.AbstractReader
getLastModified, setOutputStream, shouldSetContentLength
 
Methods inherited from class org.apache.cocoon.util.AbstractLogEnabled
getLogger, setLogger
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BUFFER_SIZE

protected static final int BUFFER_SIZE
How big of a buffer should we use when reading from the bitstream before writting to the HTTP response?

See Also:
Constant Field Values

expires

protected static final int expires
When should a bitstream expire in milliseconds. This should be set to some low value just to prevent someone hiting DSpace repeatily from killing the server. Note: 1000 milliseconds are in a second. Format: minutes * seconds * milliseconds 60 * 60 * 1000 == 1 hour

See Also:
Constant Field Values

response

protected org.apache.cocoon.environment.Response response
The Cocoon response


request

protected org.apache.cocoon.environment.Request request
The Cocoon request


bitstreamInputStream

protected InputStream bitstreamInputStream
The bitstream file


bitstreamSize

protected long bitstreamSize
The bitstream's reported size


bitstreamMimeType

protected String bitstreamMimeType
The bitstream's mime-type


bitstreamName

protected String bitstreamName
The bitstream's name


isAnonymouslyReadable

protected boolean isAnonymouslyReadable
True if bitstream is readable by anonymous users

Constructor Detail

BitstreamReader

public BitstreamReader()
Method Detail

setup

public void setup(org.apache.cocoon.environment.SourceResolver resolver,
                  Map objectModel,
                  String src,
                  org.apache.avalon.framework.parameters.Parameters par)
           throws org.apache.cocoon.ProcessingException,
                  SAXException,
                  IOException
Set up the bitstream reader. See the class description for information on configuration options.

Specified by:
setup in interface org.apache.cocoon.sitemap.SitemapModelComponent
Overrides:
setup in class org.apache.cocoon.reading.AbstractReader
Throws:
org.apache.cocoon.ProcessingException
SAXException
IOException

generate

public void generate()
              throws IOException,
                     SAXException,
                     org.apache.cocoon.ProcessingException
Write the actual data out to the response. Some implementation notes, 1) We set a short expires time just in the hopes of preventing someone from overloading the server by clicking reload a bunch of times. I realize that this is nowhere near 100% effective but it may help in some cases and shouldn't hurt anything. 2) We accept partial downloads, thus if you lose a connection half way through most web browser will enable you to resume downloading the bitstream.

Specified by:
generate in interface org.apache.cocoon.reading.Reader
Throws:
IOException
SAXException
org.apache.cocoon.ProcessingException

getMimeType

public String getMimeType()
Returns the mime-type of the bitstream.

Specified by:
getMimeType in interface org.apache.cocoon.sitemap.SitemapOutputComponent
Overrides:
getMimeType in class org.apache.cocoon.reading.AbstractReader

recycle

public void recycle()
Recycle

Specified by:
recycle in interface org.apache.avalon.excalibur.pool.Recyclable
Overrides:
recycle in class org.apache.cocoon.reading.AbstractReader


Copyright © 2011 DuraSpace. All Rights Reserved.