Author: pier
Date: Sat Oct  2 18:06:05 2004
New Revision: 51816

Modified:
   
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
Log:
Fixing SitemapSourceValidity to return (always) the same SourceValidity 
instance to callers, regardeless of resets.

Modified: 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
   (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
   Sat Oct  2 18:06:05 2004
@@ -60,7 +60,7 @@
 implements Source, XMLizable {
 
     /** validities for the internal pipeline */
-    private SourceValidity sourceValidity;
+    private SitemapSourceValidity validity;
 
     /** The system id */
     private final String systemId;
@@ -86,9 +86,6 @@
     /** The redirect <code>Source</code> */
     private Source redirectSource;
 
-    /** Redirect validity */
-    private SourceValidity redirectValidity;
-
     /** The <code>SAXException</code> if unable to get resource */
     private SAXException exception;
 
@@ -208,6 +205,9 @@
             
this.environment.getObjectModel().remove(ObjectModelHelper.PARENT_CONTEXT);
         }
 
+        // create a new validity holder
+        this.validity = new SitemapSourceValidity();
+
         // initialize
         this.init();
     }
@@ -300,10 +300,7 @@
      *  <code>null</code> is returned.
      */
     public SourceValidity getValidity() {
-        if (this.redirectSource != null) {
-            return this.redirectValidity;
-        }
-        return this.sourceValidity;
+        return this.validity;
     }
 
     /**
@@ -343,7 +340,7 @@
                                                         
this.pipelineProcessor);
                 try {
                     this.processingPipeline.prepareInternal(this.environment);
-                    this.sourceValidity = 
this.processingPipeline.getValidityForEventPipeline();
+                    
this.validity.set(this.processingPipeline.getValidityForEventPipeline());
                     this.mimeType = this.environment.getContentType();
 
                     final String eventPipelineKey = 
this.processingPipeline.getKeyForEventPipeline();
@@ -371,7 +368,7 @@
                     this.sourceResolver = (SourceResolver) 
this.manager.lookup(SourceResolver.ROLE);
                 }
                 this.redirectSource = 
this.sourceResolver.resolveURI(redirectURL);
-                this.redirectValidity = this.redirectSource.getValidity();
+                this.validity.set(this.redirectSource.getValidity());
                 this.mimeType = this.redirectSource.getMimeType();
             }
         } catch (SAXException e) {
@@ -450,8 +447,7 @@
             this.redirectSource = null;
         }
 
-        this.sourceValidity = null;
-        this.redirectValidity = null;
+        this.validity.set(null);
 
         this.environment.reset();
         this.exception = null;
@@ -463,6 +459,7 @@
      * Recyclable
      */
     public void recycle() {
+        this.validity = new SitemapSourceValidity();
         this.reset();
         if (this.sourceResolver != null) {
             this.manager.release(this.sourceResolver);
@@ -497,4 +494,31 @@
         return java.util.Collections.EMPTY_LIST.iterator();
     }
 
+    /**
+     * A simple SourceValidity protecting callers from resets.
+     */
+    public static final class SitemapSourceValidity implements SourceValidity {
+
+        public SourceValidity nested_validity = null;
+
+        private SitemapSourceValidity() {
+            super();
+        }
+
+        private void set(SourceValidity validity) {
+            this.nested_validity = validity;
+        }
+
+        public int isValid() {
+            return(this.nested_validity != null?
+                   this.nested_validity.isValid():
+                   SourceValidity.INVALID);
+        }
+
+        public int isValid(SourceValidity validity) {
+            return(this.nested_validity != null?
+                   this.nested_validity.isValid(validity):
+                   SourceValidity.INVALID);
+        }
+    }
 }

Reply via email to