Author: apetrelli
Date: Tue Jan 13 03:49:19 2009
New Revision: 734110

URL: http://svn.apache.org/viewvc?rev=734110&view=rev
Log:
TILES-349
Added utilities to ServletUtil and JspUtil.
Some methods of TilesAccess have been deprecated. Other methods have been 
removed (since they were added in 2.1.0).

Modified:
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
    
tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/util/DefinitionsFactoryUtil.java
    
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspUtil.java
    
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DestroyContainerTag.java
    
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
    
tiles/framework/trunk/tiles-jsp/src/test/java/org/apache/tiles/jsp/context/JspUtilTest.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
    
tiles/framework/trunk/tiles-servlet/src/test/java/org/apache/tiles/servlet/context/ServletUtilTest.java

Modified: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
 (original)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
 Tue Jan 13 03:49:19 2009
@@ -70,30 +70,15 @@
      * @return The container if it has been configured previously, otherwise
      * <code>null</code>.
      * @see #setContainer(Object, TilesContainer)
+     * @deprecated Use one of the environment-specific Utilities (e.g.
+     * ServletUtil).
      */
+    @Deprecated
     public static TilesContainer getContainer(Object context) {
         return (TilesContainer) getAttribute(context, CONTAINER_ATTRIBUTE);
     }
 
     /**
-     * Finds and returns a Tiles container object, if it was previously 
initialized.
-     *
-     * @param context The (application) context object to use.
-     * @return The container if it has been configured previously, otherwise
-     * <code>null</code>.
-     * @param key The key under which the container is stored.
-     * @see #setContainer(Object, TilesContainer)
-     * @since 2.1.0
-     */
-    public static TilesContainer getContainer(Object context, String key) {
-        if (key == null) {
-            key = CONTAINER_ATTRIBUTE;
-        }
-
-        return (TilesContainer) getAttribute(context, key);
-    }
-
-    /**
      * Configures the default container to be used in the application.
      *
      * @param context The Tiles application context object to use.
@@ -142,35 +127,21 @@
      * @param container The container object to set.
      * @throws TilesAccessException If something goes wrong during 
manipulation of the
      * context.
+     * @deprecated Use {...@link #setContainer(TilesApplicationContext, 
TilesContainer)}.
      */
+    @Deprecated
     public static void setContainer(Object context, TilesContainer container) {
-        setContainer(context, container, CONTAINER_ATTRIBUTE);
-    }
-
-    /**
-     * Configures the container to be used in the application.
-     *
-     * @param context The (application) context object to use.
-     * @param container The container object to set.
-     * @param key The key under which the container will be stored.
-     * @throws TilesAccessException If something goes wrong during 
manipulation of the
-     * context.
-     */
-    public static void setContainer(Object context, TilesContainer container, 
String key) {
-        if (key == null) {
-            key = CONTAINER_ATTRIBUTE;
-        }
 
         if (container == null) {
             if (LOG.isInfoEnabled()) {
                 LOG.info("Removing TilesContext for context: " + 
context.getClass().getName());
             }
-            removeAttribute(context, key);
+            removeAttribute(context, CONTAINER_ATTRIBUTE);
         }
         if (container != null && LOG.isInfoEnabled()) {
             LOG.info("Publishing TilesContext for context: " + 
context.getClass().getName());
         }
-        setAttribute(context, key, container);
+        setAttribute(context, CONTAINER_ATTRIBUTE, container);
     }
 
     /**
@@ -178,21 +149,12 @@
      *
      * @param context The (application) context to use.
      * @return The required Tiles application context.
+     * @deprecated Use one of the environment-specific Utilities (e.g.
+     * ServletUtil).
      */
