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/25 11:52:55 UTC

svn commit: r884031 [1/3] - in /tiles/sandbox/trunk: tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/ tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ tiles-request/tiles-request-api/src/main/java/org...

Author: apetrelli
Date: Wed Nov 25 10:52:52 2009
New Revision: 884031

URL: http://svn.apache.org/viewvc?rev=884031&view=rev
Log:
TILESSB-16
Added a "getContext" method and refactored all the code.
The build compiles but tests do not pass!

Added:
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationAccess.java
      - copied, changed from r882693, tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationContextUtil.java
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java   (with props)
Removed:
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationContextUtil.java
Modified:
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/NotAvailableFeatureException.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java
    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-jsp/src/main/java/org/apache/tiles/request/jsp/JspUtil.java
    tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletSessionScopeMap.java
    tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
    tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletUtil.java
    tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java
    tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletUtil.java
    tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.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/access/TilesAccess.java
    tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.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/impl/mgmt/DefinitionManager.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/startup/AbstractTilesInitializer.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/startup/AbstractTilesInitializerTest.java
    tiles/sandbox/trunk/tiles3/tiles-el/src/main/java/org/apache/tiles/el/TilesContextBeanELResolver.java
    tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/ELAttributeEvaluatorTest.java
    tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextBeanELResolverTest.java
    tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextELResolverTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/AddAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/AddListAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/DefinitionFMModelTest.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-freemarker/src/test/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModelTest.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/UseAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactory.java
    tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/MVELAttributeEvaluatorTest.java
    tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/TilesContextBeanVariableResolverFactoryTest.java
    tiles/sandbox/trunk/tiles3/tiles-mvel/src/test/java/org/apache/tiles/mvel/TilesContextVariableResolverFactoryTest.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/main/java/org/apache/tiles/ognl/RequestScopeNestedObjectExtractor.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/main/java/org/apache/tiles/ognl/SessionScopeNestedObjectExtractor.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/main/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactory.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/test/java/org/apache/tiles/ognl/OGNLAttributeEvaluatorTest.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/test/java/org/apache/tiles/ognl/RequestScopeNestedObjectExtractorTest.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/test/java/org/apache/tiles/ognl/SessionScopeNestedObjectExtractorTest.java
    tiles/sandbox/trunk/tiles3/tiles-ognl/src/test/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactoryTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/ComposeStackUtil.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/ImportAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/AddAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/AddListAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/DefinitionModelTest.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-template/src/test/java/org/apache/tiles/template/SetCurrentContainerModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/java/org/apache/tiles/test/preparer/RequestSettingViewPreparer.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/ImportAttributeVModel.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/AddAttributeVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/AddListAttributeVModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/DefinitionVModelTest.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/VelocityStyleTilesToolTest.java

