You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2008/11/03 13:43:46 UTC
svn commit: r710046 - in /tiles/framework/trunk:
tiles-core/src/main/java/org/apache/tiles/context/
tiles-core/src/test/java/org/apache/tiles/context/
tiles-core/src/test/java/org/apache/tiles/mock/
tiles-jsp/src/main/java/org/apache/tiles/jsp/context/...
Author: apetrelli
Date: Mon Nov 3 04:43:44 2008
New Revision: 710046
URL: http://svn.apache.org/viewvc?rev=710046&view=rev
Log:
TILES-329
TilesContextFactory now is re-evaluated by passing the parent TilesContextFactory to all children, in particular from a ChainedTilesContextFactory to all elements of the chain.
Modified JspTilesContextFactory accordingly.
Modified:
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ChainedTilesContextFactory.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/ChainedTilesContextFactoryTest.java
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/mock/RepeaterTilesContextFactory.java
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesContextFactory.java
tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ChainedTilesContextFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ChainedTilesContextFactory.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ChainedTilesContextFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ChainedTilesContextFactory.java Mon Nov 3 04:43:44 2008
@@ -24,6 +24,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
import java.util.ArrayList;
import java.util.Iterator;
@@ -70,6 +71,7 @@
*/
public void setFactories(List<TilesContextFactory> factories) {
this.factories = factories;
+ injectParentTilesContextFactory();
}
/** {@inheritDoc} */
@@ -116,6 +118,7 @@
+ " default constructor", e);
}
}
+ injectParentTilesContextFactory();
}
/** {@inheritDoc} */
@@ -153,4 +156,15 @@
return retValue;
}
+
+ /**
+ * Injects this context factory to all chained context factories.
+ */
+ protected void injectParentTilesContextFactory() {
+ for (TilesContextFactory factory : factories) {
+ if (factory instanceof TilesContextFactoryAware) {
+ ((TilesContextFactoryAware) factory).setContextFactory(this);
+ }
+ }
+ }
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java Mon Nov 3 04:43:44 2008
@@ -49,6 +49,16 @@
this.context = context;
}
+ /**
+ * Returns the wrapped Tiles request.
+ *
+ * @return The wrapped Tiles request.
+ * @since 2.1.1
+ */
+ public TilesRequestContext getWrappedRequest() {
+ return context;
+ }
+
/** {@inheritDoc} */
public Map<String, String> getHeader() {
return context.getHeader();
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/ChainedTilesContextFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/ChainedTilesContextFactoryTest.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/ChainedTilesContextFactoryTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/ChainedTilesContextFactoryTest.java Mon Nov 3 04:43:44 2008
@@ -20,7 +20,9 @@
*/
package org.apache.tiles.context;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
@@ -55,10 +57,8 @@
/**
* Tests the initialization method.
- *
- * @throws Exception If something goes wrong during testing.
*/
- public void testInit() throws Exception {
+ public void testInit() {
Map<String, String> config = new HashMap<String, String>();
config.put(ChainedTilesContextFactory.FACTORY_CLASS_NAMES,
"this.is.not.a.class.Name,"
@@ -66,6 +66,21 @@
ChainedTilesContextFactory factory = new ChainedTilesContextFactory();
factory.init(config);
TilesRequestContext context = factory.createRequestContext(appContext, requestContext);
- assertNotNull("The request context cannot be null", context);
+ assertNotNull("The request context is not correct",
+ context == requestContext);
+ }
+
+ /**
+ * Tests {@link ChainedTilesContextFactory#setFactories(java.util.List)}.
+ */
+ public void testSetFactories() {
+ ChainedTilesContextFactory factory = new ChainedTilesContextFactory();
+ List<TilesContextFactory> factories = new ArrayList<TilesContextFactory>();
+ RepeaterTilesContextFactory repFactory = new RepeaterTilesContextFactory();
+ factories.add(repFactory);
+ factory.setFactories(factories);
+ TilesRequestContext context = factory.createRequestContext(appContext, requestContext);
+ assertNotNull("The request context is not correct",
+ context == requestContext);
}
}
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/mock/RepeaterTilesContextFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/mock/RepeaterTilesContextFactory.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/mock/RepeaterTilesContextFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/mock/RepeaterTilesContextFactory.java Mon Nov 3 04:43:44 2008
@@ -26,6 +26,7 @@
import java.util.Set;
import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
import org.apache.tiles.context.TilesContextFactory;
import org.apache.tiles.context.TilesRequestContext;
@@ -36,7 +37,8 @@
*
* @version $Rev$ $Date$
*/
-public class RepeaterTilesContextFactory implements TilesContextFactory {
+public class RepeaterTilesContextFactory implements TilesContextFactory,
+ TilesContextFactoryAware {
/**
* The application context.
@@ -44,6 +46,11 @@
private TilesApplicationContext applicationContext;
/**
+ * The parent context factory.
+ */
+ private TilesContextFactory parent;
+
+ /**
* Constructor.
*/
public RepeaterTilesContextFactory() {
@@ -60,6 +67,11 @@
}
/** {@inheritDoc} */
+ public void setContextFactory(TilesContextFactory contextFactory) {
+ this.parent = contextFactory;
+ }
+
+ /** {@inheritDoc} */
public TilesApplicationContext createApplicationContext(Object context) {
if (context instanceof TilesApplicationContext) {
return (TilesApplicationContext) context;
@@ -71,6 +83,9 @@
/** {@inheritDoc} */
public TilesRequestContext createRequestContext(
TilesApplicationContext context, Object... requestItems) {
+ if (parent == null) {
+ throw new RuntimeException("The parent is null");
+ }
TilesRequestContext retValue = null;
if (requestItems.length > 0) {
retValue = (TilesRequestContext) requestItems[0];
Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesContextFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesContextFactory.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesContextFactory.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesContextFactory.java Mon Nov 3 04:43:44 2008
@@ -22,11 +22,17 @@
package org.apache.tiles.jsp.context;
import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
import org.apache.tiles.context.TilesContextFactory;
import org.apache.tiles.context.TilesRequestContext;
import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
+import org.apache.tiles.servlet.context.ServletTilesRequestContext;
import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
import java.util.Map;
@@ -35,13 +41,24 @@
*
* @version $Rev$ $Date$
*/
-public class JspTilesContextFactory implements TilesContextFactory {
+public class JspTilesContextFactory implements TilesContextFactory, TilesContextFactoryAware {
+
+ /**
+ * Parent Tiles context factory.
+ */
+ private TilesContextFactory parent;
/** {@inheritDoc} */
public void init(Map<String, String> configParameters) {
}
/** {@inheritDoc} */
+ public void setContextFactory(TilesContextFactory contextFactory) {
+ parent = contextFactory;
+ }
+
+ /** {@inheritDoc} */
+ @Deprecated
public TilesApplicationContext createApplicationContext(Object context) {
if (context instanceof ServletContext) {
ServletContext servletContext = (ServletContext) context;
@@ -55,7 +72,19 @@
public TilesRequestContext createRequestContext(TilesApplicationContext context,
Object... requestItems) {
if (requestItems.length == 1 && requestItems[0] instanceof PageContext) {
- return new JspTilesRequestContext(context, (PageContext) requestItems[0]);
+ PageContext pageContext = (PageContext) requestItems[0];
+ ServletRequest request = pageContext.getRequest();
+ ServletResponse response = pageContext.getResponse();
+ TilesRequestContext enclosedRequest;
+ if (parent != null) {
+ enclosedRequest = parent.createRequestContext(context, request,
+ response);
+ } else {
+ enclosedRequest = new ServletTilesRequestContext(context,
+ (HttpServletRequest) request,
+ (HttpServletResponse) response);
+ }
+ return new JspTilesRequestContext(enclosedRequest, pageContext);
}
return null;
Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java Mon Nov 3 04:43:44 2008
@@ -20,9 +20,10 @@
*/
package org.apache.tiles.jsp.context;
-import org.apache.tiles.TilesApplicationContext;
import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextWrapper;
import org.apache.tiles.servlet.context.ServletTilesRequestContext;
+import org.apache.tiles.servlet.context.ServletUtil;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -37,7 +38,7 @@
*
* @version $Rev$ $Date$
*/
-public class JspTilesRequestContext extends ServletTilesRequestContext
+public class JspTilesRequestContext extends TilesRequestContextWrapper
implements TilesRequestContext {
/**
@@ -53,14 +54,12 @@
/**
* Constructor.
*
- * @param applicationContext The Tiles application context.
+ * @param enclosedRequest The request that is wrapped here.
* @param pageContext The page context to use.
*/
- public JspTilesRequestContext(TilesApplicationContext applicationContext,
+ public JspTilesRequestContext(TilesRequestContext enclosedRequest,
PageContext pageContext) {
- super(applicationContext,
- (HttpServletRequest) pageContext.getRequest(),
- (HttpServletResponse) pageContext.getResponse());
+ super(enclosedRequest);
this.pageContext = pageContext;
}
@@ -70,14 +69,13 @@
* @param context The servlet context to use.
* @param pageContext The page context to use.
* @deprecated Use
- * {@link #JspTilesRequestContext(TilesApplicationContext, PageContext)}.
+ * {@link #JspTilesRequestContext(TilesRequestContext, PageContext)}.
*/
@Deprecated
public JspTilesRequestContext(ServletContext context, PageContext pageContext) {
- super(context,
- (HttpServletRequest) pageContext.getRequest(),
- (HttpServletResponse) pageContext.getResponse());
- this.pageContext = pageContext;
+ this(new ServletTilesRequestContext(context,
+ (HttpServletRequest) pageContext.getRequest(),
+ (HttpServletResponse) pageContext.getResponse()), pageContext);
}
/**
@@ -97,7 +95,7 @@
try {
pageContext.include(path, false);
} catch (ServletException e) {
- throw wrapServletException(e, "JSPException including path '"
+ throw ServletUtil.wrapServletException(e, "JSPException including path '"
+ path + "'.");
}
}
Modified: tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java?rev=710046&r1=710045&r2=710046&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java (original)
+++ tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java Mon Nov 3 04:43:44 2008
@@ -33,7 +33,6 @@
import org.apache.tiles.TilesApplicationContext;
import org.apache.tiles.context.TilesApplicationContextWrapper;
import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.util.TilesIOException;
/**
* Servlet-based implementation of the TilesApplicationContext interface.
@@ -223,7 +222,7 @@
try {
rd.forward(request, response);
} catch (ServletException ex) {
- throw wrapServletException(ex, "ServletException including path '"
+ throw ServletUtil.wrapServletException(ex, "ServletException including path '"
+ path + "'.");
}
}
@@ -242,7 +241,7 @@
try {
rd.include(request, response);
} catch (ServletException ex) {
- throw wrapServletException(ex, "ServletException including path '"
+ throw ServletUtil.wrapServletException(ex, "ServletException including path '"
+ path + "'.");
}
}
@@ -306,24 +305,20 @@
}
/**
- * Wraps a ServletException to create an IOException with the root cause if present.
+ * Wraps a ServletException to create an IOException with the root cause if
+ * present.
*
* @param ex The exception to wrap.
* @param message The message of the exception.
* @return The wrapped exception.
* @since 2.0.6
+ * @deprecated Use
+ * {@link ServletUtil#wrapServletException(ServletException,String)}
+ * instead.
*/
- protected IOException wrapServletException(ServletException ex, String message) {
- IOException retValue;
- Throwable rootCause = ex.getRootCause();
- if (rootCause != null) {
- // Replace the ServletException with an IOException, with the root
- // cause of the first as the cause of the latter.
- retValue = new TilesIOException(message, rootCause);
- } else {
- retValue = new TilesIOException(message, ex);
- }
-
- return retValue;
+ @Deprecated
+ protected IOException wrapServletException(ServletException ex,
+ String message) {
+ return ServletUtil.wrapServletException(ex, message);
}
}
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=710046&r1=710045&r2=710046&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 Mon Nov 3 04:43:44 2008
@@ -21,13 +21,17 @@
package org.apache.tiles.servlet.context;
+import java.io.IOException;
+
import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.impl.NoSuchContainerException;
+import org.apache.tiles.util.TilesIOException;
/**
@@ -141,4 +145,27 @@
return container;
}
+
+ /**
+ * Wraps a ServletException to create an IOException with the root cause if present.
+ *
+ * @param ex The exception to wrap.
+ * @param message The message of the exception.
+ * @return The wrapped exception.
+ * @since 2.1.1
+ */
+ public static IOException wrapServletException(ServletException ex,
+ String message) {
+ IOException retValue;
+ Throwable rootCause = ex.getRootCause();
+ if (rootCause != null) {
+ // Replace the ServletException with an IOException, with the root
+ // cause of the first as the cause of the latter.
+ retValue = new TilesIOException(message, rootCause);
+ } else {
+ retValue = new TilesIOException(message, ex);
+ }
+
+ return retValue;
+ }
}