+    @Deprecated
     public static TilesApplicationContext getApplicationContext(Object 
context) {
-        return getApplicationContext(context, null);
-    }
-
-    /**
-     * Returns the Tiles application context object.
-     *
-     * @param context The (application) context to use.
-     * @param key The key under which the container is stored.
-     * @return The required Tiles application context.
-     * @since 2.1.0
-     */
-    public static TilesApplicationContext getApplicationContext(Object 
context, String key) {
-        TilesContainer container = getContainer(context, key);
+        TilesContainer container = getContainer(context);
         if (container != null) {
             return container.getApplicationContext();
         }

Modified: 
tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
 (original)
+++ 
tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
 Tue Jan 13 03:49:19 2009
@@ -20,11 +20,13 @@
  */
 package org.apache.tiles.access;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.easymock.EasyMock;
+import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
 
-import javax.servlet.ServletContext;
-
 import junit.framework.TestCase;
 
 /**
@@ -35,55 +37,38 @@
     /**
      * The servlet context to use.
      */
-    private ServletContext context;
+    private TilesApplicationContext context;
 
     /** {...@inheritdoc} */
     public void setUp() {
-        context = EasyMock.createMock(ServletContext.class);
+        context = EasyMock.createMock(TilesApplicationContext.class);
     }
 
     /**
      * Tests the setting of the context.
      */
-    public void testSetContext() {
+    public void testSetContainer() {
         TilesContainer container = EasyMock.createMock(TilesContainer.class);
-        context.setAttribute(TilesAccess.CONTAINER_ATTRIBUTE, container);
+        Map<String, Object> attribs = new HashMap<String, Object>();
+        EasyMock.expect(context.getApplicationScope()).andReturn(attribs);
         EasyMock.replay(context);
         TilesAccess.setContainer(context, container);
+        assertEquals(attribs.size(), 1);
+        assertEquals(attribs.get(TilesAccess.CONTAINER_ATTRIBUTE), container);
         EasyMock.verify(context);
     }
 
     /**
      * Tests the setting of the context.
      */
-    public void testSetContextWithKey() {
+    public void testSetContainerWithKey() {
         TilesContainer container = EasyMock.createMock(TilesContainer.class);
-        context.setAttribute("myKey", container);
+        Map<String, Object> attribs = new HashMap<String, Object>();
+        EasyMock.expect(context.getApplicationScope()).andReturn(attribs);
         EasyMock.replay(context);
         TilesAccess.setContainer(context, container, "myKey");
+        assertEquals(attribs.size(), 1);
+        assertEquals(attribs.get("myKey"), container);
         EasyMock.verify(context);
     }
-
-    /**
-     * Tests the getting of the context.
-     */
-    public void testGetContext() {
-        TilesContainer container = EasyMock.createMock(TilesContainer.class);
-        
EasyMock.expect(context.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
-        EasyMock.replay(context);
-        assertEquals(container, TilesAccess.getContainer(context));
-        EasyMock.verify(context);
-    }
-
-    /**
-     * Tests the getting of the context.
-     */
-    public void testGetContextWithKey() {
-        TilesContainer container = EasyMock.createMock(TilesContainer.class);
-        EasyMock.expect(context.getAttribute("myKey")).andReturn(container);
-        EasyMock.replay(context);
-        assertEquals(container, TilesAccess.getContainer(context, "myKey"));
-        EasyMock.verify(context);
-    }
-
 }

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/util/DefinitionsFactoryUtil.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/util/DefinitionsFactoryUtil.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/util/DefinitionsFactoryUtil.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/util/DefinitionsFactoryUtil.java
 Tue Jan 13 03:49:19 2009
@@ -41,29 +41,16 @@
     }
 
     /**
-     * Reloads the definitions factory content, if necessary, of the default
-     * container.
-     *
-     * @param context The context object to use
-     * @throws org.apache.tiles.definition.DefinitionsFactoryException If
-     * something goes wrong during reload.
-     */
-    public static void reloadDefinitionsFactory(Object context) {
-        reloadDefinitionsFactory(context, null);
-    }
-
-    /**
      * Reloads the definitions factory content, if necessary.
      *
      * @param context The context object to use
-     * @param containerKey The key under which the container is stored.
      * @throws org.apache.tiles.definition.DefinitionsFactoryException If
      * something goes wrong during reload.
+     * @deprecated Let the definitions DAO manage auto-reload.
      */
-    public static void reloadDefinitionsFactory(Object context,
-            String containerKey) {
-        TilesContainer container = TilesAccess.getContainer(context,
-                containerKey);
+    @Deprecated
+    public static void reloadDefinitionsFactory(Object context) {
+        TilesContainer container = TilesAccess.getContainer(context);
         if (container instanceof BasicTilesContainer) {
             BasicTilesContainer basic = (BasicTilesContainer) container;
             DefinitionsFactory factory = basic.getDefinitionsFactory();

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspUtil.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspUtil.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspUtil.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspUtil.java
 Tue Jan 13 03:49:19 2009
@@ -21,6 +21,8 @@
 
 package org.apache.tiles.jsp.context;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.impl.NoSuchContainerException;
@@ -36,6 +38,12 @@
 public final class JspUtil {
 
     /**
+     * The logging object.
+     */
+    private static final Log LOG =
+        LogFactory.getLog(ServletUtil.class);
+
+    /**
      * Constructor, private to avoid instantiation.
      */
     private JspUtil() {
@@ -71,6 +79,72 @@
     }
 
     /**
+     * Returns the default Tiles container.
+     *
+     * @param context The page context to use.
+     * @return The default Tiles container.
+     * @since 2.1.2
+     */
+    public static TilesContainer getContainer(PageContext context) {
+        return getContainer(context, TilesAccess.CONTAINER_ATTRIBUTE);
+    }
+
+    /**
+     * Returns a specific Tiles container.
+     *
+     * @param context The page context to use.
+     * @param key The key under which the container is stored. If null, the
+     * default container will be returned.
+     * @return The requested Tiles container.
+     * @since 2.1.2
+     */
+    public static TilesContainer getContainer(PageContext context, String key) 
{
+        if (key == null) {
+            key = TilesAccess.CONTAINER_ATTRIBUTE;
+        }
+        return (TilesContainer) context.getAttribute(key,
+                PageContext.APPLICATION_SCOPE);
+    }
+
+    /**
+     * Configures the default container to be used in the application.
+     *
+     * @param context The page context object to use.
+     * @param container The container object to set.
+     * @since 2.1.2
+     */
+    public static void setContainer(PageContext context,
+            TilesContainer container) {
+        setContainer(context, container, TilesAccess.CONTAINER_ATTRIBUTE);
+    }
+
+    /**
+     * Configures the container to be used in the application.
+     *
+     * @param context The page context object to use.
+     * @param container The container object to set.
+     * @param key The key under which the container will be stored.
+     * @since 2.1.2
+     */
+    public static void setContainer(PageContext context,
+            TilesContainer container, String key) {
+        if (key == null) {
+            key = TilesAccess.CONTAINER_ATTRIBUTE;
+        }
+
+        if (container == null) {
+            if (LOG.isInfoEnabled()) {
+                LOG.info("Removing TilesContext for context: " + 
context.getClass().getName());
+            }
+            context.removeAttribute(key, PageContext.APPLICATION_SCOPE);
+        }
+        if (container != null && LOG.isInfoEnabled()) {
+            LOG.info("Publishing TilesContext for context: " + 
context.getClass().getName());
+        }
+        context.setAttribute(key, container, PageContext.APPLICATION_SCOPE);
+    }
+
+    /**
      * Sets the current container to use in web pages.
      *
      * @param context The page context to use.
@@ -78,8 +152,7 @@
      * @since 2.1.0
      */
     public static void setCurrentContainer(PageContext context, String key) {
-        TilesContainer container = TilesAccess.getContainer(context
-                .getServletContext(), key);
+        TilesContainer container = getContainer(context, key);
         if (container != null) {
             context.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME,
                     container, PageContext.REQUEST_SCOPE);
@@ -118,7 +191,7 @@
                 ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME,
                 PageContext.REQUEST_SCOPE);
         if (container == null) {
-            container = TilesAccess.getContainer(context.getServletContext());
+            container = getContainer(context);
             context.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME,
                     container, PageContext.REQUEST_SCOPE);
         }

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DestroyContainerTag.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DestroyContainerTag.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DestroyContainerTag.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DestroyContainerTag.java
 Tue Jan 13 03:49:19 2009
@@ -20,7 +20,7 @@
  */
 package org.apache.tiles.jsp.taglib.definition;
 
-import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.jsp.context.JspUtil;
 import org.apache.tiles.jsp.taglib.TilesTag;
 
 /**
@@ -65,8 +65,7 @@
     /** {...@inheritdoc} */
     @Override
     public int doEndTag() {
-        TilesAccess.setContainer(pageContext.getServletContext(), null,
-                containerKey);
+        JspUtil.setContainer(pageContext, null, containerKey);
         return EVAL_PAGE;
     }
 }

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
 Tue Jan 13 03:49:19 2009
@@ -41,10 +41,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
-import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.context.AbstractTilesApplicationContextFactory;
 import org.apache.tiles.factory.AbstractTilesContainerFactory;
 import org.apache.tiles.factory.TilesContainerFactory;
+import org.apache.tiles.jsp.context.JspUtil;
 import org.apache.tiles.jsp.taglib.PutAttributeTag;
 import org.apache.tiles.jsp.taglib.PutAttributeTagParent;
 import org.apache.tiles.jsp.taglib.TilesBodyTag;
@@ -142,7 +142,7 @@
     // TODO Add a MutableContainer so that this can be done?
     public int doEndTag() {
         TilesContainer container =
-            TilesAccess.getContainer(pageContext.getServletContext(), 
containerKey);
+            JspUtil.getContainer(pageContext, containerKey);
 
         if (container != null) {
             LOG.warn("TilesContainer already instantiated for this context 
under key '"
@@ -177,7 +177,7 @@
         TilesContainer mutableContainer = AbstractTilesContainerFactory
                 .getTilesContainerFactory(applicationContext).createContainer(
                         applicationContext);
-        TilesAccess.setContainer(context, mutableContainer, containerKey);
+        JspUtil.setContainer(pageContext, mutableContainer, containerKey);
 
         return EVAL_PAGE;
     }

Modified: 
tiles/framework/trunk/tiles-jsp/src/test/java/org/apache/tiles/jsp/context/JspUtilTest.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/test/java/org/apache/tiles/jsp/context/JspUtilTest.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/test/java/org/apache/tiles/jsp/context/JspUtilTest.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/test/java/org/apache/tiles/jsp/context/JspUtilTest.java
 Tue Jan 13 03:49:19 2009
@@ -39,25 +39,80 @@
 public class JspUtilTest extends TestCase {
 
     /**
+     * Tests {...@link ServletUtil#getContainer(ServletContext)}.
+     */
+    public void testGetContainer() {
+        PageContext context = EasyMock.createMock(PageContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        EasyMock.expect(
+                context.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE,
+                        PageContext.APPLICATION_SCOPE)).andReturn(container);
+        EasyMock.replay(context, container);
+        assertEquals(container, JspUtil.getContainer(context));
+        EasyMock.verify(context, container);
+    }
+
+    /**
+     * Tests {...@link ServletUtil#getContainer(ServletContext, String)}.
+     */
+    public void testGetContainerWithKey() {
+        PageContext context = EasyMock.createMock(PageContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        EasyMock.expect(
+                context.getAttribute("myKey", PageContext.APPLICATION_SCOPE))
+                .andReturn(container);
+        EasyMock.replay(context, container);
+        assertEquals(container, JspUtil.getContainer(context, "myKey"));
+        EasyMock.verify(context, container);
+    }
+
+    /**
+     * Tests {...@link ServletUtil#setContainer(ServletContext, 
TilesContainer)}.
+     */
+    public void testSetContainer() {
+        PageContext context = EasyMock.createMock(PageContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        context.setAttribute(TilesAccess.CONTAINER_ATTRIBUTE, container,
+                PageContext.APPLICATION_SCOPE);
+        EasyMock.replay(context, container);
+        JspUtil.setContainer(context, container);
+        EasyMock.verify(context, container);
+    }
+
+    /**
+     * Tests
+     * {...@link ServletUtil#setContainer(ServletContext, TilesContainer, 
String)}.
+     */
+    public void testSetContainerWithKey() {
+        PageContext context = EasyMock.createMock(PageContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        context.setAttribute("myKey", container, 
PageContext.APPLICATION_SCOPE);
+        EasyMock.replay(context, container);
+        JspUtil.setContainer(context, container, "myKey");
+        EasyMock.verify(context, container);
+    }
+
+    /**
      * Tests
      * {...@link JspUtil#setCurrentContainer(PageContext, String)}.
      */
     public void testSetCurrentContainer() {
         PageContext pageContext = EasyMock.createMock(PageContext.class);
-        ServletContext context = EasyMock.createMock(ServletContext.class);
         TilesContainer container = EasyMock.createMock(TilesContainer.class);
-        EasyMock.expect(pageContext.getServletContext()).andReturn(context);
-        EasyMock.expect(context.getAttribute("myKey")).andReturn(container);
+        EasyMock.expect(
+                pageContext
+                        .getAttribute("myKey", PageContext.APPLICATION_SCOPE))
+                .andReturn(container);
         pageContext.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME,
                 container, PageContext.REQUEST_SCOPE);
         EasyMock.expect(pageContext.getAttribute(ServletUtil
                 .CURRENT_CONTAINER_ATTRIBUTE_NAME, PageContext.REQUEST_SCOPE))
                 .andReturn(container);
-        EasyMock.replay(pageContext, context, container);
+        EasyMock.replay(pageContext, container);
         JspUtil.setCurrentContainer(pageContext, "myKey");
         assertTrue("The containers are not the same", JspUtil
                 .getCurrentContainer(pageContext) == container);
-        EasyMock.verify(pageContext, context, container);
+        EasyMock.verify(pageContext, container);
     }
 
     /**
@@ -85,17 +140,17 @@
      */
     public void testGetCurrentContainer() {
         PageContext pageContext = EasyMock.createMock(PageContext.class);
-        ServletContext context = EasyMock.createMock(ServletContext.class);
         TilesContainer defaultContainer = EasyMock.createMock(
                 TilesContainer.class);
         TilesContainer alternateContainer = EasyMock.createMock(
                 TilesContainer.class);
-        EasyMock.expect(pageContext.getServletContext()).andReturn(context);
         EasyMock.expect(pageContext.getAttribute(ServletUtil
                 .CURRENT_CONTAINER_ATTRIBUTE_NAME, PageContext.REQUEST_SCOPE))
                 .andReturn(null);
-        EasyMock.expect(context.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE))
-                .andReturn(defaultContainer);
+        EasyMock.expect(
+                pageContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE,
+                        PageContext.APPLICATION_SCOPE)).andReturn(
+                defaultContainer);
         pageContext.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME,
                 defaultContainer, PageContext.REQUEST_SCOPE);
         pageContext.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME,
@@ -103,13 +158,13 @@
         EasyMock.expect(pageContext.getAttribute(ServletUtil
                 .CURRENT_CONTAINER_ATTRIBUTE_NAME, PageContext.REQUEST_SCOPE))
                 .andReturn(alternateContainer);
-        EasyMock.replay(pageContext, context, defaultContainer, 
alternateContainer);
+        EasyMock.replay(pageContext, defaultContainer, alternateContainer);
         TilesContainer currentContainer = 
JspUtil.getCurrentContainer(pageContext);
         assertTrue("The containers are not the same",
                 currentContainer == defaultContainer);
         JspUtil.setCurrentContainer(pageContext, alternateContainer);
         currentContainer = JspUtil.getCurrentContainer(pageContext);
-        EasyMock.verify(pageContext, context, defaultContainer, 
alternateContainer);
+        EasyMock.verify(pageContext, defaultContainer, alternateContainer);
         assertTrue("The containers are not the same",
                 currentContainer == alternateContainer);
     }

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
 Tue Jan 13 03:49:19 2009
@@ -28,6 +28,8 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.impl.NoSuchContainerException;
@@ -43,6 +45,12 @@
 public final class ServletUtil {
 
     /**
+     * The logging object.
+     */
+    private static final Log LOG =
+        LogFactory.getLog(ServletUtil.class);
+
+    /**
      * Name of the attribute used to store the force-include option.
      * @since 2.0.6
      */
@@ -91,6 +99,71 @@
     }
 
     /**
+     * Returns the default Tiles container.
+     *
+     * @param context The servlet context to use.
+     * @return The default Tiles container.
+     * @since 2.1.2
+     */
+    public static TilesContainer getContainer(ServletContext context) {
+        return getContainer(context, TilesAccess.CONTAINER_ATTRIBUTE);
+    }
+
+    /**
+     * Returns a specific Tiles container.
+     *
+     * @param context The servlet context to use.
+     * @param key The key under which the container is stored. If null, the
+     * default container will be returned.
+     * @return The requested Tiles container.
+     * @since 2.1.2
+     */
+    public static TilesContainer getContainer(ServletContext context, String 
key) {
+        if (key == null) {
+            key = TilesAccess.CONTAINER_ATTRIBUTE;
+        }
+        return (TilesContainer) context.getAttribute(key);
+    }
+
+    /**
+     * Configures the default container to be used in the application.
+     *
+     * @param context The servlet context object to use.
+     * @param container The container object to set.
+     * @since 2.1.2
+     */
+    public static void setContainer(ServletContext context,
+            TilesContainer container) {
+        setContainer(context, container, TilesAccess.CONTAINER_ATTRIBUTE);
+    }
+
+    /**
+     * Configures the container to be used in the application.
+     *
+     * @param context The servlet context object to use.
+     * @param container The container object to set.
+     * @param key The key under which the container will be stored.
+     * @since 2.1.2
+     */
+    public static void setContainer(ServletContext context,
+            TilesContainer container, String key) {
+        if (key == null) {
+            key = TilesAccess.CONTAINER_ATTRIBUTE;
+        }
+
+        if (container == null) {
+            if (LOG.isInfoEnabled()) {
+                LOG.info("Removing TilesContext for context: " + 
context.getClass().getName());
+            }
+            context.removeAttribute(key);
+        }
+        if (container != null && LOG.isInfoEnabled()) {
+            LOG.info("Publishing TilesContext for context: " + 
context.getClass().getName());
+        }
+        context.setAttribute(key, container);
+    }
+
+    /**
      * Sets the current container to use in web pages.
      *
      * @param request The request to use.
@@ -100,7 +173,7 @@
      */
     public static void setCurrentContainer(ServletRequest request,
             ServletContext context, String key) {
-        TilesContainer container = TilesAccess.getContainer(context, key);
+        TilesContainer container = getContainer(context, key);
         if (container != null) {
             request.setAttribute(CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
         } else {
@@ -139,7 +212,7 @@
         TilesContainer container = (TilesContainer) request
                 .getAttribute(CURRENT_CONTAINER_ATTRIBUTE_NAME);
         if (container == null) {
-            container = TilesAccess.getContainer(context);
+            container = getContainer(context);
             request.setAttribute(CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
         }
 

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
 Tue Jan 13 03:49:19 2009
@@ -36,7 +36,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.definition.util.DefinitionsFactoryUtil;
-import org.apache.tiles.startup.BasicTilesInitializer;
 
 /**
  * Processes Reloadable Tiles Definitions.
@@ -65,11 +64,6 @@
     private FilterConfig filterConfig = null;
 
     /**
-     * The key under which the container is stored.
-     */
-    private String containerKey;
-
-    /**
      * Checks whether Tiles Definitions need to be reloaded.
      *
      * @param request  The servlet request we are processing
@@ -84,7 +78,7 @@
 
         try {
             DefinitionsFactoryUtil.reloadDefinitionsFactory(
-                    getServletContext(), containerKey);
+                    getServletContext());
             chain.doFilter(request, response);
         } catch (Exception e) {
             throw new ServletException("Error processing request.", e);
@@ -125,9 +119,6 @@
         this.filterConfig = filterConfig;
         super.init(createServletConfig());
 
-        containerKey = filterConfig.getInitParameter(
-                BasicTilesInitializer.CONTAINER_KEY_INIT_PARAMETER);
-
         if (DEBUG) {
             log("TilesDecorationFilter:Initializing filter");
         }

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
 Tue Jan 13 03:49:19 2009
@@ -25,9 +25,9 @@
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.TilesException;
-import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.factory.AbstractTilesContainerFactory;
 import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
+import org.apache.tiles.servlet.context.ServletUtil;
 import org.apache.tiles.startup.BasicTilesInitializer;
 import org.apache.tiles.startup.TilesInitializer;
 
@@ -85,7 +85,7 @@
     public void contextDestroyed(ServletContextEvent event) {
         ServletContext servletContext = event.getServletContext();
         try {
-            TilesAccess.setContainer(servletContext, null);
+            ServletUtil.setContainer(servletContext, null);
         } catch (TilesException e) {
             LOG.warn("Unable to remove tiles container from service.", e);
         }

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
 Tue Jan 13 03:49:19 2009
@@ -23,8 +23,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesException;
-import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
+import org.apache.tiles.servlet.context.ServletUtil;
 import org.apache.tiles.startup.BasicTilesInitializer;
 import org.apache.tiles.startup.TilesInitializer;
 import org.apache.tiles.web.util.ServletContextAdapter;
@@ -66,7 +66,7 @@
     @Override
     public void destroy() {
         try {
-            TilesAccess.setContainer(getServletContext(), null);
+            ServletUtil.setContainer(getServletContext(), null);
         } catch (TilesException e) {
             LOG.warn("Unable to remove tiles container from service.", e);
         }

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
 Tue Jan 13 03:49:19 2009
@@ -25,7 +25,7 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.TilesContainer;
-import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.servlet.context.ServletUtil;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -228,7 +228,7 @@
             return;
         }
 
-        TilesContainer container = TilesAccess.getContainer(
+        TilesContainer container = ServletUtil.getContainer(
                 getServletContext(), containerKey);
         mutator.mutate(container.getAttributeContext(req, res), req);
         if (preventDecorationToken != null) {

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
 Tue Jan 13 03:49:19 2009
@@ -24,7 +24,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.AttributeContext;
-import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.servlet.context.ServletUtil;
 
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
@@ -89,7 +89,7 @@
     protected void doGet(HttpServletRequest req, HttpServletResponse res)
         throws ServletException, IOException {
 
-        TilesContainer container = TilesAccess.getContainer(
+        TilesContainer container = ServletUtil.getContainer(
                 getServletContext(), containerKey);
         mutator.mutate(container.getAttributeContext(req, res), req);
         String definition = getDefinitionName(req);

Modified: 
tiles/framework/trunk/tiles-servlet/src/test/java/org/apache/tiles/servlet/context/ServletUtilTest.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/test/java/org/apache/tiles/servlet/context/ServletUtilTest.java?rev=734110&r1=734109&r2=734110&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/test/java/org/apache/tiles/servlet/context/ServletUtilTest.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/test/java/org/apache/tiles/servlet/context/ServletUtilTest.java
 Tue Jan 13 03:49:19 2009
@@ -38,6 +38,55 @@
 public class ServletUtilTest extends TestCase {
 
     /**
+     * Tests {...@link ServletUtil#getContainer(ServletContext)}.
+     */
+    public void testGetContainer() {
+        ServletContext context = EasyMock.createMock(ServletContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        
EasyMock.expect(context.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
+        EasyMock.replay(context, container);
+        assertEquals(container, ServletUtil.getContainer(context));
+        EasyMock.verify(context, container);
+    }
+
+    /**
+     * Tests {...@link ServletUtil#getContainer(ServletContext, String)}.
+     */
+    public void testGetContainerWithKey() {
+        ServletContext context = EasyMock.createMock(ServletContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        EasyMock.expect(context.getAttribute("myKey")).andReturn(container);
+        EasyMock.replay(context, container);
+        assertEquals(container, ServletUtil.getContainer(context, "myKey"));
+        EasyMock.verify(context, container);
+    }
+
+    /**
+     * Tests {...@link ServletUtil#setContainer(ServletContext, 
TilesContainer)}.
+     */
+    public void testSetContainer() {
+        ServletContext context = EasyMock.createMock(ServletContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        context.setAttribute(TilesAccess.CONTAINER_ATTRIBUTE, container);
+        EasyMock.replay(context, container);
+        ServletUtil.setContainer(context, container);
+        EasyMock.verify(context, container);
+    }
+
+    /**
+     * Tests
+     * {...@link ServletUtil#setContainer(ServletContext, TilesContainer, 
String)}.
+     */
+    public void testSetContainerWithKey() {
+        ServletContext context = EasyMock.createMock(ServletContext.class);
+        TilesContainer container = EasyMock.createMock(TilesContainer.class);
+        context.setAttribute("myKey", container);
+        EasyMock.replay(context, container);
+        ServletUtil.setContainer(context, container, "myKey");
+        EasyMock.verify(context, container);
+    }
+
+    /**
      * Tests
      * {...@link ServletUtil#setCurrentContainer(ServletRequest, 
ServletContext, String)}.
      */


Reply via email to