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 2009/11/14 14:40:33 UTC

svn commit: r836174 [1/5] - in /tiles/sandbox/trunk: tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/ tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/ tiles-request/tiles-request-veloc...

Author: apetrelli
Date: Sat Nov 14 13:40:31 2009
New Revision: 836174

URL: http://svn.apache.org/viewvc?rev=836174&view=rev
Log:
TILESSB-13
Moved request creation outside of the Tiles container.

Modified:
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java
    tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
    tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java
    tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/GetAsStringFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/ImportAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/PutAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/PutListAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/GetAsStringTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/ImportAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/UseAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
    tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/AttributeResolver.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/DefaultAttributeResolver.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/ImportAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/PutAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/PutListAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/DefaultAttributeResolverTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/ImportAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/PutAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/PutListAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/java/org/apache/tiles/test/portlet/TestPortlet.java
    tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/java/org/apache/tiles/test/servlet/SelectLocaleServlet.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/GetAsStringVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/ImportAttributeVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertAttributeVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertDefinitionVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertTemplateVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/PutAttributeVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/PutListAttributeVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/VelocityStyleTilesTool.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/GetAsStringVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/ImportAttributeVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertAttributeVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertDefinitionVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertTemplateVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/PutAttributeVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/PutListAttributeVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/Tiles2ToolTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/VelocityStyleTilesToolTest.java

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerTilesRequestContext.java Sat Nov 14 13:40:31 2009
@@ -26,10 +26,16 @@
 import java.io.Writer;
 import java.util.Locale;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.servlet.ServletTilesRequestContext;
 import org.apache.tiles.request.util.TilesRequestContextWrapper;
 
 import freemarker.core.Environment;
+import freemarker.ext.servlet.HttpRequestHashModel;
 
 /**
  * The FreeMarker-specific request context.
@@ -37,29 +43,44 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class FreeMarkerTilesRequestContext extends TilesRequestContextWrapper implements Request {
+public class FreeMarkerTilesRequestContext extends TilesRequestContextWrapper
+		implements Request {
+
+	/**
+	 * The FreeMarker current environment.
+	 */
+	private Environment env;
 
-    /**
-     * The FreeMarker current environment.
-     */
-    private Environment env;
-
-    /**
-     * The request objects.
-     */
-    private transient Object[] requestObjects;
-
-    /**
-     * Constructor.
-     *
-     * @param enclosedRequest The request that exposes non-FreeMarker specific properties
-     * @param env The FreeMarker environment.
-     */
-    public FreeMarkerTilesRequestContext(
-            Request enclosedRequest, Environment env) {
-        super(enclosedRequest);
-        this.env = env;
-    }
+	/**
+	 * The request objects.
+	 */
+	private transient Object[] requestObjects;
+
+	public static FreeMarkerTilesRequestContext createServletFreemarkerRequest(
+			ApplicationContext applicationContext, Environment env) {
+		HttpRequestHashModel requestModel = FreeMarkerRequestUtil
+				.getRequestHashModel(env);
+		HttpServletRequest request = requestModel.getRequest();
+		HttpServletResponse response = requestModel.getResponse();
+		Request enclosedRequest = new ServletTilesRequestContext(
+				applicationContext, (HttpServletRequest) request,
+				(HttpServletResponse) response);
+		return new FreeMarkerTilesRequestContext(enclosedRequest, env);
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param enclosedRequest
+	 *            The request that exposes non-FreeMarker specific properties
+	 * @param env
+	 *            The FreeMarker environment.
+	 */
+	public FreeMarkerTilesRequestContext(Request enclosedRequest,
+			Environment env) {
+		super(enclosedRequest);
+		this.env = env;
+	}
 
 	/**
 	 * Returns the environment object.
@@ -68,45 +89,45 @@
 	 * @since 3.0.0
 	 */
 	public Environment getEnvironment() {
-        return env;
-    }
+		return env;
+	}
 
-    /** {@inheritDoc} */
-    @Override
+	/** {@inheritDoc} */
+	@Override
 	public Locale getRequestLocale() {
-        return env.getLocale();
-    }
+		return env.getLocale();
+	}
 
-    /** {@inheritDoc} */
-    @Override
+	/** {@inheritDoc} */
+	@Override
 	public void dispatch(String path) throws IOException {
-        include(path);
-    }
+		include(path);
+	}
 
