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 2007/02/06 22:27:52 UTC

svn commit: r504299 - in /cocoon/trunk/core/cocoon-servlet-service: cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/ cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/ cocoon-servlet-servi...

Author: danielf
Date: Tue Feb  6 13:27:51 2007
New Revision: 504299

URL: http://svn.apache.org/viewvc?view=rev&rev=504299
Log:
Some renaming to get rid of a couple of references to blocks. And rewrote (and renamed) the call stack of the servletservice package to be based on the more general call stack.

Added:
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java   (contents, props changed)
      - copied, changed from r503800, cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStack.java
Removed:
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStack.java
Modified:
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPathModule.java
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPropertyModule.java
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallFrame.java
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallStack.java
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletConnection.java
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletServiceContext.java

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPathModule.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPathModule.java?view=diff&rev=504299&r1=504298&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPathModule.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPathModule.java Tue Feb  6 13:27:51 2007
@@ -27,7 +27,7 @@
 import org.apache.cocoon.components.modules.input.InputModule;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.internal.EnvironmentHelper;
-import org.apache.cocoon.servletservice.CallStack;
+import org.apache.cocoon.servletservice.CallStackHelper;
 import org.apache.cocoon.servletservice.ServletServiceContext;
 
 /**
@@ -40,7 +40,7 @@
     public Object getAttribute( String name, Configuration modeConf, Map objectModel )
     throws ConfigurationException {
         Environment env = EnvironmentHelper.getCurrentEnvironment();
-        ServletServiceContext blockContext = (ServletServiceContext) CallStack.getBaseBlockContext();
+        ServletServiceContext blockContext = (ServletServiceContext) CallStackHelper.getBaseServletContext();
         String absoluteURI = null;
         /* No relative block paths yet
         String baseURI = env.getURIPrefix();

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPropertyModule.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPropertyModule.java?view=diff&rev=504299&r1=504298&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPropertyModule.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/components/BlockPropertyModule.java Tue Feb  6 13:27:51 2007
@@ -23,7 +23,7 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.cocoon.components.modules.input.InputModule;
-import org.apache.cocoon.servletservice.CallStack;
+import org.apache.cocoon.servletservice.CallStackHelper;
 
 /**
  * BlockPropertyModule provides access to the properties of the current block.
@@ -34,7 +34,7 @@
 
     public Object getAttribute( String name, Configuration modeConf, Map objectModel )
     throws ConfigurationException {
-        return CallStack.getBaseBlockContext().getInitParameter(name);
+        return CallStackHelper.getBaseServletContext().getInitParameter(name);
     }
 
     public Object[] getAttributeValues(String name, Configuration modeConf, Map objectModel)

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallFrame.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallFrame.java?view=diff&rev=504299&r1=504298&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallFrame.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallFrame.java Tue Feb  6 13:27:51 2007
@@ -30,6 +30,10 @@
 public class CallFrame {
     private Map attributes;
     private Map destructionCallbacks;
+    
+    public boolean hasAttribute(String name) {
+        return this.attributes != null ? this.attributes.containsKey(name) : false;
+    }
 
     public Object getAttribute(String name) {
         return this.attributes != null ? this.attributes.get(name) : null;

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallStack.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallStack.java?view=diff&rev=504299&r1=504298&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallStack.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/CallStack.java Tue Feb  6 13:27:51 2007
@@ -65,4 +65,23 @@
         }
         return null;
     }
+    
+    /**
+     * @return the size of the call stack
+     */
+    public static int size() {
+        final Stack stack = (Stack)callStack.get();
+        return stack != null ? stack.size() : 0;
+    }
+    
+    /**
+     * Get the frame at the i:th position in the call stack
+     * @param i
+     * @return
+     */
+    public static CallFrame frameAt(int i) {
+        final Stack stack = (Stack)callStack.get();
+        return (CallFrame) (stack != null ? stack.elementAt(i) : null);
+    }
+
 }

