haul        2004/02/15 12:33:20

  Modified:    
src/blocks/scratchpad/java/org/apache/cocoon/components/source/impl
                        CachingSource.java
  Log:
  add some javadocs
  move reading of source to extra methods
  
  Revision  Changes    Path
  1.3       +77 -39    
cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/source/impl/CachingSource.java
  
  Index: CachingSource.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/source/impl/CachingSource.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CachingSource.java        25 Oct 2003 18:06:19 -0000      1.2
  +++ CachingSource.java        15 Feb 2004 20:33:19 -0000      1.3
  @@ -75,6 +75,7 @@
   import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceException;
  +import org.apache.excalibur.source.SourceNotFoundException;
   import org.apache.excalibur.source.SourceResolver;
   import org.apache.excalibur.source.SourceValidity;
   import org.apache.excalibur.source.impl.validity.ExpiresValidity;
  @@ -89,6 +90,19 @@
    * to get the content. This implementation can cache the content for
    * a given period of time
    * 
  + * <h2>Syntax for Protocol</h2>
  + * <p>
  + * The URL needs to contain the URL of the cached source, an expiration
  + * period in second, and optionally a cache key: <code>cached://[EMAIL 
PROTECTED]://www.s-und-n.de</code>
  + * or <code>cached://[EMAIL PROTECTED]@http://www.s-und-n.de</code> 
  + * </p>
  + * <p>
  + * The above examples show how the real source 
<code>http://www.s-und-n.de</code>
  + * is wrapped and the cached contents is used for <code>60</code> seconds.
  + * The second example extends the cache key with the string <code>main</code>
  + * allowing multiple cache entries for the same source.
  + * </p>
  + * 
    * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
    * @version CVS $Id$
    */
  @@ -360,49 +374,17 @@
           
           if ( this.cachedResponse == null
                && (!alternative || !(this.source instanceof XMLizable)) ) {
  -            // resd the content
  -            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  -            final byte[] buffer = new byte[2048];
  -            final InputStream inputStream = this.source.getInputStream();
  -            int length;
  -        
  -            while ((length = inputStream.read(buffer)) > -1) {
  -                baos.write(buffer, 0, length);
  -            }
  -            baos.flush();
  -            inputStream.close();
  -            this.cachedResponse = new ExtendedCachedResponse(new 
ExpiresValidity(this.expires), 
  -                                                             
baos.toByteArray());                                                            
  +            
  +                     this.cachedResponse = new ExtendedCachedResponse(
  +                                     new ExpiresValidity(this.expires), 
this.readBinaryResponse());
               storeResponse = true;                                            
                 
           } else if ( this.cachedResponse == null ) {
  -            this.cachedResponse = new ExtendedCachedResponse(new 
ExpiresValidity(this.expires), 
  -                                                             null);          
                                                  
  +            this.cachedResponse = new ExtendedCachedResponse(new 
ExpiresValidity(this.expires), null);                                           
                 
           }
           
           // we cache both
           if ( alternative && this.cachedResponse.getAlternativeResponse() == 
null ) {
  -            XMLSerializer serializer = null;
  -            SAXParser parser = null;
  -            try {
  -                serializer = 
(XMLSerializer)this.manager.lookup(XMLSerializer.ROLE);
  -                if (this.source instanceof XMLizable) {
  -                    ((XMLizable)this.source).toSAX(serializer);
  -                } else {
  -                    parser = (SAXParser)this.manager.lookup(SAXParser.ROLE);
  -                    
  -                    final InputSource inputSource = new InputSource(new 
ByteArrayInputStream(this.cachedResponse.getResponse()));
  -                    inputSource.setSystemId(this.source.getURI());
  -                    
  -                    parser.parse(inputSource, serializer);
  -                }
  -                
  -                
this.cachedResponse.setAlternativeResponse((byte[])serializer.getSAXFragment());
  -            } catch (ServiceException se) {
  -                throw new CascadingIOException("Unable to lookup xml 
serializer.", se);
  -            } finally {
  -                this.manager.release(parser);
  -                this.manager.release(serializer);
  -            }
  +            
this.cachedResponse.setAlternativeResponse(this.readXMLResponse());
               storeResponse = true;
           }
           
  @@ -415,7 +397,63 @@
           }
       }
       
  -    /* (non-Javadoc)
  +    /**
  +     * Read XML content from source.
  +     * 
  +      * @return content from source
  +      * @throws SAXException
  +      * @throws IOException
  +      * @throws CascadingIOException
  +      */
  +     private byte[] readXMLResponse() throws SAXException, IOException, 
CascadingIOException {
  +             XMLSerializer serializer = null;
  +             SAXParser parser = null;
  +        byte[] result = null;
  +             try {
  +                 serializer = 
(XMLSerializer)this.manager.lookup(XMLSerializer.ROLE);
  +                 if (this.source instanceof XMLizable) {
  +                     ((XMLizable)this.source).toSAX(serializer);
  +                 } else {
  +                     parser = (SAXParser)this.manager.lookup(SAXParser.ROLE);
  +                     
  +                     final InputSource inputSource = new InputSource(new 
ByteArrayInputStream(this.cachedResponse.getResponse()));
  +                     inputSource.setSystemId(this.source.getURI());
  +                     
  +                     parser.parse(inputSource, serializer);
  +                 }
  +                 
  +                 result = (byte[])serializer.getSAXFragment();
  +             } catch (ServiceException se) {
  +                 throw new CascadingIOException("Unable to lookup xml 
serializer.", se);
  +             } finally {
  +                 this.manager.release(parser);
  +                 this.manager.release(serializer);
  +             }
  +             return result;
  +     }
  +
  +     /**
  +     * Read binary content from source.
  +     * 
  +      * @return content from source
  +      * @throws IOException
  +      * @throws SourceNotFoundException
  +      */
  +     private byte[] readBinaryResponse() throws IOException, 
SourceNotFoundException {
  +             final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  +             final byte[] buffer = new byte[2048];
  +             final InputStream inputStream = this.source.getInputStream();
  +             int length;
  +      
  +             while ((length = inputStream.read(buffer)) > -1) {
  +                 baos.write(buffer, 0, length);
  +             }
  +             baos.flush();
  +             inputStream.close();
  +             return baos.toByteArray();
  +     }
  +
  +     /* (non-Javadoc)
        * @see org.apache.avalon.framework.activity.Disposable#dispose()
        */
       public void dispose() {
  
  
  

Reply via email to