-    /** {@inheritDoc} */
-    @Override
-    public PrintWriter getPrintWriter() throws IOException {
-        Writer writer = env.getOut();
-        if (writer instanceof PrintWriter) {
-            return (PrintWriter) writer;
-        } else {
-            return new PrintWriter(writer);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public Writer getWriter() throws IOException {
-        return env.getOut();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public Object[] getRequestObjects() {
-        if (requestObjects == null) {
-            requestObjects = new Object[1];
-            requestObjects[0] = env;
-        }
-        return requestObjects;
-    }
+	/** {@inheritDoc} */
+	@Override
+	public PrintWriter getPrintWriter() throws IOException {
+		Writer writer = env.getOut();
+		if (writer instanceof PrintWriter) {
+			return (PrintWriter) writer;
+		} else {
+			return new PrintWriter(writer);
+		}
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Writer getWriter() throws IOException {
+		return env.getOut();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object[] getRequestObjects() {
+		if (requestObjects == null) {
+			requestObjects = new Object[1];
+			requestObjects[0] = env;
+		}
+		return requestObjects;
+	}
 }

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java Sat Nov 14 13:40:31 2009
@@ -25,9 +25,13 @@
 import java.io.Writer;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.PageContext;
 
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.servlet.ServletTilesRequestContext;
 import org.apache.tiles.request.servlet.ServletUtil;
 import org.apache.tiles.request.util.TilesRequestContextWrapper;
 
@@ -50,6 +54,13 @@
      */
     private Object[] requestObjects;
 
+    public static JspTilesRequestContext createServletJspRequest(ApplicationContext applicationContext, PageContext pageContext) {
+		return new JspTilesRequestContext(new ServletTilesRequestContext(
+				applicationContext, (HttpServletRequest) pageContext
+						.getRequest(), (HttpServletResponse) pageContext
+						.getResponse()), pageContext);
+    }
+
     /**
      * Constructor.
      *

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java Sat Nov 14 13:40:31 2009
@@ -30,7 +30,9 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.servlet.ServletTilesRequestContext;
 import org.apache.tiles.request.servlet.ServletUtil;
 import org.apache.tiles.request.servlet.ExternalWriterHttpServletResponse;
 import org.apache.tiles.request.util.TilesRequestContextWrapper;
@@ -148,4 +150,14 @@
         }
         return requestObjects;
     }
+
+	public static Request createVelocityRequest(ApplicationContext applicationContext,
+			HttpServletRequest request, HttpServletResponse response,
+			Context velocityContext, Writer writer) {
+		Request servletRequest = new ServletTilesRequestContext(
+				applicationContext, request, response);
+		Request velocityRequest = new VelocityTilesRequestContext(
+				servletRequest, velocityContext, writer);
+		return velocityRequest;
+	}
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java Sat Nov 14 13:40:31 2009
@@ -23,6 +23,7 @@
 import java.io.IOException;
 
 import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.Request;
 
 /**
  * An encapsulation of the tiles framework.  This interface is
@@ -44,84 +45,82 @@
 
     /**
      * Retrive the attribute context of the current request.
-     * @param requestItems the current request objects.
+     * @param request TODO
      * @return map of the attributes in the current attribute context.
      */
-    AttributeContext getAttributeContext(Object... requestItems);
+    AttributeContext getAttributeContext(Request request);
 
     /**
      * Starts a new context, where attribute values are stored independently
      * from others.<br>
      * When the use of the contexts is finished, call
-     * {@link TilesContainer#endContext(Object...)}
+     * {@link TilesContainer#endContext(Request)}
+     * @param request TODO
      *
-     * @param requestItems the current request objects.
      * @return The newly created context.
      */
-    AttributeContext startContext(Object... requestItems);
+    AttributeContext startContext(Request request);
 
     /**
      * Ends a context, where attribute values are stored independently
      * from others.<br>
      * It must be called after a
-     * {@link TilesContainer#startContext(Object...)} call.
-     *
-     * @param requestItems the current request objects.
+     * {@link TilesContainer#startContext(Request)} call.
+     * @param request TODO
      */
-    void endContext(Object... requestItems);
+    void endContext(Request request);
 
     /**
      * Renders the current context, as it is.
+     * @param request TODO
      *
-     * @param requestItems the current request objects.
      * @since 2.1.0
      */
-    void renderContext(Object... requestItems);
+    void renderContext(Request request);
 
     /**
      * Executes a preparer.
      *
      * @param preparer The name of the preparer to execute.
-     * @param requestItems the current request objects.
+     * @param request TODO
      */
-    void prepare(String preparer, Object... requestItems);
+    void prepare(String preparer, Request request);
 
     /**
      * Render the given tiles request.
      *
      * @param definition the current definition.
-     * @param requestItems the current request objects.
+     * @param request TODO
      */
-    void render(String definition, Object... requestItems);
+    void render(String definition, Request request);
 
     /**
      * Render the given Attribute.
      *
      * @param attribute The attribute to render.
-     * @param requestItems the current request objects.
+     * @param request TODO
      * @throws IOException If something goes wrong during writing to the output.
      * @since 2.1.2
      */
-    void render(Attribute attribute, Object... requestItems)
+    void render(Attribute attribute, Request request)
         throws IOException;
 
     /**
      * Evaluates the given attribute.
      *
      * @param attribute The attribute to evaluate.
-     * @param requestItems the current request objects.
+     * @param request TODO
      * @return The evaluated object.
      * @since 2.1.0
      */
-    Object evaluate(Attribute attribute, Object... requestItems);
+    Object evaluate(Attribute attribute, Request request);
 
     /**
      * Determine whether or not the definition exists.
      *
      * @param definition the name of the definition.
-     * @param requestItems the current request objects.
-     *
+     * @param request TODO
      * @return true if the definition is found.
      */
-    boolean isValidDefinition(String definition, Object... requestItems);
+    boolean isValidDefinition(String definition, Request request);
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Sat Nov 14 13:40:31 2009
@@ -106,20 +106,24 @@
     private boolean initialized = false;
 
     /** {@inheritDoc} */
-    public AttributeContext startContext(Object... requestItems) {
-        Request tilesContext = getRequestContext(requestItems);
-        return startContext(tilesContext);
+    public AttributeContext startContext(Request request) {
+        AttributeContext context = new BasicAttributeContext();
+		ArrayStack<AttributeContext>  stack = getContextStack(request);
+		if (!stack.isEmpty()) {
+		    AttributeContext parent = stack.peek();
+		    context.inheritCascadedAttributes(parent);
+		}
+		stack.push(context);
+		return context;
     }
 
     /** {@inheritDoc} */
-    public void endContext(Object... requestItems) {
-        Request tilesContext = getRequestContext(requestItems);
-        endContext(tilesContext);
+    public void endContext(Request request) {
+        popContext(request);
     }
 
     /** {@inheritDoc} */
-    public void renderContext(Object... requestItems) {
-        Request request = getRequestContext(requestItems);
+    public void renderContext(Request request) {
         AttributeContext attributeContext = getAttributeContext(request);
 
         render(request, attributeContext);
@@ -144,9 +148,13 @@
     }
 
     /** {@inheritDoc} */
-    public AttributeContext getAttributeContext(Object... requestItems) {
-        Request tilesContext = getRequestContext(requestItems);
-        return getAttributeContext(tilesContext);
+    public AttributeContext getAttributeContext(Request request) {
+        AttributeContext context = getContext(request);
+		if (context == null) {
+		    context = new BasicAttributeContext();
+		    pushContext(context, request);
+		}
+		return context;
 
     }
 
@@ -227,43 +235,55 @@
     }
 
     /** {@inheritDoc} */
-    public void prepare(String preparer, Object... requestItems) {
-        Request requestContext = getRequestContextFactory().createRequestContext(
-            getApplicationContext(),
-            requestItems
-        );
-        prepare(requestContext, preparer, false);
+    public void prepare(String preparer, Request request) {
+        prepare(request, preparer, false);
     }
 
     /** {@inheritDoc} */
-    public void render(String definitionName, Object... requestItems) {
-        Request requestContext = getRequestContextFactory().createRequestContext(
-            getApplicationContext(),
-            requestItems
-        );
-        render(requestContext, definitionName);
+    public void render(String definitionName, Request request) {
+        if (log.isDebugEnabled()) {
+		    log.debug("Render request recieved for definition '" + definitionName + "'");
+		}
+
+		Definition definition = getDefinition(definitionName, request);
+
+		if (definition == null) {
+		    if (log.isWarnEnabled()) {
+		        String message = "Unable to find the definition '" + definitionName + "'";
+		        log.warn(message);
+		    }
+		    throw new NoSuchDefinitionException(definitionName);
+		}
+		render(request, definition);
     }
 
     /** {@inheritDoc} */
-    public void render(Attribute attr, Object... requestItems)
+    public void render(Attribute attr, Request request)
         throws IOException {
-        Request requestContext = getRequestContextFactory()
-                .createRequestContext(getApplicationContext(), requestItems);
-        render(attr, requestContext);
+        if (attr == null) {
+		    throw new CannotRenderException("Cannot render a null attribute");
+		}
+
+		AttributeRenderer renderer = rendererFactory.getRenderer(attr
+		        .getRenderer());
+		if (renderer == null) {
+		    throw new CannotRenderException(
+		            "Cannot render an attribute with renderer name "
+		                    + attr.getRenderer());
+		}
+		renderer.render(attr, request);
     }
 
     /** {@inheritDoc} */
-    public Object evaluate(Attribute attribute, Object... requestItems) {
-        Request request = getRequestContextFactory()
-                .createRequestContext(context, requestItems);
+    public Object evaluate(Attribute attribute, Request request) {
         AttributeEvaluator evaluator = attributeEvaluatorFactory
                 .getAttributeEvaluator(attribute);
         return evaluator.evaluate(attribute, request);
     }
 
     /** {@inheritDoc} */
-    public boolean isValidDefinition(String definitionName, Object... requestItems) {
-        return isValidDefinition(getRequestContext(requestItems), definitionName);
+    public boolean isValidDefinition(String definitionName, Request request) {
+        return isValidDefinition(request, definitionName);
     }
 
     /**
@@ -359,58 +379,6 @@
     }
 
     /**
-     * Returns the current attribute context.
-     *
-     * @param tilesContext The request context to use.
-     * @return The current attribute context.
-     */
-    private AttributeContext getAttributeContext(Request tilesContext) {
-        AttributeContext context = getContext(tilesContext);
-        if (context == null) {
-            context = new BasicAttributeContext();
-            pushContext(context, tilesContext);
-        }
-        return context;
-    }
-
-    /**
-     * Creates a Tiles request context from request items.
-     *
-     * @param requestItems The request items.
-     * @return The created Tiles request context.
-     */
-    private Request getRequestContext(Object... requestItems) {
-        return getRequestContextFactory().createRequestContext(
-                getApplicationContext(), requestItems);
-    }
-
-    /**
-     * Starts an attribute context inside the container.
-     *
-     * @param tilesContext The request context to use.
-     * @return The newly created attribute context.
-     */
-    private AttributeContext startContext(Request tilesContext) {
-        AttributeContext context = new BasicAttributeContext();
-        ArrayStack<AttributeContext>  stack = getContextStack(tilesContext);
-        if (!stack.isEmpty()) {
-            AttributeContext parent = stack.peek();
-            context.inheritCascadedAttributes(parent);
-        }
-        stack.push(context);
-        return context;
-    }
-
-    /**
-     * Releases and removes a previously created attribute context.
-     *
-     * @param tilesContext The request context to use.
-     */
-    private void endContext(Request tilesContext) {
-        popContext(tilesContext);
-    }
-
-    /**
      * Execute a preparer.
      *
      * @param context The request context.
@@ -490,29 +458,6 @@
     }
 
     /**
-     * Renders an attribute.
-     *
-     * @param attr The attribute to render.
-     * @param requestContext The Tiles request context.
-     * @throws IOException If something goes wrong during rendering.
-     */
-    private void render(Attribute attr, Request requestContext)
-            throws IOException {
-        if (attr == null) {
-            throw new CannotRenderException("Cannot render a null attribute");
-        }
-
-        AttributeRenderer renderer = rendererFactory.getRenderer(attr
-                .getRenderer());
-        if (renderer == null) {
-            throw new CannotRenderException(
-                    "Cannot render an attribute with renderer name "
-                            + attr.getRenderer());
-        }
-        renderer.render(attr, requestContext);
-    }
-
-    /**
      * Renders the specified attribute context.
      *
      * @param request The request context.

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java Sat Nov 14 13:40:31 2009
@@ -53,15 +53,14 @@
     public void write(Object value, Attribute attribute,
             Request request)
             throws IOException {
-        container.render(value.toString(), request.getRequestObjects());
+        container.render(value.toString(), request);
     }
 
     /** {@inheritDoc} */
     public boolean isRenderable(Object value, Attribute attribute,
             Request request) {
         if (value instanceof String) {
-            return container.isValidDefinition((String) value, request
-                    .getRequestObjects());
+            return container.isValidDefinition((String) value, request);
         }
         return false;
     }

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java Sat Nov 14 13:40:31 2009
@@ -24,6 +24,7 @@
 
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Expression;
+import org.apache.tiles.request.Request;
 
 /**
  * Tests {@link DirectAttributeEvaluator}.
@@ -45,7 +46,7 @@
 
     /**
      * Tests
-     * {@link DirectAttributeEvaluator#evaluate(Attribute, org.apache.tiles.context.TilesRequestContext)}.
+     * {@link DirectAttributeEvaluator#evaluate(Attribute, Request)}.
      */
     public void testEvaluate() {
         String expression = "This is an expression";
@@ -63,7 +64,7 @@
 
     /**
      * Tests
-     * {@link DirectAttributeEvaluator#evaluate(String, org.apache.tiles.context.TilesRequestContext)}.
+     * {@link DirectAttributeEvaluator#evaluate(String, Request)}.
      */
     public void testEvaluateString() {
         String expression = "This is an expression";

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java Sat Nov 14 13:40:31 2009
@@ -145,7 +145,7 @@
     }
 
     /**
-     * Tests {@link BasicTilesContainer#evaluate(Attribute, Object...)}.
+     * Tests {@link BasicTilesContainer#evaluate(Attribute, Request)}.
      */
     public void testEvaluate() {
         Request request = EasyMock.createMock(Request.class);

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java Sat Nov 14 13:40:31 2009
@@ -32,7 +32,6 @@
 import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.TilesRequestContextFactory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -67,20 +66,14 @@
         Attribute attribute = new Attribute("my.definition", (Expression) null,
                 null, "definition");
         ApplicationContext applicationContext = createMock(ApplicationContext.class);
-        TilesRequestContextFactory contextFactory = createMock(TilesRequestContextFactory.class);
         TilesContainer container = createMock(TilesContainer.class);
         Request requestContext = createMock(Request.class);
-        Object[] requestObjects = new Object[0];
-        expect(requestContext.getRequestObjects()).andReturn(requestObjects);
-        container.render("my.definition");
-        replay(applicationContext, contextFactory, requestContext,
-                container);
+        container.render("my.definition", requestContext);
+		replay(applicationContext, requestContext, container);
         renderer.setApplicationContext(applicationContext);
-        renderer.setRequestContextFactory(contextFactory);
         renderer.setContainer(container);
         renderer.render(attribute, requestContext);
-        verify(applicationContext, contextFactory, requestContext,
-                container);
+		verify(applicationContext, requestContext, container);
     }
 
     /**
@@ -93,19 +86,13 @@
         Attribute attribute = new Attribute("my.definition", (Expression) null,
                 null, "definition");
         ApplicationContext applicationContext = createMock(ApplicationContext.class);
-        TilesRequestContextFactory contextFactory = createMock(TilesRequestContextFactory.class);
         TilesContainer container = createMock(TilesContainer.class);
         Request requestContext = createMock(Request.class);
-        Object[] requestObjects = new Object[0];
-        expect(requestContext.getRequestObjects()).andReturn(requestObjects);
-        expect(container.isValidDefinition("my.definition", requestObjects)).andReturn(Boolean.TRUE);
-        replay(applicationContext, contextFactory, requestContext,
-                container);
+        expect(container.isValidDefinition("my.definition", requestContext)).andReturn(Boolean.TRUE);
+		replay(applicationContext, requestContext, container);
         renderer.setApplicationContext(applicationContext);
-        renderer.setRequestContextFactory(contextFactory);
         renderer.setContainer(container);
         assertTrue(renderer.isRenderable("my.definition", attribute, requestContext));
-        verify(applicationContext, contextFactory, requestContext,
-                container);
+		verify(applicationContext, requestContext, container);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java Sat Nov 14 13:40:31 2009
@@ -26,7 +26,9 @@
 
 import org.apache.tiles.Attribute;
 import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.GetAsStringModel;
 
 import freemarker.core.Environment;
@@ -40,9 +42,9 @@
  * parameters, see
  * {@link GetAsStringModel
  * #start(java.util.Stack, TilesContainer, boolean, String, String, Object, String, String, String,
- * Attribute, Object...)}
+ * Attribute, Request)}
  * and
- * {@link GetAsStringModel#end(java.util.Stack, TilesContainer, java.io.Writer, boolean, Object...)}
+ * {@link GetAsStringModel#end(java.util.Stack, TilesContainer, java.io.Writer, boolean, Request)}
  * .
  *
  * @version $Rev$ $Date$
@@ -71,6 +73,9 @@
             TemplateDirectiveBody body) throws TemplateException, IOException {
         Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
         TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
         model.start(
                 FreeMarkerUtil.getComposeStack(env),
                 container,
@@ -83,10 +88,10 @@
                         .getAsString(parms.get("defaultValueType")),
                 FreeMarkerUtil.getAsString(parms.get("name")),
                 (Attribute) FreeMarkerUtil.getAsObject(parms
-                        .get("value")), env);
+                        .get("value")), request);
         FreeMarkerUtil.evaluateBody(body);
         model.end(FreeMarkerUtil.getComposeStack(env), container, env.getOut(),
-                FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), env);
+                FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), request);
     }
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java Sat Nov 14 13:40:31 2009
@@ -25,7 +25,9 @@
 import java.util.Map;
 
 import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.ImportAttributeModel;
 
 import freemarker.core.Environment;
@@ -37,7 +39,7 @@
 /**
  * Wraps {@link ImportAttributeModel} to be used in FreeMarker. For the list of
  * parameters, see
- * {@link ImportAttributeModel#getImportedAttributes(TilesContainer, String, String, boolean, Object...)}
+ * {@link ImportAttributeModel#getImportedAttributes(TilesContainer, String, String, boolean, Request)}
  * .
  *
  * @version $Rev$ $Date$
@@ -45,36 +47,40 @@
  */
 public class ImportAttributeFMModel implements TemplateDirectiveModel {
 
-    /**
-     * The template model.
-     */
-    private ImportAttributeModel model;
-
-    /**
-     * Constructor.
-     *
-     * @param model The template model.
-     * @since 2.2.0
-     */
-    public ImportAttributeFMModel(ImportAttributeModel model) {
-        this.model = model;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
-        TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
-        Map<String, Object> attributes = model.getImportedAttributes(container,
-                FreeMarkerUtil.getAsString(parms.get("name")), FreeMarkerUtil
-                        .getAsString(parms.get("toName")), FreeMarkerUtil
-                        .getAsBoolean(parms.get("ignore"), false), env);
-        String scope = FreeMarkerUtil.getAsString(parms.get("scope"));
-        for (Map.Entry<String, Object> entry : attributes.entrySet()) {
-            FreeMarkerUtil.setAttribute(env, entry.getKey(), entry.getValue(),
-                    scope);
-        }
-    }
+	/**
+	 * The template model.
+	 */
+	private ImportAttributeModel model;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param model
+	 *            The template model.
+	 * @since 2.2.0
+	 */
+	public ImportAttributeFMModel(ImportAttributeModel model) {
+		this.model = model;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	public void execute(Environment env, Map params, TemplateModel[] loopVars,
+			TemplateDirectiveBody body) throws TemplateException, IOException {
+		Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
+		TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
+		Map<String, Object> attributes = model.getImportedAttributes(container,
+				FreeMarkerUtil.getAsString(parms.get("name")), FreeMarkerUtil
+						.getAsString(parms.get("toName")), FreeMarkerUtil
+						.getAsBoolean(parms.get("ignore"), false), request);
+		String scope = FreeMarkerUtil.getAsString(parms.get("scope"));
+		for (Map.Entry<String, Object> entry : attributes.entrySet()) {
+			FreeMarkerUtil.setAttribute(env, entry.getKey(), entry.getValue(),
+					scope);
+		}
+	}
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java Sat Nov 14 13:40:31 2009
@@ -26,7 +26,9 @@
 
 import org.apache.tiles.Attribute;
 import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.InsertAttributeModel;
 
 import freemarker.core.Environment;
@@ -38,12 +40,9 @@
 /**
  * Wraps {@link InsertAttributeModel} to be used in FreeMarker. For the list of
  * parameters, see
- * {@link InsertAttributeModel
- * #start(java.util.Stack, TilesContainer, boolean, String, String,
- * Object, String, String, String, Attribute, Object...)}
+ * {@link InsertAttributeModel #start(java.util.Stack, TilesContainer, boolean, String, String, Object, String, String, String, Attribute, Request)}
  * and
- * {@link InsertAttributeModel
- * #end(java.util.Stack, TilesContainer, boolean, Object...)}
+ * {@link InsertAttributeModel #end(java.util.Stack, TilesContainer, boolean, Request)}
  * .
  *
  * @version $Rev$ $Date$
@@ -51,43 +50,45 @@
  */
 public class InsertAttributeFMModel implements TemplateDirectiveModel {
 
-    /**
-     * The template model.
-     */
-    private InsertAttributeModel model;
-
-    /**
-     * Constructor.
-     *
-     * @param model The template model.
-     * @since 2.2.0
-     */
-    public InsertAttributeFMModel(InsertAttributeModel model) {
-        this.model = model;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
-        TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
-        model.start(
-                FreeMarkerUtil.getComposeStack(env),
-                container,
-                FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false),
-                FreeMarkerUtil.getAsString(parms.get("preparer")),
-                FreeMarkerUtil.getAsString(parms.get("role")),
-                FreeMarkerUtil.getAsObject(parms.get("defaultValue")),
-                FreeMarkerUtil.getAsString(parms
-                        .get("defaultValueRole")), FreeMarkerUtil
-                        .getAsString(parms.get("defaultValueType")),
-                FreeMarkerUtil.getAsString(parms.get("name")),
-                (Attribute) FreeMarkerUtil.getAsObject(parms
-                        .get("value")), env);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getComposeStack(env), container,
-                FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), env);
-    }
+	/**
+	 * The template model.
+	 */
+	private InsertAttributeModel model;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param model
+	 *            The template model.
+	 * @since 2.2.0
+	 */
+	public InsertAttributeFMModel(InsertAttributeModel model) {
+		this.model = model;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	public void execute(Environment env, Map params, TemplateModel[] loopVars,
+			TemplateDirectiveBody body) throws TemplateException, IOException {
+		Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
+		TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
+		model.start(FreeMarkerUtil.getComposeStack(env), container,
+				FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false),
+				FreeMarkerUtil.getAsString(parms.get("preparer")),
+				FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil
+						.getAsObject(parms.get("defaultValue")), FreeMarkerUtil
+						.getAsString(parms.get("defaultValueRole")),
+				FreeMarkerUtil.getAsString(parms.get("defaultValueType")),
+				FreeMarkerUtil.getAsString(parms.get("name")),
+				(Attribute) FreeMarkerUtil.getAsObject(parms.get("value")),
+				request);
+		FreeMarkerUtil.evaluateBody(body);
+		model.end(FreeMarkerUtil.getComposeStack(env), container,
+				FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false),
+				request);
+	}
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java Sat Nov 14 13:40:31 2009
@@ -24,7 +24,10 @@
 import java.io.IOException;
 import java.util.Map;
 
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.InsertDefinitionModel;
 
 import freemarker.core.Environment;
@@ -36,10 +39,9 @@
 /**
  * Wraps {@link InsertDefinitionModel} to be used in FreeMarker. For the list of
  * parameters, see
- * {@link InsertDefinitionModel#start(org.apache.tiles.TilesContainer, Object...)}
+ * {@link InsertDefinitionModel#start(org.apache.tiles.TilesContainer, Request)}
  * and
- * {@link InsertDefinitionModel#end(org.apache.tiles.TilesContainer,
- * String, String, String, String, String, String, Object...)}
+ * {@link InsertDefinitionModel#end(org.apache.tiles.TilesContainer, String, String, String, String, String, String, Request)}
  * .
  *
  * @version $Rev$ $Date$
@@ -47,35 +49,39 @@
  */
 public class InsertDefinitionFMModel implements TemplateDirectiveModel {
 
-    /**
-     * The template model.
-     */
-    private InsertDefinitionModel model;
-
-    /**
-     * Constructor.
-     *
-     * @param model The template model.
-     * @since 2.2.0
-     */
-    public InsertDefinitionFMModel(InsertDefinitionModel model) {
-        this.model = model;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
-        model.start(FreeMarkerUtil.getCurrentContainer(env), env);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getCurrentContainer(env), FreeMarkerUtil
-                .getAsString(parms.get("name")), FreeMarkerUtil
-                .getAsString(parms.get("template")), FreeMarkerUtil
-                .getAsString(parms.get("templateType")), FreeMarkerUtil
-                .getAsString(parms.get("templateExpression")), FreeMarkerUtil
-                .getAsString(parms.get("role")), FreeMarkerUtil
-                .getAsString(parms.get("preparer")), env);
-    }
+	/**
+	 * The template model.
+	 */
+	private InsertDefinitionModel model;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param model
+	 *            The template model.
+	 * @since 2.2.0
+	 */
+	public InsertDefinitionFMModel(InsertDefinitionModel model) {
+		this.model = model;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	public void execute(Environment env, Map params, TemplateModel[] loopVars,
+			TemplateDirectiveBody body) throws TemplateException, IOException {
+		Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
+		TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
+		model.start(container, request);
+		FreeMarkerUtil.evaluateBody(body);
+		model.end(container, FreeMarkerUtil.getAsString(parms.get("name")),
+				FreeMarkerUtil.getAsString(parms.get("template")),
+				FreeMarkerUtil.getAsString(parms.get("templateType")),
+				FreeMarkerUtil.getAsString(parms.get("templateExpression")),
+				FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil
+						.getAsString(parms.get("preparer")), request);
+	}
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java Sat Nov 14 13:40:31 2009
@@ -24,7 +24,10 @@
 import java.io.IOException;
 import java.util.Map;
 
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.InsertTemplateModel;
 
 import freemarker.core.Environment;
@@ -36,9 +39,9 @@
 /**
  * Wraps {@link InsertTemplateModel} to be used in FreeMarker. For the list of
  * parameters, see
- * {@link InsertTemplateModel#start(org.apache.tiles.TilesContainer, Object...)}
+ * {@link InsertTemplateModel#start(org.apache.tiles.TilesContainer, Request)}
  * and
- * {@link InsertTemplateModel#end(org.apache.tiles.TilesContainer, String, String, String, String, String, Object...)}
+ * {@link InsertTemplateModel#end(org.apache.tiles.TilesContainer, String, String, String, String, String, Request)}
  * .
  *
  * @version $Rev$ $Date$
@@ -46,35 +49,39 @@
  */
 public class InsertTemplateFMModel implements TemplateDirectiveModel {
 
-    /**
-     * The template model.
-     */
-    private InsertTemplateModel model;
-
-    /**
-     * Constructor.
-     *
-     * @param model The template model.
-     * @since 2.2.0
-     */
-    public InsertTemplateFMModel(InsertTemplateModel model) {
-        this.model = model;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
-        model.start(FreeMarkerUtil.getCurrentContainer(env), env);
-        FreeMarkerUtil.evaluateBody(body);
-        FreeMarkerUtil.setForceInclude(env, true);
-        model.end(FreeMarkerUtil.getCurrentContainer(env), FreeMarkerUtil
-                .getAsString(parms.get("template")), FreeMarkerUtil
-                .getAsString(parms.get("templateType")), FreeMarkerUtil
-                .getAsString(parms.get("templateExpression")), FreeMarkerUtil.getAsString(parms.get("role")),
-                FreeMarkerUtil
-                        .getAsString(parms.get("preparer")), env);
-    }
+	/**
+	 * The template model.
+	 */
+	private InsertTemplateModel model;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param model
+	 *            The template model.
+	 * @since 2.2.0
+	 */
+	public InsertTemplateFMModel(InsertTemplateModel model) {
+		this.model = model;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	public void execute(Environment env, Map params, TemplateModel[] loopVars,
+			TemplateDirectiveBody body) throws TemplateException, IOException {
+		Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
+		TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
+		model.start(container, request);
+		FreeMarkerUtil.evaluateBody(body);
+		FreeMarkerUtil.setForceInclude(env, true);
+		model.end(container, FreeMarkerUtil.getAsString(parms.get("template")),
+				FreeMarkerUtil.getAsString(parms.get("templateType")),
+				FreeMarkerUtil.getAsString(parms.get("templateExpression")),
+				FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil
+						.getAsString(parms.get("preparer")), request);
+	}
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java Sat Nov 14 13:40:31 2009
@@ -25,7 +25,10 @@
 import java.util.Map;
 
 import org.apache.tiles.ArrayStack;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.PutAttributeModel;
 
 import freemarker.core.Environment;
@@ -37,44 +40,48 @@
 /**
  * Wraps {@link PutAttributeModel} to be used in FreeMarker. For the list of
  * parameters, see {@link PutAttributeModel#start(ArrayStack)} and
- * {@link PutAttributeModel #end(org.apache.tiles.TilesContainer, ArrayStack,
- * String, Object, String, String, String, String, boolean, Object...)}.
+ * {@link PutAttributeModel #end(org.apache.tiles.TilesContainer, ArrayStack, String, Object, String, String, String, String, boolean, Request)}
+ * .
  *
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
 public class PutAttributeFMModel implements TemplateDirectiveModel {
 
-    /**
-     * The template model.
-     */
-    private PutAttributeModel model;
-
-    /**
-     * Constructor.
-     *
-     * @param model The template model.
-     * @since 2.2.0
-     */
-    public PutAttributeFMModel(PutAttributeModel model) {
-        this.model = model;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        ArrayStack<Object> composeStack = FreeMarkerUtil.getComposeStack(env);
-        model.start(composeStack);
-        String bodyString = FreeMarkerUtil.renderAsString(body);
-        Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
-        model.end(FreeMarkerUtil.getCurrentContainer(env), composeStack,
-                FreeMarkerUtil.getAsString(parms.get("name")), FreeMarkerUtil
-                        .getAsObject(parms.get("value")), FreeMarkerUtil
-                        .getAsString(parms.get("expression")), bodyString,
-                FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil.getAsString(parms.get("type")),
-                FreeMarkerUtil
-                        .getAsBoolean(parms.get("cascade"), false), env);
-    }
+	/**
+	 * The template model.
+	 */
+	private PutAttributeModel model;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param model
+	 *            The template model.
+	 * @since 2.2.0
+	 */
+	public PutAttributeFMModel(PutAttributeModel model) {
+		this.model = model;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	public void execute(Environment env, Map params, TemplateModel[] loopVars,
+			TemplateDirectiveBody body) throws TemplateException, IOException {
+		ArrayStack<Object> composeStack = FreeMarkerUtil.getComposeStack(env);
+		TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
+		model.start(composeStack);
+		String bodyString = FreeMarkerUtil.renderAsString(body);
+		Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
+		model.end(container, composeStack, FreeMarkerUtil.getAsString(parms
+				.get("name")), FreeMarkerUtil.getAsObject(parms.get("value")),
+				FreeMarkerUtil.getAsString(parms.get("expression")),
+				bodyString, FreeMarkerUtil.getAsString(parms.get("role")),
+				FreeMarkerUtil.getAsString(parms.get("type")), FreeMarkerUtil
+						.getAsBoolean(parms.get("cascade"), false), request);
+	}
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java Sat Nov 14 13:40:31 2009
@@ -25,7 +25,10 @@
 import java.util.Map;
 
 import org.apache.tiles.ArrayStack;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
+import org.apache.tiles.request.Request;
 import org.apache.tiles.template.PutListAttributeModel;
 
 import freemarker.core.Environment;
@@ -37,9 +40,8 @@
 /**
  * Wraps {@link PutListAttributeModel} to be used in FreeMarker. For the list of
  * parameters, see
- * {@link PutListAttributeModel#start(ArrayStack, String, boolean)}
- * and
- * {@link PutListAttributeModel#end(org.apache.tiles.TilesContainer, ArrayStack, String, boolean, Object...)}
+ * {@link PutListAttributeModel#start(ArrayStack, String, boolean)} and
+ * {@link PutListAttributeModel#end(org.apache.tiles.TilesContainer, ArrayStack, String, boolean, Request)}
  * .
  *
  * @version $Rev$ $Date$
@@ -47,32 +49,38 @@
  */
 public class PutListAttributeFMModel implements TemplateDirectiveModel {
 
-    /**
-     * The template model.
-     */
-    private PutListAttributeModel model;
-
-    /**
-     * Constructor.
-     *
-     * @param model The template model.
-     * @since 2.2.0
-     */
-    public PutListAttributeFMModel(PutListAttributeModel model) {
-        this.model = model;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
-        ArrayStack<Object> composeStack = FreeMarkerUtil.getComposeStack(env);
-        model.start(composeStack, FreeMarkerUtil.getAsString(parms.get("role")),
-                FreeMarkerUtil.getAsBoolean(parms.get("inherit"), false));
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getCurrentContainer(env), composeStack,
-                FreeMarkerUtil.getAsString(parms.get("name")), FreeMarkerUtil
-                        .getAsBoolean(parms.get("cascade"), false), env);
-    }
+	/**
+	 * The template model.
+	 */
+	private PutListAttributeModel model;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param model
+	 *            The template model.
+	 * @since 2.2.0
+	 */
+	public PutListAttributeFMModel(PutListAttributeModel model) {
+		this.model = model;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	public void execute(Environment env, Map params, TemplateModel[] loopVars,
+			TemplateDirectiveBody body) throws TemplateException, IOException {
+		Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
+		ArrayStack<Object> composeStack = FreeMarkerUtil.getComposeStack(env);
+		TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
+		Request request = FreeMarkerTilesRequestContext
+				.createServletFreemarkerRequest(container
+						.getApplicationContext(), env);
+		model.start(composeStack,
+				FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil
+						.getAsBoolean(parms.get("inherit"), false));
+		FreeMarkerUtil.evaluateBody(body);
+		model.end(container, composeStack, FreeMarkerUtil.getAsString(parms
+				.get("name")), FreeMarkerUtil.getAsBoolean(
+				parms.get("cascade"), false), request);
+	}
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/GetAsStringFMModelTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/GetAsStringFMModelTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/GetAsStringFMModelTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/GetAsStringFMModelTest.java Sat Nov 14 13:40:31 2009
@@ -38,8 +38,10 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.freemarker.io.NullWriter;
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.servlet.context.ServletUtil;
 import org.apache.tiles.template.GetAsStringModel;
 import org.junit.Before;
@@ -64,11 +66,6 @@
 public class GetAsStringFMModelTest {
 
     /**
-     * The number of times the method is called.
-     */
-    private static final int CALL_COUNT = 3;
-
-    /**
      * The FreeMarker environment.
      */
     private Environment env;
@@ -122,7 +119,9 @@
         GetAsStringModel tModel = createMock(GetAsStringModel.class);
         GetAsStringFMModel fmModel = new GetAsStringFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
         ArrayStack<Object> composeStack = new ArrayStack<Object>();
         expect(request.getAttribute(FreeMarkerUtil.COMPOSE_STACK_ATTRIBUTE_NAME)).andReturn(composeStack).times(2);
@@ -137,7 +136,7 @@
         expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
-        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).times(CALL_COUNT);
+        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).anyTimes();
         expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel);
         initEnvironment();
 
@@ -152,14 +151,19 @@
         params.put("name", objectWrapper.wrap("myName"));
         params.put("value", objectWrapper.wrap(attribute));
 
-        tModel.start(composeStack, container, false, "myPreparer", "myRole", "myDefaultValue", "myDefaultValueRole",
-                "myDefaultValueType", "myName", attribute, env);
-        tModel.end(composeStack, container, writer, false, env);
+		tModel.start(eq(composeStack), eq(container), eq(false),
+				eq("myPreparer"), eq("myRole"), eq("myDefaultValue"),
+				eq("myDefaultValueRole"), eq("myDefaultValueType"),
+				eq("myName"), eq(attribute),
+				isA(FreeMarkerTilesRequestContext.class));
+		tModel.end(eq(composeStack), eq(container), eq(writer), eq(false),
+				isA(FreeMarkerTilesRequestContext.class));
         body.render(isA(NullWriter.class));
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
-        verify(template, model, request, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, tModel, body, container, servlet,
+				servletContext, attribute, applicationContext);
     }
 
     /**

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/ImportAttributeFMModelTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/ImportAttributeFMModelTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/ImportAttributeFMModelTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/ImportAttributeFMModelTest.java Sat Nov 14 13:40:31 2009
@@ -21,6 +21,7 @@
 
 package org.apache.tiles.freemarker.template;
 
+import static org.easymock.EasyMock.*;
 import static org.easymock.classextension.EasyMock.*;
 import static org.junit.Assert.*;
 
@@ -38,6 +39,8 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.servlet.context.ServletUtil;
 import org.apache.tiles.template.ImportAttributeModel;
 import org.junit.Before;
@@ -63,16 +66,6 @@
 public class ImportAttributeFMModelTest {
 
     /**
-     * The number of times the method is called.
-     */
-    private static final int CALL_COUNT = 3;
-
-    /**
-     * The number of times the method is called.
-     */
-    private static final int CALL_COUNT_4 = 4;
-
-    /**
      * The FreeMarker environment.
      */
     private Environment env;
@@ -126,7 +119,9 @@
         ImportAttributeModel tModel = createMock(ImportAttributeModel.class);
         ImportAttributeFMModel fmModel = new ImportAttributeFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
         expect(request.getAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME)).andReturn(null);
         request.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
@@ -139,7 +134,7 @@
         expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
-        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel);
+        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).anyTimes();
         expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel);
         expect(template.getObjectWrapper()).andReturn(objectWrapper).times(2);
         initEnvironment();
@@ -154,14 +149,15 @@
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put("one", "value1");
         attributes.put("two", "value2");
-        expect(tModel.getImportedAttributes(container, "myName", "myToName",
-                false, env)).andReturn(attributes);
+        expect(tModel.getImportedAttributes(eq(container), eq("myName"), eq("myToName"),
+                eq(false), isA(FreeMarkerTilesRequestContext.class))).andReturn(attributes);
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
         assertEquals("value1", DeepUnwrap.unwrap(env.getCurrentNamespace().get("one")));
         assertEquals("value2", DeepUnwrap.unwrap(env.getCurrentNamespace().get("two")));
-        verify(template, model, request, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, tModel, body, container, servlet,
+				servletContext, attribute, applicationContext);
     }
 
     /**
@@ -176,7 +172,9 @@
         ImportAttributeModel tModel = createMock(ImportAttributeModel.class);
         ImportAttributeFMModel fmModel = new ImportAttributeFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
         expect(request.getAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME)).andReturn(null);
         request.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
@@ -191,7 +189,7 @@
         expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
-        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).times(CALL_COUNT);
+        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).anyTimes();
         expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel);
         initEnvironment();
 
@@ -206,12 +204,13 @@
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put("one", "value1");
         attributes.put("two", "value2");
-        expect(tModel.getImportedAttributes(container, "myName", "myToName",
-                false, env)).andReturn(attributes);
+        expect(tModel.getImportedAttributes(eq(container), eq("myName"), eq("myToName"),
+                eq(false), isA(FreeMarkerTilesRequestContext.class))).andReturn(attributes);
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
-        verify(template, model, request, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, tModel, body, container, servlet,
+				servletContext, attribute, applicationContext);
     }
 
     /**
@@ -226,7 +225,9 @@
         ImportAttributeModel tModel = createMock(ImportAttributeModel.class);
         ImportAttributeFMModel fmModel = new ImportAttributeFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
         HttpSession session = createMock(HttpSession.class);
         expect(request.getSession()).andReturn(session).times(2);
@@ -243,7 +244,7 @@
         expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
-        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).times(CALL_COUNT);
+        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).anyTimes();
         expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel);
         initEnvironment();
 
@@ -258,12 +259,13 @@
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put("one", "value1");
         attributes.put("two", "value2");
-        expect(tModel.getImportedAttributes(container, "myName", "myToName",
-                false, env)).andReturn(attributes);
+        expect(tModel.getImportedAttributes(eq(container), eq("myName"), eq("myToName"),
+                eq(false), isA(FreeMarkerTilesRequestContext.class))).andReturn(attributes);
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
-        verify(template, model, request, session, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, session, tModel, body, container,
+				servlet, servletContext, attribute, applicationContext);
     }
 
     /**
@@ -278,7 +280,9 @@
         ImportAttributeModel tModel = createMock(ImportAttributeModel.class);
         ImportAttributeFMModel fmModel = new ImportAttributeFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
         expect(request.getAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME)).andReturn(null);
         request.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
@@ -287,14 +291,14 @@
 
         GenericServlet servlet = createMock(GenericServlet.class);
         ServletContext servletContext = createMock(ServletContext.class);
-        expect(servlet.getServletContext()).andReturn(servletContext).times(CALL_COUNT_4);
+        expect(servlet.getServletContext()).andReturn(servletContext).anyTimes();
         expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         servletContext.setAttribute("one", "value1");
         servletContext.setAttribute("two", "value2");
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
-        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel);
-        expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel).times(CALL_COUNT);
+        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).anyTimes();
+        expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel).anyTimes();
         initEnvironment();
 
         TemplateDirectiveBody body = createMock(TemplateDirectiveBody.class);
@@ -308,12 +312,13 @@
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put("one", "value1");
         attributes.put("two", "value2");
-        expect(tModel.getImportedAttributes(container, "myName", "myToName",
-                false, env)).andReturn(attributes);
+        expect(tModel.getImportedAttributes(eq(container), eq("myName"), eq("myToName"),
+                eq(false), isA(FreeMarkerTilesRequestContext.class))).andReturn(attributes);
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
-        verify(template, model, request, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, tModel, body, container, servlet,
+				servletContext, attribute, applicationContext);
     }
 
     /**

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertAttributeFMModelTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertAttributeFMModelTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertAttributeFMModelTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertAttributeFMModelTest.java Sat Nov 14 13:40:31 2009
@@ -38,8 +38,10 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.freemarker.io.NullWriter;
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.servlet.context.ServletUtil;
 import org.apache.tiles.template.InsertAttributeModel;
 import org.junit.Before;
@@ -64,11 +66,6 @@
 public class InsertAttributeFMModelTest {
 
     /**
-     * The number of times the method is called.
-     */
-    private static final int CALL_COUNT = 3;
-
-    /**
      * The FreeMarker environment.
      */
     private Environment env;
@@ -122,7 +119,9 @@
         InsertAttributeModel tModel = createMock(InsertAttributeModel.class);
         InsertAttributeFMModel fmModel = new InsertAttributeFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
         ArrayStack<Object> composeStack = new ArrayStack<Object>();
         expect(request.getAttribute(FreeMarkerUtil.COMPOSE_STACK_ATTRIBUTE_NAME)).andReturn(composeStack).times(2);
@@ -137,7 +136,7 @@
         expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
-        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).times(CALL_COUNT);
+        expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).anyTimes();
         expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel);
         initEnvironment();
 
@@ -152,14 +151,18 @@
         params.put("name", objectWrapper.wrap("myName"));
         params.put("value", objectWrapper.wrap(attribute));
 
-        tModel.start(composeStack, container, false, "myPreparer", "myRole", "myDefaultValue", "myDefaultValueRole",
-                "myDefaultValueType", "myName", attribute, env);
-        tModel.end(composeStack, container, false, env);
+		tModel.start(eq(composeStack), eq(container), eq(false),
+				eq("myPreparer"), eq("myRole"), eq("myDefaultValue"),
+				eq("myDefaultValueRole"), eq("myDefaultValueType"),
+				eq("myName"), eq(attribute),
+				isA(FreeMarkerTilesRequestContext.class));
+        tModel.end(eq(composeStack), eq(container), eq(false), isA(FreeMarkerTilesRequestContext.class));
         body.render(isA(NullWriter.class));
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
-        verify(template, model, request, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, tModel, body, container, servlet,
+				servletContext, attribute, applicationContext);
     }
 
     /**

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java?rev=836174&r1=836173&r2=836174&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java Sat Nov 14 13:40:31 2009
@@ -21,6 +21,7 @@
 
 package org.apache.tiles.freemarker.template;
 
+import static org.easymock.EasyMock.*;
 import static org.easymock.classextension.EasyMock.*;
 
 import java.io.IOException;
@@ -36,7 +37,9 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContext;
 import org.apache.tiles.freemarker.io.NullWriter;
+import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.servlet.context.ServletUtil;
 import org.apache.tiles.template.InsertDefinitionModel;
 import org.junit.Before;
@@ -61,11 +64,6 @@
 public class InsertDefinitionFMModelTest {
 
     /**
-     * The number of times the method is called.
-     */
-    private static final int CALL_COUNT = 3;
-
-    /**
      * The FreeMarker environment.
      */
     private Environment env;
@@ -119,22 +117,23 @@
         InsertDefinitionModel tModel = createMock(InsertDefinitionModel.class);
         InsertDefinitionFMModel fmModel = new InsertDefinitionFMModel(tModel);
         TilesContainer container = createMock(TilesContainer.class);
+        ApplicationContext applicationContext = createMock(ApplicationContext.class);
 
+        expect(container.getApplicationContext()).andReturn(applicationContext);
         HttpServletRequest request = createMock(HttpServletRequest.class);
-        expect(request.getAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME)).andReturn(null).times(2);
+        expect(request.getAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME)).andReturn(null);
         request.setAttribute(ServletUtil.CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
-        expectLastCall().times(2);
         replay(request);
         HttpRequestHashModel requestModel = new HttpRequestHashModel(request, objectWrapper);
 
         GenericServlet servlet = createMock(GenericServlet.class);
         ServletContext servletContext = createMock(ServletContext.class);
-        expect(servlet.getServletContext()).andReturn(servletContext).times(CALL_COUNT);
-        expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container).times(2);
+        expect(servlet.getServletContext()).andReturn(servletContext).times(2);
+        expect(servletContext.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
         replay(servlet, servletContext);
         ServletContextHashModel servletContextModel = new ServletContextHashModel(servlet, objectWrapper);
         expect(model.get(FreemarkerServlet.KEY_REQUEST)).andReturn(requestModel).times(2);
-        expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel).times(2);
+        expect(model.get(FreemarkerServlet.KEY_APPLICATION)).andReturn(servletContextModel);
         initEnvironment();
 
         TemplateDirectiveBody body = createMock(TemplateDirectiveBody.class);
@@ -147,14 +146,16 @@
         params.put("role", objectWrapper.wrap("myRole"));
         params.put("preparer", objectWrapper.wrap("myPreparer"));
 
-        tModel.start(container, env);
-        tModel.end(container, "myName", "myTemplate", "myTemplateType",
-                "myTemplateExpression", "myRole", "myPreparer", env);
+        tModel.start(eq(container), isA(FreeMarkerTilesRequestContext.class));
+		tModel.end(eq(container), eq("myName"), eq("myTemplate"),
+				eq("myTemplateType"), eq("myTemplateExpression"), eq("myRole"),
+				eq("myPreparer"), isA(FreeMarkerTilesRequestContext.class));
         body.render(isA(NullWriter.class));
 
-        replay(tModel, body, container, attribute);
+        replay(tModel, body, container, attribute, applicationContext);
         fmModel.execute(env, params, null, body);
-        verify(template, model, request, tModel, body, container, servlet, servletContext, attribute);
+		verify(template, model, request, tModel, body, container, servlet,
+				servletContext, attribute, applicationContext);
     }
 
     /**