You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2005/12/11 21:17:11 UTC
svn commit: r356005 - in /cocoon/trunk/src/java/org/apache/cocoon: blocks/
components/modules/input/ components/source/impl/ environment/internal/
Author: danielf
Date: Sun Dec 11 12:17:05 2005
New Revision: 356005
URL: http://svn.apache.org/viewcvs?rev=356005&view=rev
Log:
Refactored to make the block stack independent of the environment stack.
Added:
cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockEnvironmentHelper.java
- copied, changed from r355184, cocoon/trunk/src/java/org/apache/cocoon/environment/internal/BlockEnvironmentHelper.java
Removed:
cocoon/trunk/src/java/org/apache/cocoon/environment/internal/BlockEnvironmentHelper.java
Modified:
cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java
cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java
cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java
cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPathModule.java
cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPropertyModule.java
cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/BlockSource.java
Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java?rev=356005&r1=356004&r2=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java Sun Dec 11 12:17:05 2005
@@ -24,7 +24,6 @@
import org.apache.cocoon.Processor;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.environment.internal.EnvironmentHelper;
/**
* @version SVN $Id$
@@ -68,10 +67,10 @@
// It is important to set the current block each time
// a new block is entered, this is used for the block
// protocol
- EnvironmentHelper.enterProcessor(block, null, environment);
+ BlockEnvironmentHelper.enterBlock(block);
return block.process(environment);
} finally {
- EnvironmentHelper.leaveProcessor();
+ BlockEnvironmentHelper.leaveBlock();
environment.setURI(oldPrefix, oldURI);
getLogger().debug("Leaving processing in block at " + mountPoint);
}
Copied: cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockEnvironmentHelper.java (from r355184, cocoon/trunk/src/java/org/apache/cocoon/environment/internal/BlockEnvironmentHelper.java)
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockEnvironmentHelper.java?p2=cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockEnvironmentHelper.java&p1=cocoon/trunk/src/java/org/apache/cocoon/environment/internal/BlockEnvironmentHelper.java&r1=355184&r2=356005&rev=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/environment/internal/BlockEnvironmentHelper.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockEnvironmentHelper.java Sun Dec 11 12:17:05 2005
@@ -13,36 +13,60 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.cocoon.environment.internal;
+package org.apache.cocoon.blocks;
-import java.net.URL;
+import java.util.Stack;
-import org.apache.cocoon.blocks.Block;
+import org.apache.cocoon.ProcessingException;
/**
- * Hack used for geting hold on the current block manager without
- * making core code dependent of the experimental blocks code.
+ * Stack used for geting hold on the current block manager
*
* @version $Id$
* @since 2.2
*/
-public class BlockEnvironmentHelper
- extends EnvironmentHelper {
+public class BlockEnvironmentHelper {
- // Hack for getting it to compile
- private BlockEnvironmentHelper(URL context) {
- super(context);
+ /** The block stack */
+ static protected final ThreadLocal blockStack = new ThreadLocal();
+
+ /**
+ * This hook must be called each time a block is entered.
+ *
+ * <p>This method should never raise an exception, except when the
+ * parameters are not set!</p>
+ *
+ * @throws ProcessingException if block is null
+ */
+ public static void enterBlock(Block block)
+ throws ProcessingException {
+ if (null == block) {
+ throw new ProcessingException("Block is not set.");
+ }
+
+ Stack stack = (Stack)blockStack.get();
+ if (stack == null) {
+ stack = new Stack();
+ blockStack.set(stack);
+ }
+ stack.push(block);
+ }
+
+ /**
+ * This hook must be called each time a block is left.
+ *
+ * <p>It's the counterpart to the {@link #enterBlock(Block)}
+ * method.</p>
+ */
+ public static void leaveBlock() {
+ final Stack stack = (Stack)blockStack.get();
+ stack.pop();
}
public static Block getCurrentBlock() {
- final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
+ final Stack stack = (Stack)blockStack.get();
if ( stack != null && !stack.isEmpty()) {
- for (int i = stack.getOffset(); i >= 0; i--) {
- final EnvironmentInfo info = (EnvironmentInfo)stack.get(i);
- if (info.processor instanceof Block) {
- return (Block)info.processor;
- }
- }
+ return (Block)stack.peek();
}
return null;
}
Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java?rev=356005&r1=356004&r2=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java Sun Dec 11 12:17:05 2005
@@ -41,7 +41,6 @@
import org.apache.cocoon.core.container.CoreServiceManager;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.environment.internal.EnvironmentHelper;
/**
* @version SVN $Id$
@@ -325,12 +324,12 @@
// It is important to set the current block each time
// a new block is entered, this is used for the block
// protocol
- EnvironmentHelper.enterProcessor(block, null, environment);
+ BlockEnvironmentHelper.enterBlock(block);
}
return block.process(environment);
} finally {
if (!superCall) {
- EnvironmentHelper.leaveProcessor();
+ BlockEnvironmentHelper.leaveBlock();
}
this.getLogger().debug("Leaving processing in block " + blockName);
}
Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java?rev=356005&r1=356004&r2=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java Sun Dec 11 12:17:05 2005
@@ -15,12 +15,6 @@
*/
package org.apache.cocoon.blocks;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.cocoon.Processor;
-
/**
* @version SVN $Id$
*/
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPathModule.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPathModule.java?rev=356005&r1=356004&r2=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPathModule.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPathModule.java Sun Dec 11 12:17:05 2005
@@ -26,7 +26,7 @@
import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.cocoon.blocks.Block;
import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.environment.internal.BlockEnvironmentHelper;
+import org.apache.cocoon.blocks.BlockEnvironmentHelper;
import org.apache.cocoon.environment.internal.EnvironmentHelper;
/**
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPropertyModule.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPropertyModule.java?rev=356005&r1=356004&r2=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPropertyModule.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/modules/input/BlockPropertyModule.java Sun Dec 11 12:17:05 2005
@@ -22,7 +22,7 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.thread.ThreadSafe;
-import org.apache.cocoon.environment.internal.BlockEnvironmentHelper;
+import org.apache.cocoon.blocks.BlockEnvironmentHelper;
/**
* BlockPropertyModule provides access to the properties of the current block.
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/BlockSource.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/BlockSource.java?rev=356005&r1=356004&r2=356005&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/BlockSource.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/BlockSource.java Sun Dec 11 12:17:05 2005
@@ -27,9 +27,9 @@
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.blocks.Block;
+import org.apache.cocoon.blocks.BlockEnvironmentHelper;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.ObjectModelHelper;
-import org.apache.cocoon.environment.internal.BlockEnvironmentHelper;
import org.apache.cocoon.environment.internal.EnvironmentHelper;
import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
import org.apache.excalibur.source.SourceException;
@@ -43,9 +43,6 @@
public final class BlockSource
extends AbstractSource {
- /** The current ServiceManager */
- private final ServiceManager manager;
-
/** The environment */
private final EnvironmentWrapper environment;
@@ -68,8 +65,6 @@
if ( env == null ) {
throw new MalformedURLException("The block protocol can not be used outside an environment.");
}
- this.manager = manager;
-
this.block = BlockEnvironmentHelper.getCurrentBlock();
if (this.block == null)
throw new MalformedURLException("Must be used in a block context " + this.getURI());