Added: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,26 @@
+package org.apache.tiles.request;
+
+import java.util.Map;
+
+import org.apache.tiles.request.scope.ContextResolver;
+import org.apache.tiles.request.util.ApplicationAccess;
+
+public abstract class AbstractRequest implements Request{
+
+    private ApplicationContext applicationContext;
+
+    public AbstractRequest(ApplicationContext applicationContext) {
+        this.applicationContext = applicationContext;
+    }
+
+    @Override
+    public ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+    @Override
+    public Map<String, Object> getContext(String scope) {
+        ContextResolver resolver = ApplicationAccess.getContextResolver(applicationContext);
+        return resolver.getContext(this, scope);
+    }
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/AbstractRequest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/NotAvailableFeatureException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/NotAvailableFeatureException.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/NotAvailableFeatureException.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/NotAvailableFeatureException.java Wed Nov 25 10:52:52 2009
@@ -28,7 +28,7 @@
  * @version $Rev$ $Date$
  * @since 2.1.4
  */
-public class NotAvailableFeatureException extends RuntimeException {
+public class NotAvailableFeatureException extends RequestException {
 
     /**
      * Constructor.

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/Request.java Wed Nov 25 10:52:52 2009
@@ -53,21 +53,7 @@
      */
     Map<String, String[]> getHeaderValues();
 
-    /**
-     * Return a mutable Map that maps request scope attribute names to their
-     * values.
-     *
-     * @return The request scope map.
-     */
-    Map<String, Object> getRequestScope();
-
-    /**
-     * Return a mutable Map that maps session scope attribute names to their
-     * values.
-     *
-     * @return The request scope map.
-     */
-    Map<String, Object> getSessionScope();
+    Map<String, Object> getContext(String scope);
 
     /**
      * Returns the associated application context.

Added: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,20 @@
+package org.apache.tiles.request;
+
+public class RequestException extends RuntimeException {
+
+    public RequestException() {
+    }
+
+    public RequestException(String message) {
+        super(message);
+    }
+
+    public RequestException(Throwable cause) {
+        super(cause);
+    }
+
+    public RequestException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/RequestException.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,10 @@
+package org.apache.tiles.request.scope;
+
+import java.util.Map;
+
+import org.apache.tiles.request.Request;
+
+public interface ContextResolver {
+
+    public Map<String, Object> getContext(Request request, String scope);
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ContextResolver.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,22 @@
+package org.apache.tiles.request.scope;
+
+import org.apache.tiles.request.RequestException;
+
+public class NoSuchScopeException extends RequestException {
+
+    public NoSuchScopeException() {
+    }
+
+    public NoSuchScopeException(String message) {
+        super(message);
+    }
+
+    public NoSuchScopeException(Throwable cause) {
+        super(cause);
+    }
+
+    public NoSuchScopeException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/NoSuchScopeException.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,39 @@
+package org.apache.tiles.request.scope;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.util.TilesRequestContextWrapper;
+
+public class ReflectionContextResolver implements ContextResolver {
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public Map<String, Object> getContext(Request request, String scope) {
+        String methodName = "get" + Character.toUpperCase(scope.charAt(0))
+                + scope.substring(1) + "Scope";
+        Method method;
+        try {
+            method = request.getClass().getMethod(methodName);
+        } catch (NoSuchMethodException e) {
+            if (request instanceof TilesRequestContextWrapper) {
+                TilesRequestContextWrapper wrapper = (TilesRequestContextWrapper) request;
+                return getContext(wrapper.getWrappedRequest(), scope);
+            }
+            throw new NoSuchScopeException("No accessor method for '" + scope
+                    + "' scope.", e);
+        }
+        try {
+            return (Map<String, Object>) method.invoke(request);
+        } catch (IllegalAccessException e) {
+            throw new NoSuchScopeException("No accessible method for '" + scope
+                    + "' scope.", e);
+        } catch (InvocationTargetException e) {
+            throw new NoSuchScopeException(
+                    "Exception during execution of accessor method for '"
+                            + scope + "' scope.", e);
+        }
+    }
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/scope/ReflectionContextResolver.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationAccess.java (from r882693, tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationContextUtil.java)
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationAccess.java?p2=tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationAccess.java&p1=tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationContextUtil.java&r1=882693&r2=884031&rev=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationContextUtil.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/ApplicationAccess.java Wed Nov 25 10:52:52 2009
@@ -1,17 +1,33 @@
 package org.apache.tiles.request.util;
 
 import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.scope.ContextResolver;
 
-public final class ApplicationContextUtil {
+public final class ApplicationAccess {
 
     public static final String APPLICATION_CONTEXT_ATTRIBUTE =
         ApplicationContext.class.getName() + ".ATTRIBUTE";
 
-    private ApplicationContextUtil() {
+    public static final String CONTEXT_RESOLVER_ATTRIBUTE =
+        ContextResolver.class.getName() + ".ATTRIBUTE";
+
+    private ApplicationAccess() {
     }
 
     public static void register(ApplicationContext applicationContext) {
         applicationContext.getApplicationScope().put(
                 APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
     }
+
+    public static void registerContextResolver(ContextResolver contextResolver,
+            ApplicationContext applicationContext) {
+        applicationContext.getApplicationScope().put(
+                CONTEXT_RESOLVER_ATTRIBUTE, contextResolver);
+    }
+
+    public static ContextResolver getContextResolver(
+            ApplicationContext applicationContext) {
+        return (ContextResolver) applicationContext.getApplicationScope().get(
+                CONTEXT_RESOLVER_ATTRIBUTE);
+    }
 }

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/util/TilesRequestContextWrapper.java Wed Nov 25 10:52:52 2009
@@ -73,14 +73,9 @@
         return context.getHeaderValues();
     }
 
-    /** {@inheritDoc} */
-    public Map<String, Object> getRequestScope() {
-        return context.getRequestScope();
-    }
-
-    /** {@inheritDoc} */
-    public Map<String, Object> getSessionScope() {
-        return context.getSessionScope();
+    @Override
+    public Map<String, Object> getContext(String scope) {
+        return context.getContext(scope);
     }
 
     /** {@inheritDoc} */

Added: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,241 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tiles.freemarker.context;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tiles.request.util.MapEntry;
+
+import freemarker.core.Environment;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+import freemarker.template.utility.DeepUnwrap;
+
+/**
+ * <p>
+ * Private implementation of <code>Map</code> for servlet request attributes.
+ * </p>
+ *
+ * @version $Rev$ $Date$
+ */
+
+final class EnvironmentScopeMap implements Map<String, Object> {
+
+    /**
+     * The request object to use.
+     */
+    private Environment request = null;
+
+    /**
+     * Constructor.
+     *
+     * @param request The request object to use.
+     */
+    public EnvironmentScopeMap(Environment request) {
+        this.request = request;
+    }
+
+    /** {@inheritDoc} */
+    public void clear() {
+        Iterator<String> keys = keySet().iterator();
+        while (keys.hasNext()) {
+            request.setVariable(keys.next(), null);
+        }
+    }
+
+    /** {@inheritDoc} */
+    public boolean containsKey(Object key) {
+        return getAttribute(key(key)) != null;
+    }
+
+    /** {@inheritDoc} */
+    public boolean containsValue(Object value) {
+        if (value == null) {
+            return (false);
+        }
+        Set<String> keys;
+        keys = getAttributeNames();
+        for (String name : keys) {
+            Object next = getAttribute(name);
+            if (next == value) {
+                return (true);
+            }
+        }
+        return (false);
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
+    public Set<Map.Entry<String, Object>> entrySet() {
+        Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String, Object>>();
+        Set<String> keys;
+        keys = getAttributeNames();
+        for (String name : keys) {
+            Object next = getAttribute(name);
+            set.add(new MapEntry(name, next, false));
+        }
+        return (set);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object o) {
+        Environment otherRequest = ((EnvironmentScopeMap) o).request;
+        boolean retValue = true;
+        Set<String> keys;
+        try {
+            keys = getAttributeNames();
+            for (String name : keys) {
+                Object next = getAttribute(name);
+                TemplateModel otherVariable = otherRequest.getVariable(name);
+                if (otherVariable != null) {
+                    Object otherObj = DeepUnwrap.unwrap(otherVariable);
+                    retValue = (next == null && otherObj == null)
+                            || (next != null && next.equals(otherObj));
+                }
+            }
+        } catch (TemplateModelException e) {
+            throw new FreemarkerRequestException("Cannot get the entry set", e);
+        }
+
+        return retValue;
+    }
+
+    /** {@inheritDoc} */
+    public Object get(Object key) {
+        return getAttribute(key(key));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return (request.hashCode());
+    }
+
+    /** {@inheritDoc} */
+    public boolean isEmpty() {
+        return (size() < 1);
+    }
+
+    /** {@inheritDoc} */
+    public Set<String> keySet() {
+        return getAttributeNames();
+    }
+
+    /** {@inheritDoc} */
+    public Object put(String key, Object value) {
+        if (value == null) {
+            return (remove(key));
+        }
+        String skey = key(key);
+        Object previous = getAttribute(skey);
+        setAttribute(skey, value);
+        return (previous);
+    }
+
+    /** {@inheritDoc} */
+    public void putAll(Map<? extends String, ? extends Object> map) {
+        Iterator<? extends String> keys = map.keySet().iterator();
+        while (keys.hasNext()) {
+            String key = keys.next();
+            setAttribute(key, map.get(key));
+        }
+    }
+
+    /** {@inheritDoc} */
+    public Object remove(Object key) {
+        String skey = key(key);
+        Object previous = getAttribute(skey);
+        setAttribute(skey, null);
+        return (previous);
+    }
+
+    /** {@inheritDoc} */
+    public int size() {
+        return getAttributeNames().size();
+    }
+
+    /** {@inheritDoc} */
+    public Collection<Object> values() {
+        List<Object> list = new ArrayList<Object>();
+        for(String name : getAttributeNames()) {
+            list.add(getAttribute(name));
+        }
+        return (list);
+    }
+
+    /**
+     * Returns the string representation of the key.
+     *
+     * @param key The key.
+     * @return The string representation of the key.
+     * @throws IllegalArgumentException If the key is <code>null</code>.
+     */
+    private String key(Object key) {
+        if (key == null) {
+            throw new IllegalArgumentException();
+        } else if (key instanceof String) {
+            return ((String) key);
+        } else {
+            return (key.toString());
+        }
+    }
+
+    private Object getAttribute(String name) {
+        try {
+            TemplateModel variable = request.getVariable(name);
+            if (variable != null) {
+                return DeepUnwrap.unwrap(variable);
+            }
+            return null;
+        } catch (TemplateModelException e) {
+            throw new FreemarkerRequestException(
+                    "Cannot get attribute with name '" + name + "'", e);
+        }
+    }
+
+    private void setAttribute(String name, Object value) {
+        try {
+            TemplateModel model = request.getObjectWrapper().wrap(value);
+            request.setVariable(name, model);
+        } catch (TemplateModelException e) {
+            throw new FreemarkerRequestException(
+                    "Error when wrapping an object setting the '" + name
+                            + "' attribute", e);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private Set<String> getAttributeNames() {
+        try {
+            return request.getKnownVariableNames();
+        } catch (TemplateModelException e) {
+            throw new FreemarkerRequestException(
+                    "Cannot get variable names from request", e);
+        }
+    }
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/EnvironmentScopeMap.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

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=884031&r1=884030&r2=884031&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 Wed Nov 25 10:52:52 2009
@@ -25,6 +25,7 @@
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.Locale;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -51,6 +52,8 @@
      */
     private Environment env;
 
+    private Map<String, Object> pageScope;
+
     /**
      * The request objects.
      */
@@ -97,6 +100,13 @@
         return env.getLocale();
     }
 
+    public Map<String, Object> getPageScope() {
+        if (pageScope == null) {
+            pageScope = new EnvironmentScopeMap(env);
+        }
+        return pageScope;
+    }
+
     /** {@inheritDoc} */
     @Override
     public void dispatch(String path) throws IOException {
@@ -105,18 +115,17 @@
 
     /** {@inheritDoc} */
     @Override
-    public PrintWriter getPrintWriter() throws IOException {
+    public PrintWriter getPrintWriter() {
         Writer writer = env.getOut();
         if (writer instanceof PrintWriter) {
             return (PrintWriter) writer;
-        } else {
-            return new PrintWriter(writer);
         }
+        return new PrintWriter(writer);
     }
 
     /** {@inheritDoc} */
     @Override
-    public Writer getWriter() throws IOException {
+    public Writer getWriter() {
         return env.getOut();
     }
 

Added: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,21 @@
+package org.apache.tiles.freemarker.context;
+
+import org.apache.tiles.request.RequestException;
+
+public class FreemarkerRequestException extends RequestException {
+
+    public FreemarkerRequestException() {
+    }
+
+    public FreemarkerRequestException(String message) {
+        super(message);
+    }
+
+    public FreemarkerRequestException(Throwable cause) {
+        super(cause);
+    }
+
+    public FreemarkerRequestException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreemarkerRequestException.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,230 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tiles.jsp.context;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.jsp.PageContext;
+
+import org.apache.tiles.request.util.MapEntry;
+
+/**
+ * <p>Private implementation of <code>Map</code> for servlet request
+ * attributes.</p>
+ *
+ * @version $Rev$ $Date$
+ */
+
+final class JspScopeMap implements Map<String, Object> {
+
+    /**
+     * The request object to use.
+     */
+    private PageContext request = null;
+
+    private int scopeId;
+
+    /**
+     * Constructor.
+     *
+     * @param request The request object to use.
+     */
+    public JspScopeMap(PageContext pageContext, int scopeId) {
+        this.request = pageContext;
+        this.scopeId = scopeId;
+    }
+
+
+    /** {@inheritDoc} */
+    public void clear() {
+        Iterator<String> keys = keySet().iterator();
+        while (keys.hasNext()) {
+            request.removeAttribute(keys.next(), scopeId);
+        }
+    }
+
+
+    /** {@inheritDoc} */
+    public boolean containsKey(Object key) {
+        return (request.getAttribute(key(key), scopeId) != null);
+    }
+
+
+    /** {@inheritDoc} */
+    public boolean containsValue(Object value) {
+        if (value == null) {
+            return (false);
+        }
+        Enumeration<String> keys = request.getAttributeNamesInScope(scopeId);
+        while (keys.hasMoreElements()) {
+            Object next = request.getAttribute(keys.nextElement(), scopeId);
+            if (next == value) {
+                return (true);
+            }
+        }
+        return (false);
+    }
+
+
+    /** {@inheritDoc} */
+    public Set<Map.Entry<String, Object>> entrySet() {
+        Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String, Object>>();
+        Enumeration<String> keys = request.getAttributeNamesInScope(scopeId);
+        String key;
+        while (keys.hasMoreElements()) {
+            key = keys.nextElement();
+            set.add(new MapEntry<String, Object>(key,
+                    request.getAttribute(key, scopeId), true));
+        }
+        return (set);
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object o) {
+        PageContext otherRequest = ((JspScopeMap) o).request;
+        boolean retValue = true;
+        synchronized (request) {
+            for (Enumeration<String> attribs = request
+                    .getAttributeNamesInScope(scopeId); attribs
+                    .hasMoreElements()
+                    && retValue;) {
+                String attributeName = attribs.nextElement();
+                retValue = request.getAttribute(attributeName, scopeId).equals(
+                        otherRequest.getAttribute(attributeName));
+            }
+        }
+
+        return retValue;
+    }
+
+
+    /** {@inheritDoc} */
+    public Object get(Object key) {
+        return (request.getAttribute(key(key), scopeId));
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return (request.hashCode()) + scopeId;
+    }
+
+
+    /** {@inheritDoc} */
+    public boolean isEmpty() {
+        return (size() < 1);
+    }
+
+
+    /** {@inheritDoc} */
+    public Set<String> keySet() {
+        Set<String> set = new HashSet<String>();
+        Enumeration<String> keys = request.getAttributeNamesInScope(scopeId);
+        while (keys.hasMoreElements()) {
+            set.add(keys.nextElement());
+        }
+        return (set);
+    }
+
+
+    /** {@inheritDoc} */
+    public Object put(String key, Object value) {
+        if (value == null) {
+            return (remove(key));
+        }
+        String skey = key(key);
+        Object previous = request.getAttribute(skey, scopeId);
+        request.setAttribute(skey, value, scopeId);
+        return (previous);
+    }
+
+
+    /** {@inheritDoc} */
+    public void putAll(Map<? extends String, ? extends Object> map) {
+        Iterator<? extends String> keys = map.keySet().iterator();
+        while (keys.hasNext()) {
+            String key = keys.next();
+            request.setAttribute(key, map.get(key), scopeId);
+        }
+    }
+
+
+    /** {@inheritDoc} */
+    public Object remove(Object key) {
+        String skey = key(key);
+        Object previous = request.getAttribute(skey, scopeId);
+        request.removeAttribute(skey, scopeId);
+        return (previous);
+    }
+
+
+    /** {@inheritDoc} */
+    public int size() {
+        int n = 0;
+        Enumeration<String> keys = request.getAttributeNamesInScope(scopeId);
+        while (keys.hasMoreElements()) {
+            keys.nextElement();
+            n++;
+        }
+        return (n);
+    }
+
+
+    /** {@inheritDoc} */
+    public Collection<Object> values() {
+        List<Object> list = new ArrayList<Object>();
+        Enumeration<String> keys = request.getAttributeNamesInScope(scopeId);
+        while (keys.hasMoreElements()) {
+            list.add(request.getAttribute(keys.nextElement()));
+        }
+        return (list);
+    }
+
+
+    /**
+     * Returns the string representation of the key.
+     *
+     * @param key The key.
+     * @return The string representation of the key.
+     * @throws IllegalArgumentException If the key is <code>null</code>.
+     */
+    private String key(Object key) {
+        if (key == null) {
+            throw new IllegalArgumentException();
+        } else if (key instanceof String) {
+            return ((String) key);
+        } else {
+            return (key.toString());
+        }
+    }
+
+
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspScopeMap.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

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=884031&r1=884030&r2=884031&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 Wed Nov 25 10:52:52 2009
@@ -23,6 +23,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.util.Map;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -54,6 +55,30 @@
      */
     private Object[] requestObjects;
 
+    /**
+     * <p>The lazily instantiated <code>Map</code> of page scope
+     * attributes.</p>
+     */
+    private Map<String, Object> pageScope = null;
+
+    /**
+     * <p>The lazily instantiated <code>Map</code> of request scope
+     * attributes.</p>
+     */
+    private Map<String, Object> requestScope = null;
+
+    /**
+     * <p>The lazily instantiated <code>Map</code> of session scope
+     * attributes.</p>
+     */
+    private Map<String, Object> sessionScope = null;
+
+    /**
+     * <p>The lazily instantiated <code>Map</code> of application scope
+     * attributes.</p>
+     */
+    private Map<String, Object> applicationScope = null;
+
     public static JspTilesRequestContext createServletJspRequest(ApplicationContext applicationContext, PageContext pageContext) {
         return new JspTilesRequestContext(new ServletTilesRequestContext(
                 applicationContext, (HttpServletRequest) pageContext
@@ -103,16 +128,44 @@
 
     /** {@inheritDoc} */
     @Override
-    public PrintWriter getPrintWriter() throws IOException {
+    public PrintWriter getPrintWriter() {
         return new JspPrintWriterAdapter(pageContext.getOut());
     }
 
     /** {@inheritDoc} */
     @Override
-    public Writer getWriter() throws IOException {
+    public Writer getWriter() {
         return pageContext.getOut();
     }
 
+    public Map<String, Object> getPageScope() {
+        if ((pageScope == null) && (pageContext != null)) {
+            pageScope = new JspScopeMap(pageContext, PageContext.PAGE_SCOPE);
+        }
+        return (pageScope);
+    }
+
+    public Map<String, Object> getRequestScope() {
+        if ((requestScope == null) && (pageContext != null)) {
+            requestScope = new JspScopeMap(pageContext, PageContext.REQUEST_SCOPE);
+        }
+        return (requestScope);
+    }
+
+    public Map<String, Object> getSessionScope() {
+        if ((sessionScope == null) && (pageContext != null)) {
+            sessionScope = new JspScopeMap(pageContext, PageContext.SESSION_SCOPE);
+        }
+        return (sessionScope);
+    }
+
+    public Map<String, Object> getApplicationScope() {
+        if ((applicationScope == null) && (pageContext != null)) {
+            applicationScope = new JspScopeMap(pageContext, PageContext.APPLICATION_SCOPE);
+        }
+        return (applicationScope);
+    }
+
     /** {@inheritDoc} */
     @Override
     public Object[] getRequestObjects() {

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/request/jsp/JspUtil.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/request/jsp/JspUtil.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/request/jsp/JspUtil.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/request/jsp/JspUtil.java Wed Nov 25 10:52:52 2009
@@ -4,7 +4,7 @@
 import javax.servlet.jsp.PageContext;
 
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.util.ApplicationContextUtil;
+import org.apache.tiles.request.util.ApplicationAccess;
 
 public final class JspUtil {
 
@@ -13,7 +13,7 @@
 
     public static ApplicationContext getApplicationContext(JspContext jspContext) {
         return (ApplicationContext) jspContext.getAttribute(
-                ApplicationContextUtil.APPLICATION_CONTEXT_ATTRIBUTE,
+                ApplicationAccess.APPLICATION_CONTEXT_ATTRIBUTE,
                 PageContext.APPLICATION_SCOPE);
     }
 }

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletSessionScopeMap.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletSessionScopeMap.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletSessionScopeMap.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletSessionScopeMap.java Wed Nov 25 10:52:52 2009
@@ -20,7 +20,6 @@
  */
 package org.apache.tiles.portlet.context;
 
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
@@ -30,12 +29,13 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.portlet.PortletRequest;
 import javax.portlet.PortletSession;
 
 import org.apache.tiles.request.util.MapEntry;
 
 /**
- * <p>Private implementation of <code>Map</code> for portlet session
+ * <p>Private implementation of <code>Map</code> for HTTP session
  * attributes.</p>
  *
  * @version $Rev$ $Date$
@@ -43,47 +43,55 @@
 
 final class PortletSessionScopeMap implements Map<String, Object> {
 
-
     /**
-     * Constructor.
-     *
-     * @param session The portlet session to use.
+     * The request object to use.
      */
-    public PortletSessionScopeMap(PortletSession session) {
-        this.session = session;
-    }
+    private PortletRequest request;
 
+    private int scopeId;
 
     /**
-     * The portlet session to use.
+     * Constructor.
+     *
+     * @param request The request object to use.
      */
-    private PortletSession session = null;
-
+    public PortletSessionScopeMap(PortletRequest request, int scopeId) {
+        this.request = request;
+        this.scopeId = scopeId;
+    }
 
     /** {@inheritDoc} */
     public void clear() {
-        Iterator<String> keys = keySet().iterator();
-        while (keys.hasNext()) {
-            session.removeAttribute(keys.next());
+        PortletSession session = request.getPortletSession(false);
+        if (session != null) {
+            Iterator<String> keys = keySet().iterator();
+            while (keys.hasNext()) {
+                session.removeAttribute(keys.next(), scopeId);
+            }
         }
     }
 
 
     /** {@inheritDoc} */
     public boolean containsKey(Object key) {
-        return (session.getAttribute(key(key)) != null);
+        PortletSession session = request.getPortletSession(false);
+        if (session == null) {
+            return false;
+        }
+
+        return (session.getAttribute(key(key), scopeId) != null);
     }
 
 
     /** {@inheritDoc} */
     public boolean containsValue(Object value) {
-        if (value == null) {
+        PortletSession session = request.getPortletSession(false);
+        if (session == null || value == null) {
             return (false);
         }
-        Enumeration<String> keys =
-            session.getAttributeNames(PortletSession.PORTLET_SCOPE);
+        Enumeration<String> keys = session.getAttributeNames(scopeId);
         while (keys.hasMoreElements()) {
-            Object next = session.getAttribute(keys.nextElement());
+            Object next = session.getAttribute(keys.nextElement(), scopeId);
             if (next == value) {
                 return (true);
             }
@@ -94,13 +102,16 @@
 
     /** {@inheritDoc} */
     public Set<Map.Entry<String, Object>> entrySet() {
+        PortletSession session = request.getPortletSession(false);
         Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String, Object>>();
-        Enumeration<String> keys =
-            session.getAttributeNames(PortletSession.PORTLET_SCOPE);
-        String key;
-        while (keys.hasMoreElements()) {
-            key = keys.nextElement();
-            set.add(new MapEntry<String, Object>(key, session.getAttribute(key), true));
+        if (session != null) {
+            Enumeration<String> keys = session.getAttributeNames(scopeId);
+            String key;
+            while (keys.hasMoreElements()) {
+                key = keys.nextElement();
+                set.add(new MapEntry<String, Object>(key,
+                        session.getAttribute(key, scopeId), true));
+            }
         }
         return (set);
     }
@@ -109,15 +120,22 @@
     /** {@inheritDoc} */
     @Override
     public boolean equals(Object o) {
-        PortletSession otherSession = ((PortletSessionScopeMap) o).session;
         boolean retValue = true;
+
+        PortletSession session = request.getPortletSession(false);
         synchronized (session) {
-            for (Enumeration<String> attribs = session.getAttributeNames(); attribs
-                    .hasMoreElements()
-                    && retValue;) {
-                String attributeName = attribs.nextElement();
-                retValue = session.getAttribute(attributeName).equals(
-                        otherSession.getAttribute(attributeName));
+            PortletSession otherSession = ((PortletSessionScopeMap) o).request
+                    .getPortletSession(false);
+            if (session == null) {
+                retValue = otherSession == null;
+            } else {
+                for (Enumeration<String> attribs = session.getAttributeNames(scopeId); attribs
+                        .hasMoreElements()
+                        && retValue;) {
+                    String attributeName = attribs.nextElement();
+                    retValue = session.getAttribute(attributeName, scopeId).equals(
+                            otherSession.getAttribute(attributeName));
+                }
             }
         }
 
@@ -127,14 +145,24 @@
 
     /** {@inheritDoc} */
     public Object get(Object key) {
-        return (session.getAttribute(key(key)));
+        PortletSession session = request.getPortletSession(false);
+        if (session == null) {
+            return null;
+        }
+
+        return (session.getAttribute(key(key), scopeId));
     }
 
 
     /** {@inheritDoc} */
     @Override
     public int hashCode() {
-        return (session.hashCode());
+        PortletSession session = request.getPortletSession(false);
+        if (session == null) {
+            return 0;
+        }
+
+        return (session.hashCode() + scopeId);
     }
 
 
@@ -146,11 +174,13 @@
 
     /** {@inheritDoc} */
     public Set<String> keySet() {
+        PortletSession session = request.getPortletSession(false);
         Set<String> set = new HashSet<String>();
-        Enumeration<String> keys =
-            session.getAttributeNames(PortletSession.PORTLET_SCOPE);
-        while (keys.hasMoreElements()) {
-            set.add(keys.nextElement());
+        if (session != null) {
+            Enumeration<String> keys = session.getAttributeNames(scopeId);
+            while (keys.hasMoreElements()) {
+                set.add(keys.nextElement());
+            }
         }
         return (set);
     }
@@ -158,55 +188,65 @@
 
     /** {@inheritDoc} */
     public Object put(String key, Object value) {
+        PortletSession session = request.getPortletSession();
         if (value == null) {
             return (remove(key));
         }
         String skey = key(key);
-        Object previous = session.getAttribute(skey);
-        session.setAttribute(skey, value);
+        Object previous = session.getAttribute(skey, scopeId);
+        session.setAttribute(skey, value, scopeId);
         return (previous);
     }
 
 
     /** {@inheritDoc} */
     public void putAll(Map<? extends String, ? extends Object> map) {
+        PortletSession session = request.getPortletSession();
         Iterator<? extends String> keys = map.keySet().iterator();
         while (keys.hasNext()) {
             String key = keys.next();
-            session.setAttribute(key, map.get(key));
+            session.setAttribute(key, map.get(key), scopeId);
         }
     }
 
 
     /** {@inheritDoc} */
     public Object remove(Object key) {
+        PortletSession session = request.getPortletSession(false);
+        if (session == null) {
+            return null;
+        }
+
         String skey = key(key);
-        Object previous = session.getAttribute(skey);
-        session.removeAttribute(skey);
+        Object previous = session.getAttribute(skey, scopeId);
+        session.removeAttribute(skey, scopeId);
         return (previous);
     }
 
 
     /** {@inheritDoc} */
     public int size() {
+        PortletSession session = request.getPortletSession(false);
         int n = 0;
-        Enumeration<String> keys =
-            session.getAttributeNames(PortletSession.PORTLET_SCOPE);
-        while (keys.hasMoreElements()) {
-            keys.nextElement();
-            n++;
+        if (session != null) {
+            Enumeration<String> keys = session.getAttributeNames(scopeId);
+            while (keys.hasMoreElements()) {
+                keys.nextElement();
+                n++;
+            }
         }
         return (n);
     }
 
-
     /** {@inheritDoc} */
     public Collection<Object> values() {
+        PortletSession session = request.getPortletSession(false);
         List<Object> list = new ArrayList<Object>();
-        Enumeration<String> keys =
-            session.getAttributeNames(PortletSession.PORTLET_SCOPE);
-        while (keys.hasMoreElements()) {
-            list.add(session.getAttribute(keys.nextElement()));
+        if (session != null) {
+            Enumeration<String> keys = session.getAttributeNames(scopeId);
+            while (keys.hasMoreElements()) {
+                list.add(session.getAttribute(keys.nextElement(), scopeId));
+            }
         }
         return (list);
     }
@@ -228,6 +268,4 @@
             return (key.toString());
         }
     }
-
-
 }

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java Wed Nov 25 10:52:52 2009
@@ -33,20 +33,19 @@
 import javax.portlet.PortletRequest;
 import javax.portlet.PortletRequestDispatcher;
 import javax.portlet.PortletResponse;
+import javax.portlet.PortletSession;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
 
+import org.apache.tiles.request.AbstractRequest;
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.Request;
-import org.apache.tiles.request.util.TilesApplicationContextWrapper;
 
 /**
  * Portlet-based TilesApplicationContext implementation.
  *
  * @version $Rev$ $Date$
  */
-public class PortletTilesRequestContext extends TilesApplicationContextWrapper
-        implements Request {
+public class PortletTilesRequestContext extends AbstractRequest {
 
     /**
      * <p>The lazily instantiated <code>Map</code> of header name-value
@@ -96,6 +95,12 @@
      */
     private Map<String, Object> sessionScope = null;
 
+    /**
+     * <p>The lazily instantiated <code>Map</code> of portlet session scope
+     * attributes.</p>
+     */
+    private Map<String, Object> portletSessionScope = null;
+
 
     /**
      * <p>Indicates whether the request is an ActionRequest or RenderRequest.
@@ -237,15 +242,21 @@
     /** {@inheritDoc} */
     public Map<String, Object> getSessionScope() {
         if ((sessionScope == null) && (request != null)) {
-            sessionScope =
-                new PortletSessionScopeMap(request.getPortletSession());
+            sessionScope = new PortletSessionScopeMap(request, PortletSession.APPLICATION_SCOPE);
         }
         return (sessionScope);
     }
 
     /** {@inheritDoc} */
-    public ApplicationContext getApplicationContext() {
-        return getWrappedApplicationContext();
+    public Map<String, Object> getPortletSessionScope() {
+        if ((portletSessionScope == null) && (request != null)) {
+            portletSessionScope = new PortletSessionScopeMap(request, PortletSession.PORTLET_SCOPE);
+        }
+        return (portletSessionScope);
+    }
+
+    public Map<String, Object> getDefaultScope() {
+        return getRequestScope();
     }
 
     /** {@inheritDoc} */
@@ -313,9 +324,8 @@
     public Locale getRequestLocale() {
         if (request != null) {
             return request.getLocale();
-        } else {
-            return null;
         }
+        return null;
     }
 
     /** {@inheritDoc} */

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletUtil.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletUtil.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletUtil.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/portlet/context/PortletUtil.java Wed Nov 25 10:52:52 2009
@@ -25,7 +25,7 @@
 import javax.portlet.PortletRequest;
 
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.util.ApplicationContextUtil;
+import org.apache.tiles.request.util.ApplicationAccess;
 
 
 /**
@@ -75,6 +75,6 @@
     public static ApplicationContext getApplicationContext(
             PortletContext portletContext) {
         return (ApplicationContext) portletContext
-                .getAttribute(ApplicationContextUtil.APPLICATION_CONTEXT_ATTRIBUTE);
+                .getAttribute(ApplicationAccess.APPLICATION_CONTEXT_ATTRIBUTE);
     }
 }

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletTilesRequestContext.java Wed Nov 25 10:52:52 2009
@@ -32,17 +32,15 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.tiles.request.AbstractRequest;
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.Request;
-import org.apache.tiles.request.util.TilesApplicationContextWrapper;
 
 /**
  * Servlet-based implementation of the TilesApplicationContext interface.
  *
  * @version $Rev$ $Date$
  */
-public class ServletTilesRequestContext extends TilesApplicationContextWrapper
-        implements Request {
+public class ServletTilesRequestContext extends AbstractRequest {
 
     /**
      * The request object to use.
@@ -189,9 +187,8 @@
 
     }
 
-    /** {@inheritDoc} */
-    public ApplicationContext getApplicationContext() {
-        return getWrappedApplicationContext();
+    public Map<String, Object> getDefaultScope() {
+        return getRequestScope();
     }
 
     /** {@inheritDoc} */

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletUtil.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletUtil.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletUtil.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletUtil.java Wed Nov 25 10:52:52 2009
@@ -28,7 +28,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.util.ApplicationContextUtil;
+import org.apache.tiles.request.util.ApplicationAccess;
 
 /**
  * Utilities for Tiles request servlet support.
@@ -99,6 +99,6 @@
 
     public static ApplicationContext getApplicationContext(ServletContext servletContext) {
         return (ApplicationContext) servletContext
-                .getAttribute(ApplicationContextUtil.APPLICATION_CONTEXT_ATTRIBUTE);
+                .getAttribute(ApplicationAccess.APPLICATION_CONTEXT_ATTRIBUTE);
     }
 }

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletTilesRequestContextTest.java Wed Nov 25 10:52:52 2009
@@ -37,9 +37,6 @@
 import org.apache.shale.test.mock.MockHttpSession;
 import org.apache.shale.test.mock.MockServletContext;
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.Request;
-import org.apache.tiles.request.servlet.ServletUtil;
-import org.apache.tiles.request.servlet.ServletTilesRequestContext;
 import org.easymock.classextension.EasyMock;
 
 /**
@@ -55,7 +52,7 @@
     /**
      * The request context.
      */
-    private Request context;
+    private ServletTilesRequestContext context;
 
     /**
      * The servlet context.
@@ -364,13 +361,13 @@
 
         /** {@inheritDoc} */
         @Override
-        protected void forward(String path) throws IOException {
+        protected void forward(String path) {
             forwardCount++;
         }
 
         /** {@inheritDoc} */
         @Override
-        public void include(String path) throws IOException {
+        public void include(String path) {
             includeCount++;
         }
 

Added: tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java?rev=884031&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java Wed Nov 25 10:52:52 2009
@@ -0,0 +1,214 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tiles.velocity.context;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tiles.request.util.MapEntry;
+import org.apache.velocity.context.Context;
+
+/**
+ * <p>Private implementation of <code>Map</code> for servlet request
+ * attributes.</p>
+ *
+ * @version $Rev$ $Date$
+ */
+
+final class VelocityScopeMap implements Map<String, Object> {
+
+
+    /**
+     * The request object to use.
+     */
+    private Context request = null;
+
+
+    /**
+     * Constructor.
+     *
+     * @param request The request object to use.
+     */
+    public VelocityScopeMap(Context request) {
+        this.request = request;
+    }
+
+
+    /** {@inheritDoc} */
+    public void clear() {
+        Object[] keys = request.getKeys();
+        for (Object key: keys) {
+            request.remove(key);
+        }
+    }
+
+
+    /** {@inheritDoc} */
+    public boolean containsKey(Object key) {
+        return request.containsKey(key);
+    }
+
+
+    /** {@inheritDoc} */
+    public boolean containsValue(Object value) {
+        if (value == null) {
+            return (false);
+        }
+        Object[] keys = request.getKeys();
+        for (Object key : keys) {
+            Object next = request.get((String) key);
+            if (next == value) {
+                return (true);
+            }
+        }
+        return (false);
+    }
+
+
+    /** {@inheritDoc} */
+    public Set<Map.Entry<String, Object>> entrySet() {
+        Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String, Object>>();
+        Object[] keys = request.getKeys();
+        for (Object key : keys) {
+            set.add(new MapEntry<String, Object>((String) key,
+                    request.get((String) key), true));
+        }
+        return (set);
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object o) {
+        Context otherRequest = ((VelocityScopeMap) o).request;
+        boolean retValue = true;
+        synchronized (request) {
+            for (Object key : request.getKeys()) {
+                String attributeName = (String) key;
+                retValue = request.get(attributeName).equals(
+                        otherRequest.get(attributeName));
+            }
+        }
+
+        return retValue;
+    }
+
+
+    /** {@inheritDoc} */
+    public Object get(Object key) {
+        return (request.get(key(key)));
+    }
+
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return (request.hashCode());
+    }
+
+
+    /** {@inheritDoc} */
+    public boolean isEmpty() {
+        return (size() < 1);
+    }
+
+
+    /** {@inheritDoc} */
+    public Set<String> keySet() {
+        Set<String> set = new HashSet<String>();
+        for (Object key : request.getKeys()) {
+            set.add((String) key);
+        }
+        return (set);
+    }
+
+
+    /** {@inheritDoc} */
+    public Object put(String key, Object value) {
+        if (value == null) {
+            return (remove(key));
+        }
+        String skey = key(key);
+        Object previous = request.get(skey);
+        request.put(skey, value);
+        return (previous);
+    }
+
+
+    /** {@inheritDoc} */
+    public void putAll(Map<? extends String, ? extends Object> map) {
+        Iterator<? extends String> keys = map.keySet().iterator();
+        while (keys.hasNext()) {
+            String key = keys.next();
+            request.put(key, map.get(key));
+        }
+    }
+
+
+    /** {@inheritDoc} */
+    public Object remove(Object key) {
+        String skey = key(key);
+        Object previous = request.get(skey);
+        request.remove(skey);
+        return (previous);
+    }
+
+
+    /** {@inheritDoc} */
+    public int size() {
+        return request.getKeys().length;
+    }
+
+
+    /** {@inheritDoc} */
+    public Collection<Object> values() {
+        List<Object> list = new ArrayList<Object>();
+        for (Object key : request.getKeys()) {
+            list.add(request.get((String) key));
+        }
+        return (list);
+    }
+
+
+    /**
+     * Returns the string representation of the key.
+     *
+     * @param key The key.
+     * @return The string representation of the key.
+     * @throws IllegalArgumentException If the key is <code>null</code>.
+     */
+    private String key(Object key) {
+        if (key == null) {
+            throw new IllegalArgumentException();
+        } else if (key instanceof String) {
+            return ((String) key);
+        } else {
+            return (key.toString());
+        }
+    }
+
+
+}

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles-request/tiles-request-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityScopeMap.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

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=884031&r1=884030&r2=884031&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 Wed Nov 25 10:52:52 2009
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.util.Map;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -61,6 +62,8 @@
      */
     private Writer writer;
 
+    private Map<String, Object> pageScope;
+
     /**
      * Constructor.
      *
@@ -108,21 +111,20 @@
 
     /** {@inheritDoc} */
     @Override
-    public PrintWriter getPrintWriter() throws IOException {
+    public PrintWriter getPrintWriter() {
         if (writer == null) {
             throw new IllegalStateException(
                     "A writer-less Tiles request has been created, cannot return a PrintWriter");
         }
         if (writer instanceof PrintWriter) {
             return (PrintWriter) writer;
-        } else {
-            return new PrintWriter(writer);
         }
+        return new PrintWriter(writer);
     }
 
     /** {@inheritDoc} */
     @Override
-    public Writer getWriter() throws IOException {
+    public Writer getWriter() {
         if (writer == null) {
             throw new IllegalStateException(
                     "A writer-less Tiles request has been created, cannot return a PrintWriter");
@@ -151,6 +153,13 @@
         return requestObjects;
     }
 
+    public Map<String, Object> getPageScope() {
+        if (pageScope == null) {
+            pageScope = new VelocityScopeMap(ctx);
+        }
+        return pageScope;
+    }
+
     public static Request createVelocityRequest(ApplicationContext applicationContext,
             HttpServletRequest request, HttpServletResponse response,
             Context velocityContext, Writer writer) {

Modified: tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java Wed Nov 25 10:52:52 2009
@@ -137,7 +137,7 @@
         ApplicationContext applicationContext = request.getApplicationContext();
         TilesContainer container = getContainer(applicationContext, key);
         if (container != null) {
-            request.getRequestScope().put(CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
+            request.getContext("request").put(CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
         } else {
             throw new NoSuchContainerException("The container with the key '"
                     + key + "' cannot be found");
@@ -154,7 +154,7 @@
     public static void setCurrentContainer(Request request,
             TilesContainer container) {
         if (container != null) {
-            request.getRequestScope().put(CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
+            request.getContext("request").put(CURRENT_CONTAINER_ATTRIBUTE_NAME, container);
         } else {
             throw new NullPointerException("The container cannot be null");
         }
@@ -170,7 +170,7 @@
      */
     public static TilesContainer getCurrentContainer(Request request) {
         ApplicationContext context = request.getApplicationContext();
-        Map<String, Object> requestScope = request.getRequestScope();
+        Map<String, Object> requestScope = request.getContext("request");
         TilesContainer container = (TilesContainer) requestScope.get(CURRENT_CONTAINER_ATTRIBUTE_NAME);
         if (container == null) {
             container = getContainer(context);

Modified: tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java Wed Nov 25 10:52:52 2009
@@ -126,7 +126,7 @@
         Map<String, Object> requestScope = new HashMap<String, Object>();
 
         expect(context.getApplicationScope()).andReturn(attribs).anyTimes();
-        expect(request.getRequestScope()).andReturn(requestScope);
+        expect(request.getContext("request")).andReturn(requestScope);
         expect(request.getApplicationContext()).andReturn(context);
         replay(request, context, container);
         TilesAccess.setCurrentContainer(request, "myKey");
@@ -168,7 +168,7 @@
         Map<String, Object> requestScope = new HashMap<String, Object>();
 
         expect(context.getApplicationScope()).andReturn(attribs).anyTimes();
-        expect(request.getRequestScope()).andReturn(requestScope);
+        expect(request.getContext("request")).andReturn(requestScope);
 
         replay(request, context, container);
         TilesAccess.setCurrentContainer(request, container);
@@ -211,7 +211,7 @@
 
         expect(request.getApplicationContext()).andReturn(context);
         expect(context.getApplicationScope()).andReturn(attribs).anyTimes();
-        expect(request.getRequestScope()).andReturn(requestScope);
+        expect(request.getContext("request")).andReturn(requestScope);
 
         replay(request, context, container);
         assertEquals(container, TilesAccess.getCurrentContainer(request));
@@ -232,7 +232,7 @@
 
         expect(request.getApplicationContext()).andReturn(context);
         expect(context.getApplicationScope()).andReturn(attribs).anyTimes();
-        expect(request.getRequestScope()).andReturn(requestScope);
+        expect(request.getContext("request")).andReturn(requestScope);
 
         replay(request, context, container);
         assertEquals(container, TilesAccess.getCurrentContainer(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=884031&r1=884030&r2=884031&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 Wed Nov 25 10:52:52 2009
@@ -327,10 +327,10 @@
     protected ArrayStack<AttributeContext> getContextStack(Request tilesContext) {
         ArrayStack<AttributeContext> contextStack =
             (ArrayStack<AttributeContext>) tilesContext
-                .getRequestScope().get(ATTRIBUTE_CONTEXT_STACK);
+                .getContext("request").get(ATTRIBUTE_CONTEXT_STACK);
         if (contextStack == null) {
             contextStack = new ArrayStack<AttributeContext>();
-            tilesContext.getRequestScope().put(ATTRIBUTE_CONTEXT_STACK,
+            tilesContext.getContext("request").put(ATTRIBUTE_CONTEXT_STACK,
                     contextStack);
         }
 
@@ -373,9 +373,8 @@
         ArrayStack<AttributeContext> contextStack = getContextStack(tilesContext);
         if (!contextStack.isEmpty()) {
             return contextStack.peek();
-        } else {
-            return null;
         }
+        return null;
     }
 
     /**

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java Wed Nov 25 10:52:52 2009
@@ -226,7 +226,7 @@
     @SuppressWarnings("unchecked")
     protected Map<String, Definition> getDefinitions(
             Request request) {
-        return (Map<String, Definition>) request.getRequestScope()
+        return (Map<String, Definition>) request.getContext("request")
                 .get(definitionsAttributeName);
     }
 
@@ -242,10 +242,10 @@
             Request request) {
         Map<String, Definition> definitions =
             (Map<String, Definition>) request
-                .getRequestScope().get(definitionsAttributeName);
+                .getContext("request").get(definitionsAttributeName);
         if (definitions == null) {
             definitions = new HashMap<String, Definition>();
-            request.getRequestScope()
+            request.getContext("request")
                     .put(definitionsAttributeName, definitions);
         }
 

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java?rev=884031&r1=884030&r2=884031&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java Wed Nov 25 10:52:52 2009
@@ -44,7 +44,7 @@
     /** {@inheritDoc} */
     public Locale resolveLocale(Request request) {
         Locale retValue = null;
-        Map<String, Object> session = request.getSessionScope();
+        Map<String, Object> session = request.getContext("request");
         if (session != null) {
             retValue = (Locale) session.get(DefaultLocaleResolver.LOCALE_KEY);
         }