Copied: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java (from r503800, cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStack.java)
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java?view=diff&rev=504299&p1=cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStack.java&r1=503800&p2=cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStack.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java Tue Feb  6 13:27:51 2007
@@ -1,126 +1,106 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cocoon.servletservice;
-
-import java.util.Stack;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-
-/**
- * Stack used for geting hold on the current block servlet
- *
- * @version $Id: BlockCallStack.java 496060 2007-01-14 11:03:06Z danielf $
- * @since 2.2 
- */
-public class CallStack {
-
-    /** The block stack */
-    private static final ThreadLocal blockStack = new ThreadLocal();
-    
-    /** Keep track on if it is an ordinary or a super call */
-    private static class BlockCallStackInfo {
-        public BlockCallStackInfo(ServletContext servletContext, boolean superCall) {
-            this.servletContext = servletContext;
-            this.superCall = superCall;
-        }
-        public ServletContext servletContext;
-        public boolean superCall;
-    };
-
-    /**
-     * 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 ServletException if block is null
-     */
-    public static void enterBlock(ServletContext context)
-    throws ServletException {
-        enterBlock(context, false);
-    }
-
-    /**
-     * This hook must be called each time a super block is entered.
-     *
-     * <p>This method should never raise an exception, except when the
-     * parameters are not set!</p>
-     *
-     * @throws ServletException if block is null
-     */
-    public static void enterSuperBlock(ServletContext context)
-    throws ServletException {
-        enterBlock(context, true);
-    }
-
-    private static void enterBlock(ServletContext context, boolean superCall)
-    throws ServletException {
-        if (null == context) {
-            throw new ServletException("Block is not set.");
-        }
-
-        Stack stack = (Stack)blockStack.get();
-        if (stack == null) {
-            stack = new Stack();
-            blockStack.set(stack);
-        }
-        BlockCallStackInfo info = new BlockCallStackInfo(context, superCall);
-        stack.push(info);
-    }
-
-    /**
-     * 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();
-    }
-
-    /**
-     * Use this method for getting the context that should be used for
-     * resolving a polymorphic block protocol call 
-     * @return a servlet context
-     */
-    public static ServletContext getBaseBlockContext() {
-        final Stack stack = (Stack)blockStack.get();
-        if (stack != null) {
-            for(int i = stack.size() - 1; i >= 0; i--) {
-                BlockCallStackInfo info = (BlockCallStackInfo) stack.elementAt(i);
-                if (!info.superCall)
-                    return info.servletContext;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Use this method for getting the context that should be used for
-     * resolving a block protocol call to a super block 
-     * @return a servlet context
-     */
-    public static ServletContext getCurrentBlockContext() {
-        final Stack stack = (Stack)blockStack.get();
-        if (stack != null && !stack.isEmpty()) {
-            return ((BlockCallStackInfo)stack.peek()).servletContext;
-        }
-        return null;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.servletservice;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+import org.apache.cocoon.callstack.CallFrame;
+import org.apache.cocoon.callstack.CallStack;
+import org.apache.cocoon.callstack.environment.CallFrameHelper;
+
+/**
+ * Helper class used for geting hold on the current servlet service
+ *
+ * @version $Id$
+ * @since 2.2 
+ */
+public class CallStackHelper {
+
+    /** Key for a value determing wether a call frame contains a super call or not */
+    public final static String SUPER_CALL = "super";
+
+    /**
+     * This hook must be called each time a servlet service is entered.
+     *
+     * <p>This method should never raise an exception, except when the
+     * parameters are not set!</p>
+     *
+     * @throws ServletException if block is null
+     */
+    public static void enterServlet(ServletContext context)
+    throws ServletException {
+        enterServlet(context, false);
+    }
+
+    /**
+     * This hook must be called each time a super servlet service is entered.
+     *
+     * <p>This method should never raise an exception, except when the
+     * parameters are not set!</p>
+     *
+     * @throws ServletException if the context is null
+     */
+    public static void enterSuperServlet(ServletContext context)
+    throws ServletException {
+        enterServlet(context, true);
+    }
+
+    private static void enterServlet(ServletContext context, boolean superCall)
+    throws ServletException {
+        if (null == context) {
+            throw new ServletException("The context is not set.");
+        }
+
+        CallStack.enter();
+        CallStack.getCurrentFrame().setAttribute(SUPER_CALL, new Boolean(superCall));
+        CallFrameHelper.setContext(context);
+    }
+
+    /**
+     * This hook must be called each time a servlet service is left.
+     *
+     * <p>It's the counterpart to the {@link #enterServlet(ServletContext)}
+     * method.</p>
+     */
+    public static void leaveServlet() {
+        CallStack.leave();
+    }
+
+    /**
+     * Use this method for getting the context that should be used for
+     * resolving a polymorphic servlet protocol call 
+     * @return a servlet context
+     */
+    public static ServletContext getBaseServletContext() {
+        for(int i = CallStack.size() - 1; i >= 0; i--) {
+            CallFrame frame = CallStack.frameAt(i);
+            if (frame.hasAttribute(SUPER_CALL) && !((Boolean)frame.getAttribute(SUPER_CALL)).booleanValue())
+                return (ServletContext) frame.getAttribute(CallFrameHelper.CONTEXT_OBJECT);
+        }
+        return null;
+    }
+
+    /**
+     * Use this method for getting the context that should be used for
+     * resolving a servlet protocol call to a super servlet service 
+     * @return a servlet context
+     */
+    public static ServletContext getCurrentServletContext() {
+        return CallFrameHelper.getContext();
+    }
+}

Propchange: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/CallStackHelper.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletConnection.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletConnection.java?view=diff&rev=504299&r1=504298&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletConnection.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletConnection.java Tue Feb  6 13:27:51 2007
@@ -79,9 +79,9 @@
         // Super calls are resolved relative the current context and ordinary
         // calls relative the last non super call in the call chain
         if (ServletServiceContext.SUPER.equals(this.blockName))
-            this.context = CallStack.getCurrentBlockContext();
+            this.context = CallStackHelper.getCurrentServletContext();
         else
-            this.context = CallStack.getBaseBlockContext();
+            this.context = CallStackHelper.getBaseServletContext();
         
         if (this.context == null)
             throw new MalformedURLException("Must be used in a block context " + url);

Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletServiceContext.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletServiceContext.java?view=diff&rev=504299&r1=504298&r2=504299
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletServiceContext.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/ServletServiceContext.java Tue Feb  6 13:27:51 2007
@@ -526,17 +526,17 @@
                     // It is important to set the current context each time
                     // a new context is entered, this is used for the servlet
                     // protocol
-                    CallStack.enterBlock(ServletServiceContext.this);
+                    CallStackHelper.enterServlet(ServletServiceContext.this);
                 } else {
                     // A super servlet service should be called in the context of
                     // the called servlet service to get polymorphic calls resolved
                     // in the right way. We still need to register the
                     // current context for resolving super calls relative it.
-                    CallStack.enterSuperBlock(ServletServiceContext.this);
+                    CallStackHelper.enterSuperServlet(ServletServiceContext.this);
                 }                        
                 ServletServiceContext.this.servlet.service(request, response);
             } finally {
-                CallStack.leaveBlock();
+                CallStackHelper.leaveServlet();
             }
         }