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>