cziegeler    02/05/28 01:55:54

  Modified:    src/java/org/apache/cocoon/components/pipeline/impl
                        CachingProcessingPipeline.java
  Log:
  Finished? caching pipeline (and correct cvs message, too)
  
  Revision  Changes    Path
  1.16      +23 -15    
xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingProcessingPipeline.java
  
  Index: CachingProcessingPipeline.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingProcessingPipeline.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- CachingProcessingPipeline.java    28 May 2002 08:42:12 -0000      1.15
  +++ CachingProcessingPipeline.java    28 May 2002 08:55:54 -0000      1.16
  @@ -92,7 +92,7 @@
    *
    * @since @next-version@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
  - * @version CVS $Id: CachingProcessingPipeline.java,v 1.15 2002/05/28 08:42:12 
cziegeler Exp $
  + * @version CVS $Id: CachingProcessingPipeline.java,v 1.16 2002/05/28 08:55:54 
cziegeler Exp $
    */
   public class CachingProcessingPipeline
   extends AbstractProcessingPipeline
  @@ -113,8 +113,6 @@
       /** The role name of the reader */
       protected String readerRole;
   
  -    /** The index indicating to the first transformer which is not cacheable */
  -    protected int firstNotCacheableTransformerIndex;
       /** The deserializer */
       protected XMLDeserializer xmlDeserializer;
       /** Complete response is cached */
  @@ -122,15 +120,17 @@
       /** The serializer */
       protected XMLSerializer xmlSerializer;
   
  -    /** The cached validity objects */
  -    protected SourceValidity[] cachedValidityObjects;
       /** The cached byte stream */
       protected byte[]           cachedResponse;
  +    /** The index indicating the first transformer getting input from the cache */
  +    protected int firstProcessedTransformerIndex;
   
       /** The key to store the generated response */
       protected PipelineCacheKey   pipelineCacheKey;
       /** The validity objects of the generated response */
       protected SourceValidity[]   pipelineValidityObjects;
  +    /** The index indicating to the first transformer which is not cacheable */
  +    protected int firstNotCacheableTransformerIndex;
   
   
       /**
  @@ -183,7 +183,7 @@
        */
       protected boolean processXMLPipeline(Environment environment)
       throws ProcessingException {
  -        if (this.pipelineCacheKey == null) {
  +        if (this.pipelineCacheKey == null && this.cachedResponse == null) {
               return super.processXMLPipeline( environment );
           } else if (this.cachedResponse != null && this.completeResponseIsCached) {
               try {
  @@ -200,6 +200,8 @@
                       throw new ProcessingException("Failed to execute reader 
pipeline.", se);
                   }
               } catch ( Exception e ) {
  +                if (e instanceof ProcessingException)
  +                    throw (ProcessingException)e;
                   throw new ProcessingException("Error executing reader pipeline.",e);
               }
           } else {
  @@ -235,13 +237,13 @@
                   }
                   if (this.xmlSerializer != null) {
                       if ( this.completeResponseIsCached ) {
  -                        CachedResponse response = new 
CachedResponse(this.cachedValidityObjects,
  +                        CachedResponse response = new 
CachedResponse(this.pipelineValidityObjects,
                                        ((CachingOutputStream)os).getContent());
                           this.cache.store(environment.getObjectModel(),
                                            this.pipelineCacheKey,
                                            response);
                       } else {
  -                        CachedResponse response = new 
CachedResponse(this.cachedValidityObjects,
  +                        CachedResponse response = new 
CachedResponse(this.pipelineValidityObjects,
                                        (byte[])this.xmlSerializer.getSAXFragment());
                           this.cache.store(environment.getObjectModel(),
                                            this.pipelineCacheKey,
  @@ -283,6 +285,7 @@
           boolean[] transformerIsCacheableProcessingComponent = new 
boolean[this.transformers.size()];
   
           this.firstNotCacheableTransformerIndex = 0;
  +        this.firstProcessedTransformerIndex = 0;
           this.completeResponseIsCached = false;
   
           // first step is to generate the key:
  @@ -356,8 +359,10 @@
           // first non cacheable
           if (processingPipelineKey != null) {
               cachedPipelineKey = processingPipelineKey.copy();
  +            this.firstProcessedTransformerIndex = 
this.firstNotCacheableTransformerIndex;
           }
           boolean finished = false;
  +        SourceValidity[] cachedValidityObjects = null;
           while (cachedPipelineKey != null && !finished) {
               finished = true;
               CachedResponse response = this.cache.get( cachedPipelineKey );
  @@ -380,7 +385,7 @@
                               } else {
                                   validity = new 
CacheValidityToSourceValidity(((Cacheable)super.generator).generateValidity());
                               }
  -                        } else if (i <= firstNotCacheableTransformerIndex + 1) {
  +                        } else if (i <= this.firstProcessedTransformerIndex + 1) {
                               // test transformer
                               final Transformer trans =
                                  (Transformer)super.transformers.get(i-1);
  @@ -412,7 +417,7 @@
   
                   if ( responseIsValid ) {
                       // we are valid, ok that's it
  -                    this.cachedValidityObjects = validities;
  +                    cachedValidityObjects = validities;
                   } else {
                       // we are not valid!
                       this.completeResponseIsCached = false;
  @@ -441,6 +446,7 @@
                       // try a shorter key
                       if (i > 0) {
                           cachedPipelineKey.removeLastKey();
  +                        this.firstProcessedTransformerIndex--;
                       } else {
                           cachedPipelineKey = null;
                       }
  @@ -458,7 +464,7 @@
                   if (cachedPipelineKey != null) {
                       start = cachedPipelineKey.size();
                       for(int i=0; i<start;i++) {
  -                        this.pipelineValidityObjects[i] = 
this.cachedValidityObjects[i];
  +                        this.pipelineValidityObjects[i] = cachedValidityObjects[i];
                       }
                   }
                   for(int i=start; i < this.pipelineValidityObjects.length; i++) {
  @@ -498,7 +504,7 @@
        */
       protected void connectPipeline(Environment   environment)
       throws ProcessingException {
  -        if ( this.pipelineCacheKey == null ) {
  +        if ( this.pipelineCacheKey == null && this.cachedResponse == null) {
               super.connectPipeline( environment );
           } else if (this.completeResponseIsCached) {
               // do nothing
  @@ -542,7 +548,7 @@
                       Iterator itt = this.transformers.iterator();
                       while ( itt.hasNext() ) {
                           next = (XMLConsumer) itt.next();
  -                        if (cacheableTransformerCount >= 
this.firstNotCacheableTransformerIndex) {
  +                        if (cacheableTransformerCount >= 
this.firstProcessedTransformerIndex) {
                               this.connect(environment, prev, next);
                               prev = (XMLProducer)next;
                           }
  @@ -697,7 +703,10 @@
        * Otherwise return <code>null</code>
        */
       public SourceValidity[] getValiditiesForEventPipeline() {
  -        // FIXME (CZ) - Implement this
  +        if (!this.completeResponseIsCached
  +            && this.firstNotCacheableTransformerIndex == super.transformers.size()) 
{
  +            return this.pipelineValidityObjects;
  +        }
           return null;
       }
   
  @@ -721,7 +730,6 @@
           this.pipelineCacheKey = null;
           this.pipelineValidityObjects = null;
           this.cachedResponse = null;
  -        this.cachedValidityObjects = null;
       }
   
       /**
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to