Author: apetrelli
Date: Wed May 21 11:30:50 2008
New Revision: 658802

URL: http://svn.apache.org/viewvc?rev=658802&view=rev
Log:
TILES-275
Modified code to use the concept of the "current" container.

Modified:
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/util/DefinitionsFactoryUtil.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesListener.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
    
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AttributeTagSupport.java
    
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/RenderTagSupport.java
    
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.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/main/resources/META-INF/tld/tiles-jsp.tld

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=658802&r1=658801&r2=658802&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
 Wed May 21 11:30:50 2008
@@ -82,6 +82,7 @@
      * <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) {
@@ -92,7 +93,7 @@
     }
 
     /**
-     * Configures the container to be used in the application.
+     * Configures the default container to be used in the application.
      *
      * @param context The (application) context object to use.
      * @param container The container object to set.
@@ -136,7 +137,19 @@
      * @return The required Tiles application context.
      */
     public static TilesApplicationContext getApplicationContext(Object 
context) {
-        TilesContainer container = getContainer(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);
         if (container != null) {
             return container.getApplicationContext();
         }

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=658802&r1=658801&r2=658802&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
 Wed May 21 11:30:50 2008
@@ -41,14 +41,29 @@
     }
 
     /**
-     * Reloads the definitions factory content, if necessary.
+     * 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) {
-        TilesContainer container = TilesAccess.getContainer(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.
+     */
+    public static void reloadDefinitionsFactory(Object context,
+            String containerKey) {
+        TilesContainer container = TilesAccess.getContainer(context,
+                containerKey);
         if (container instanceof BasicTilesContainer) {
             BasicTilesContainer basic = (BasicTilesContainer) container;
             DefinitionsFactory factory = basic.getDefinitionsFactory();

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesFilter.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
 Wed May 21 11:30:50 2008
@@ -58,6 +58,10 @@
      */
     private FilterConfig filterConfig = null;
 
+    /**
+     * The key under which the container is stored.
+     */
+    private String containerKey;
 
     /**
      * Checks whether Tiles Definitions need to be reloaded.
@@ -74,7 +78,7 @@
 
         try {
             DefinitionsFactoryUtil.reloadDefinitionsFactory(
-                    getServletContext());
+                    getServletContext(), containerKey);
             chain.doFilter(request, response);
         } catch (Exception e) {
             throw new ServletException("Error processing request.", e);
@@ -115,6 +119,9 @@
         this.filterConfig = filterConfig;
         super.init(createServletConfig());
 
+        containerKey = filterConfig.getInitParameter(
+                TilesListener.CONTAINER_KEY_INIT_PARAMETER);
+
         if (DEBUG) {
             log("TilesDecorationFilter:Initializing filter");
         }

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesListener.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesListener.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesListener.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/startup/TilesListener.java
 Wed May 21 11:30:50 2008
@@ -40,6 +40,15 @@
     implements ServletContextListener {
 
     /**
+     * Init parameter to define the key under which the container will be
+     * stored.
+     *
+     * @since 2.1.0
+     */
+    public static final String CONTAINER_KEY_INIT_PARAMETER =
+        "org.apache.tiles.web.startup.TilesListener.CONTAINER_KEY";
+
+    /**
      * Log instance.
      */
     protected static final Log LOG =
@@ -53,7 +62,9 @@
      */
     public void contextInitialized(ServletContextEvent event) {
         ServletContext servletContext = event.getServletContext();
-        TilesContainer container = createContainer(servletContext);
+        String key = servletContext.getInitParameter(
+                CONTAINER_KEY_INIT_PARAMETER);
+        TilesContainer container = createContainer(servletContext, key);
         TilesAccess.setContainer(servletContext, container);
     }
 
@@ -76,8 +87,22 @@
      *
      * @param context The servlet context to use.
      * @return The created container
+     * @deprecated Use [EMAIL PROTECTED] 
#createContainer(ServletContext,String)} instead.
      */
+    @Deprecated
     protected TilesContainer createContainer(ServletContext context) {
+        return createContainer(context, null);
+    }
+
+    /**
+     * Creates a Tiles container.
+     *
+     * @param context The servlet context to use.
+     * @param containerKey The key under which the container will be stored.
+     * @return The created container
+     */
+    protected TilesContainer createContainer(ServletContext context,
+            String containerKey) {
         AbstractTilesContainerFactory factory =
             AbstractTilesContainerFactory.getTilesContainerFactory(context);
         return factory.createContainer(context);

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
 Wed May 21 11:30:50 2008
@@ -26,6 +26,7 @@
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.web.startup.TilesListener;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -89,6 +90,11 @@
     private FilterConfig filterConfig;
 
     /**
+     * The key under which the container is stored.
+     */
+    private String containerKey;
+
+    /**
      * The name of the definition attribute used to
      * pass on the request.
      */
@@ -139,6 +145,10 @@
     /** [EMAIL PROTECTED] */
     public void init(FilterConfig config) throws ServletException {
         filterConfig = config;
+
+        containerKey = filterConfig.getInitParameter(
+                TilesListener.CONTAINER_KEY_INIT_PARAMETER);
+
         String temp = config.getInitParameter("attribute-name");
         if (temp != null) {
             definitionAttributeName = temp;
@@ -211,7 +221,8 @@
             return;
         }
 
-        TilesContainer container = 
TilesAccess.getContainer(getServletContext());
+        TilesContainer container = TilesAccess.getContainer(
+                getServletContext(), containerKey);
         mutator.mutate(container.getAttributeContext(req, res), req);
         if (preventDecorationToken != null) {
             req.setAttribute(preventDecorationToken, Boolean.TRUE);

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
 Wed May 21 11:30:50 2008
@@ -25,6 +25,7 @@
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.web.startup.TilesListener;
 
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
@@ -46,6 +47,11 @@
         LogFactory.getLog(TilesDispatchServlet.class);
 
     /**
+     * The key under which the container is stored.
+     */
+    private String containerKey;
+
+    /**
      * The object that will mutate the attribute context so that it uses
      * different attributes.
      */
@@ -55,6 +61,10 @@
     /** [EMAIL PROTECTED] */
     public void init() throws ServletException {
         super.init();
+
+        containerKey = getServletConfig().getInitParameter(
+                TilesListener.CONTAINER_KEY_INIT_PARAMETER);
+
         String temp = getInitParameter("mutator");
         if (temp != null) {
             try {
@@ -72,7 +82,8 @@
     protected void doGet(HttpServletRequest req, HttpServletResponse res)
         throws ServletException, IOException {
 
-        TilesContainer container = 
TilesAccess.getContainer(getServletContext());
+        TilesContainer container = TilesAccess.getContainer(
+                getServletContext(), containerKey);
         mutator.mutate(container.getAttributeContext(req, res), req);
         String definition = getDefinitionName(req);
         if (LOG.isDebugEnabled()) {

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AttributeTagSupport.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AttributeTagSupport.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AttributeTagSupport.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AttributeTagSupport.java
 Wed May 21 11:30:50 2008
@@ -26,7 +26,7 @@
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.TilesException;
-import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.jsp.context.JspUtil;
 
 import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.TagSupport;
@@ -133,7 +133,7 @@
 
     /** [EMAIL PROTECTED] */
     public int doStartTag() throws TilesJspException {
-        container = TilesAccess.getContainer(pageContext.getServletContext());
+        container = JspUtil.getCurrentContainer(pageContext);
         attributeContext = container.getAttributeContext(pageContext);
         scope = getScopeId();
 

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/RenderTagSupport.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/RenderTagSupport.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/RenderTagSupport.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/RenderTagSupport.java
 Wed May 21 11:30:50 2008
@@ -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.jsp.context.JspUtil;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.jsp.PageContext;
@@ -184,7 +184,7 @@
 
     /** [EMAIL PROTECTED] */
     public int doStartTag() throws TilesJspException {
-        container = TilesAccess.getContainer(pageContext.getServletContext());
+        container = JspUtil.getCurrentContainer(pageContext);
         if (container != null) {
             startContext(pageContext);
             return EVAL_BODY_BUFFERED;

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java
 (original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java
 Wed May 21 11:30:50 2008
@@ -23,11 +23,11 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
 import org.apache.tiles.TilesContainer;
+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.TilesJspException;
 import org.apache.tiles.mgmt.MutableTilesContainer;
-import org.apache.tiles.access.TilesAccess;
 
 import javax.servlet.jsp.tagext.TagSupport;
 
@@ -188,8 +188,7 @@
         definition.setRole(role);
         definition.setPreparer(preparer);
 
-        TilesContainer c =
-            TilesAccess.getContainer(pageContext.getServletContext());
+        TilesContainer c = JspUtil.getCurrentContainer(pageContext);
 
         if (c == null) {
             throw new TilesJspException("TilesContainer not initialized");

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=658802&r1=658801&r2=658802&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
 Wed May 21 11:30:50 2008
@@ -31,10 +31,36 @@
  */
 public class DestroyContainerTag extends TagSupport {
 
+    /**
+     * The key under which the container will be stored.
+     */
+    private String containerKey;
+
+    /**
+     * Returns the key under which the container will be stored.
+     *
+     * @return the containerKey The container key.
+     * @since 2.1.0
+     */
+    public String getContainerKey() {
+        return containerKey;
+    }
+
+    /**
+     * Sets the key under which the container will be stored.
+     *
+     * @param containerKey the containerKey The container key.
+     * @since 2.1.0
+     */
+    public void setContainerKey(String containerKey) {
+        this.containerKey = containerKey;
+    }
+
     /** [EMAIL PROTECTED] */
     @Override
     public int doEndTag() {
-        TilesAccess.setContainer(pageContext.getServletContext(), null);
+        TilesAccess.setContainer(pageContext.getServletContext(), 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=658802&r1=658801&r2=658802&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
 Wed May 21 11:30:50 2008
@@ -66,6 +66,11 @@
     private String containerFactory;
 
     /**
+     * The key under which the container will be stored.
+     */
+    private String containerKey;
+
+    /**
      * Init parameters map.
      */
     private Map<String, String> initParameters;
@@ -89,6 +94,25 @@
         this.containerFactory = containerFactory;
     }
 
+    /**
+     * Returns the key under which the container will be stored.
+     *
+     * @return the containerKey The container key.
+     * @since 2.1.0
+     */
+    public String getContainerKey() {
+        return containerKey;
+    }
+
+    /**
+     * Sets the key under which the container will be stored.
+     *
+     * @param containerKey the containerKey The container key.
+     * @since 2.1.0
+     */
+    public void setContainerKey(String containerKey) {
+        this.containerKey = containerKey;
+    }
 
     /** [EMAIL PROTECTED] */
     public void processNestedTag(PutAttributeTag nestedTag) {
@@ -99,6 +123,7 @@
     public void release() {
         super.release();
         containerFactory = null;
+        containerKey = null;
         initParameters = null;
     }
 
@@ -112,10 +137,11 @@
     // TODO Add a MutableContainer so that this can be done?
     public int doEndTag() {
         TilesContainer container =
-            TilesAccess.getContainer(pageContext.getServletContext());
+            TilesAccess.getContainer(pageContext.getServletContext(), 
containerKey);
 
         if (container != null) {
-            LOG.warn("TilesContainer allready instantiated for this context. 
Ignoring request to define.");
+            LOG.warn("TilesContainer allready instantiated for this context 
under key '"
+                    + containerKey + "'. Ignoring request to define.");
             return SKIP_BODY;
         }
 
@@ -139,7 +165,7 @@
 
         TilesContainer mutableContainer = AbstractTilesContainerFactory
                 .getTilesContainerFactory(context).createContainer(context);
-        TilesAccess.setContainer(context, mutableContainer);
+        TilesAccess.setContainer(context, mutableContainer, containerKey);
 
         return EVAL_PAGE;
     }

Modified: 
tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld?rev=658802&r1=658801&r2=658802&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld 
(original)
+++ 
tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld 
Wed May 21 11:30:50 2008
@@ -813,6 +813,13 @@
          <rtexprvalue>true</rtexprvalue>
          <description> <![CDATA[ <p>Container Factory implementation used to 
instantiate the container.</p> ]]> </description>
       </attribute>
+      <attribute>
+         <name>containerKey</name>
+         <required>false</required>
+         <rtexprvalue>true</rtexprvalue>
+         <description> <![CDATA[ <p>The key under which the container will be 
stored.</p>
+         <p>If not defined, the container will be the default container</p> 
]]> </description>
+      </attribute>
    </tag>
 
     <tag>
@@ -824,6 +831,13 @@
             <p><strong>Destroy the TilesContainer.</strong></p>
             ]]>
         </description>
+        <attribute>
+            <name>containerKey</name>
+            <required>false</required>
+            <rtexprvalue>true</rtexprvalue>
+            <description> <![CDATA[ <p>The key of the container to destroy.</p>
+            <p>If not defined, the destroyed container will be the default 
container</p> ]]> </description>
+        </attribute>
     </tag>
 </taglib>
 


Reply via email to