Author: vgritsenko
Date: Mon Oct  4 16:40:15 2004
New Revision: 53765

Modified:
   
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
Log:
Make sure COCOON_PASS_THROUGH is properly reset (even when src is null)


Modified: 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
     (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
     Mon Oct  4 16:40:15 2004
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -37,7 +37,12 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
  * @version CVS $Id$
  */
-public class MountNode extends AbstractProcessingNode implements Composable, 
Disposable {
+public class MountNode extends AbstractProcessingNode
+                       implements Composable, Disposable {
+
+    /** The  key to get the pass_through value fron the Environment */
+    protected final static String COCOON_PASS_THROUGH = "COCOON_PASS_THROUGH";
+
 
     /** The 'uri-prefix' attribute */
     private final VariableResolver prefix;
@@ -53,18 +58,15 @@
 
     /** The value of the 'check-reload' attribute */
     private final boolean checkReload;
-   
+
     /** The component manager to be used by the mounted processor */
     private ComponentManager manager;
 
     /** The value of the 'pass-through' attribute */
     private final boolean passThrough;
-        
-    /** The  key to get the pass_through value fron the Environment*/
-    protected final static String COCOON_PASS_THROUGH = new 
String("COCOON_PASS_THROUGH");    
-        
-    public MountNode(VariableResolver prefix, 
-                     VariableResolver source, 
+
+    public MountNode(VariableResolver prefix,
+                     VariableResolver source,
                      TreeProcessor parentProcessor,
                      boolean checkReload,
                      boolean passThrough) {
@@ -81,31 +83,30 @@
 
     public final boolean invoke(Environment env, InvokeContext context)
       throws Exception {
-
-        Object previousPassThrough = env.getAttribute(COCOON_PASS_THROUGH);
-        env.setAttribute(COCOON_PASS_THROUGH,new Boolean(passThrough));
-        
         final Map objectModel = env.getObjectModel();
 
         String resolvedSource = this.source.resolve(context, objectModel);
         String resolvedPrefix = this.prefix.resolve(context, objectModel);
 
-        if (resolvedSource.length()==0) {
-            throw new ProcessingException("Source of mount statement is 
empty"); 
+        if (resolvedSource.length() == 0) {
+            throw new ProcessingException("Source of mount statement is 
empty");
         }
         TreeProcessor processor = getProcessor(resolvedSource, resolvedPrefix);
 
+        // Save context
         String oldPrefix = env.getURIPrefix();
         String oldURI    = env.getURI();
         String oldContext   = env.getContext();
-                               
+        Object oldPassThrough = env.getAttribute(COCOON_PASS_THROUGH);
+        env.setAttribute(COCOON_PASS_THROUGH, new Boolean(passThrough));
+
         try {
             env.changeContext(resolvedPrefix, resolvedSource);
 
             if (context.isBuildingPipelineOnly()) {
                 // Propagate pipelines
                 ProcessingPipeline pp = processor.buildPipeline(env);
-                if ( pp != null ) {
+                if (pp != null) {
                     context.setProcessingPipeline( pp );
                     return true;
                 } else {
@@ -118,11 +119,12 @@
         } finally {
             // Restore context
             env.setContext(oldPrefix, oldURI, oldContext);
-            if(previousPassThrough != null){
-               env.setAttribute(COCOON_PASS_THROUGH,previousPassThrough);
-            }else{
-               env.removeAttribute(COCOON_PASS_THROUGH);
-            }    
+            if (oldPassThrough != null) {
+                env.setAttribute(COCOON_PASS_THROUGH, oldPassThrough);
+            } else {
+                env.removeAttribute(COCOON_PASS_THROUGH);
+            }
+
             // Turning recomposing as a test, according to:
             // http://marc.theaimsgroup.com/?t=106802211400005&r=1&w=2
             // Recompose pipelines which may have been recomposed by subsitemap
@@ -142,7 +144,7 @@
             } else {
                 actualSource = source;
             }
-            
+
             processor = 
this.parentProcessor.createChildProcessor(this.manager, actualSource);
 
             // Associate to the original source
@@ -153,7 +155,7 @@
     }
 
     /**
-     * 
+     *
      */
     public void dispose() {
         Iterator iter = this.processors.values().iterator();

Reply via email to