You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2004/02/04 13:22:47 UTC

cvs commit: cocoon-2.2/src/java/org/apache/cocoon/reading ResourceReader.java

cziegeler    2004/02/04 04:22:47

  Modified:    src/java/org/apache/cocoon/reading ResourceReader.java
  Log:
     <action dev="CZ" type="update">
       ResourceReader: Is now configurable as well. All parameters can be defined during configuration
       of the reader. Fixed also a minor bug in the last-modified detection.
     </action>
  
  Revision  Changes    Path
  1.6       +37 -10    cocoon-2.2/src/java/org/apache/cocoon/reading/ResourceReader.java
  
  Index: ResourceReader.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/reading/ResourceReader.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ResourceReader.java	27 Dec 2003 15:11:57 -0000	1.5
  +++ ResourceReader.java	4 Feb 2004 12:22:47 -0000	1.6
  @@ -50,6 +50,8 @@
   */
   package org.apache.cocoon.reading;
   
  +import org.apache.avalon.framework.parameters.ParameterException;
  +import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.util.ByteRange;
  @@ -96,6 +98,7 @@
    *
    * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
    * @author <a href="mailto:tcurdt@apache.org">Torsten Curdt</a>
  + * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
    * @version CVS $Id$
    * 
    * @avalon.component
  @@ -103,7 +106,9 @@
    * @x-avalon.lifestyle type=pooled
    * @x-avalon.info name=resource-reader
    */
  -public class ResourceReader extends AbstractReader implements CacheableProcessingComponent {
  +public class ResourceReader 
  +extends AbstractReader 
  +implements CacheableProcessingComponent, Parameterizable {
   
       /** The list of generated documents */
       private static final Map documents = new HashMap();
  @@ -119,6 +124,21 @@
       protected long expires;
       protected int bufferSize;
   
  +    protected long configuredExpires;
  +    protected boolean configuredQuickTest;
  +    protected int configuredBufferSize;
  +    protected boolean configuredByteRanges;
  +    
  +    /* (non-Javadoc)
  +     * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
  +     */
  +    public void parameterize(Parameters parameters) throws ParameterException {
  +        this.configuredExpires = parameters.getParameterAsLong("expires", -1);
  +        this.configuredQuickTest = parameters.getParameterAsBoolean("quick-modified-test", false);
  +        this.configuredBufferSize = parameters.getParameterAsInteger("buffer-size", 8192);
  +        this.configuredByteRanges = parameters.getParameterAsBoolean("byte-ranges", true);
  +    }
  +
       /**
        * Setup the reader.
        * The resource is opened to get an <code>InputStream</code>,
  @@ -130,11 +150,11 @@
           request = ObjectModelHelper.getRequest(objectModel);
           response = ObjectModelHelper.getResponse(objectModel);
   
  -        expires = par.getParameterAsInteger("expires", -1);
  -        bufferSize = par.getParameterAsInteger("buffer-size",8192);
  +        expires = par.getParameterAsLong("expires", this.configuredExpires);
  +        bufferSize = par.getParameterAsInteger("buffer-size", this.configuredBufferSize);
   
  -        byteRanges = par.getParameterAsBoolean("byte-ranges",true);
  -        quickTest = par.getParameterAsBoolean("quick-modified-test", false);
  +        byteRanges = par.getParameterAsBoolean("byte-ranges", this.configuredByteRanges);
  +        quickTest = par.getParameterAsBoolean("quick-modified-test", this.configuredQuickTest);
   
           try {
               inputSource = resolver.resolveURI(src);
  @@ -184,7 +204,7 @@
               return inputSource.getLastModified();
           }
           final String systemId = (String) documents.get(request.getRequestURI());
  -        if (inputSource.getURI().equals(systemId)) {
  +        if (systemId == null || inputSource.getURI().equals(systemId)) {
               return inputSource.getLastModified();
           }
           else {
  @@ -294,9 +314,16 @@
                   throw SourceUtil.handle("Error during resolving of the input stream", se);
               }
   
  -            processStream();
  -
  -            inputStream.close();
  +            // Bugzilla Bug 25069, close inputStream in finally block
  +            // this will close inputStream even if processStream throws
  +            // an exception
  +            try {
  +                processStream();
  +            } finally {
  +                if (inputStream != null) {
  +                    inputStream.close();
  +                }
  +            }
   
               if (!quickTest) {
                   // if everything is ok, add this to the list of generated documents