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 2010/09/08 21:50:10 UTC

svn commit: r995228 - in /tiles/sandbox/trunk: tiles-request/tiles-request-api/ tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/ tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/ tiles-reques...

Author: apetrelli
Date: Wed Sep  8 19:50:09 2010
New Revision: 995228

URL: http://svn.apache.org/viewvc?rev=995228&view=rev
Log:
TILESSB-36
Refactored TilesFreemarkerServlet and moved to tiles-request-api.
Moved ClassUtil and relative classes in tiles-request-api.

Added:
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/
      - copied from r992052, tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/reflect/
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/
      - copied from r992052, tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/reflect/
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/SharedVariableFactory.java   (with props)
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/TilesFreemarkerServlet.java
      - copied, changed from r992052, tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/WebappClassTemplateLoader.java
      - copied, changed from r992052, tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/WebappClassTemplateLoader.java
    tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/package.html
      - copied unchanged from r992052, tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/package.html
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/TilesSharedVariableFactory.java   (with props)
Removed:
    tiles/sandbox/trunk/tiles3/tiles-api/src/main/java/org/apache/tiles/reflect/
    tiles/sandbox/trunk/tiles3/tiles-api/src/test/java/org/apache/tiles/reflect/
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/
Modified:
    tiles/sandbox/trunk/tiles-request/tiles-request-api/pom.xml
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotAccessMethodException.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotInstantiateObjectException.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/ClassUtil.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotAccessMethodExceptionTest.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotInstantiateObjectExceptionTest.java
    tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/ClassUtilTest.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/util/CombinedBeanInfo.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/util/CombinedBeanInfoTest.java
    tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextELResolverTest.java
    tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
    tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/module/ModularTilesInitializer.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRenderer.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRendererTest.java
    tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextVariableResolverFactory.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-test-pom/tiles-test/src/main/webapp/WEB-INF/web.xml

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/pom.xml
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/pom.xml?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/pom.xml (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/pom.xml Wed Sep  8 19:50:09 2010
@@ -12,6 +12,12 @@
 	<name>Tiles request - API</name>
 	<description>API for the Tiles Request framework.</description>
 	<dependencies>
+        <dependency>
+        	<groupId>org.slf4j</groupId>
+        	<artifactId>slf4j-jdk14</artifactId>
+        	<version>1.5.8</version>
+        	<optional>true</optional>
+        </dependency>
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotAccessMethodException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotAccessMethodException.java?rev=995228&r1=992052&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotAccessMethodException.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotAccessMethodException.java Wed Sep  8 19:50:09 2010
@@ -18,9 +18,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tiles.reflect;
+package org.apache.tiles.request.reflect;
 
-import org.apache.tiles.TilesException;
+import org.apache.tiles.request.RequestException;
 
 /**
  * Indicates that a method cannot be accessed.
@@ -28,7 +28,7 @@ import org.apache.tiles.TilesException;
  * @version $Rev$ $Date$
  * @since 2.1.0
  */
-public class CannotAccessMethodException extends TilesException {
+public class CannotAccessMethodException extends RequestException {
 
     /**
      * Constructor.

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotInstantiateObjectException.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotInstantiateObjectException.java?rev=995228&r1=992052&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotInstantiateObjectException.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/CannotInstantiateObjectException.java Wed Sep  8 19:50:09 2010
@@ -18,9 +18,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tiles.reflect;
+package org.apache.tiles.request.reflect;
 
-import org.apache.tiles.TilesException;
+import org.apache.tiles.request.RequestException;
 
 /**
  * Indicates that an object cannot be instantiated.
@@ -28,7 +28,7 @@ import org.apache.tiles.TilesException;
  * @version $Rev$ $Date$
  * @since 2.1.0
  */
-public class CannotInstantiateObjectException extends TilesException {
+public class CannotInstantiateObjectException extends RequestException {
 
     /**
      * Constructor.

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/ClassUtil.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/ClassUtil.java?rev=995228&r1=992052&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/ClassUtil.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/reflect/ClassUtil.java Wed Sep  8 19:50:09 2010
@@ -18,7 +18,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tiles.reflect;
+package org.apache.tiles.request.reflect;
 
 import java.beans.BeanInfo;
 import java.beans.Introspector;

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotAccessMethodExceptionTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotAccessMethodExceptionTest.java?rev=995228&r1=992052&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotAccessMethodExceptionTest.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotAccessMethodExceptionTest.java Wed Sep  8 19:50:09 2010
@@ -19,10 +19,11 @@
  * under the License.
  */
 
-package org.apache.tiles.reflect;
+package org.apache.tiles.request.reflect;
 
 import static org.junit.Assert.*;
 
+import org.apache.tiles.request.reflect.CannotAccessMethodException;
 import org.junit.Test;
 
 /**

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotInstantiateObjectExceptionTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotInstantiateObjectExceptionTest.java?rev=995228&r1=992052&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotInstantiateObjectExceptionTest.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/CannotInstantiateObjectExceptionTest.java Wed Sep  8 19:50:09 2010
@@ -19,10 +19,12 @@
  * under the License.
  */
 
-package org.apache.tiles.reflect;
+package org.apache.tiles.request.reflect;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
+import org.apache.tiles.request.reflect.CannotInstantiateObjectException;
 import org.junit.Test;
 
 /**

Modified: tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/ClassUtilTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/ClassUtilTest.java?rev=995228&r1=992052&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/ClassUtilTest.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/reflect/ClassUtilTest.java Wed Sep  8 19:50:09 2010
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-package org.apache.tiles.reflect;
+package org.apache.tiles.request.reflect;
 
 import static org.junit.Assert.*;
 
@@ -27,6 +27,8 @@ import java.beans.PropertyDescriptor;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.tiles.request.reflect.CannotInstantiateObjectException;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.junit.Test;
 
 /**
@@ -42,7 +44,7 @@ public class ClassUtilTest {
     private static final int MAP_SIZE = 3;
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#collectBeanInfo(java.lang.Class, java.util.Map)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#collectBeanInfo(java.lang.Class, java.util.Map)}.
      */
     @Test
     public void testCollectBeanInfo() {
@@ -67,7 +69,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#getClass(String, Class)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#getClass(String, Class)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test
@@ -77,7 +79,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#getClass(String, Class)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#getClass(String, Class)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test(expected=ClassNotFoundException.class)
@@ -86,7 +88,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#instantiate(String, boolean)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#instantiate(String, boolean)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test
@@ -96,7 +98,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#instantiate(String, boolean)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#instantiate(String, boolean)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test
@@ -105,7 +107,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#instantiate(String)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#instantiate(String)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test(expected=CannotInstantiateObjectException.class)
@@ -114,7 +116,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#instantiate(String)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#instantiate(String)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test(expected=CannotInstantiateObjectException.class)
@@ -123,7 +125,7 @@ public class ClassUtilTest {
     }
 
     /**
-     * Test method for {@link org.apache.tiles.reflect.ClassUtil#instantiate(String)}.
+     * Test method for {@link org.apache.tiles.request.reflect.ClassUtil#instantiate(String)}.
      * @throws ClassNotFoundException If something goes wrong.
      */
     @Test(expected=CannotInstantiateObjectException.class)

Added: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/SharedVariableFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/SharedVariableFactory.java?rev=995228&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/SharedVariableFactory.java (added)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/SharedVariableFactory.java Wed Sep  8 19:50:09 2010
@@ -0,0 +1,8 @@
+package org.apache.tiles.request.freemarker.servlet;
+
+import freemarker.template.TemplateModel;
+
+public interface SharedVariableFactory {
+
+    TemplateModel create();
+}

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

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

Copied: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/TilesFreemarkerServlet.java (from r992052, tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java)
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/TilesFreemarkerServlet.java?p2=tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/TilesFreemarkerServlet.java&p1=tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java&r1=992052&r2=995228&rev=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/TilesFreemarkerServlet.java Wed Sep  8 19:50:09 2010
@@ -19,13 +19,19 @@
  * under the License.
  */
 
-package org.apache.tiles.freemarker.servlet;
+package org.apache.tiles.request.freemarker.servlet;
 
-import org.apache.tiles.freemarker.template.TilesFMModelRepository;
+import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+import org.apache.tiles.request.reflect.ClassUtil;
 
 import freemarker.cache.TemplateLoader;
-import freemarker.ext.beans.BeanModel;
-import freemarker.ext.beans.BeansWrapper;
 import freemarker.ext.servlet.FreemarkerServlet;
 import freemarker.template.Configuration;
 
@@ -37,14 +43,44 @@ import freemarker.template.Configuration
  */
 public class TilesFreemarkerServlet extends FreemarkerServlet {
 
+    private static final long serialVersionUID = 4301098067909854507L;
+
+    public static String CUSTOM_SHARED_VARIABLE_FACTORIES_INIT_PARAM =
+        "org.apache.tiles.request.freemarker.CUSTOM_SHARED_VARIABLE_FACTORIES";
+
+    private Map<String, SharedVariableFactory> name2variableFactory = new LinkedHashMap<String, SharedVariableFactory>();
+
+    @Override
+    public void init(ServletConfig config) throws ServletException {
+        String param = config.getInitParameter(CUSTOM_SHARED_VARIABLE_FACTORIES_INIT_PARAM);
+        if (param != null) {
+            String[] couples = param.split("\\s*;\\s*");
+            for (int i=0; i < couples.length; i++) {
+                String[] couple = couples[i].split("\\s*,\\s*");
+                if (couple == null || couple.length != 2) {
+                    throw new ServletException(
+                            "Cannot parse custom shared variable partial init param: '"
+                                    + couples[i] + "'");
+                }
+                name2variableFactory.put(couple[0],
+                        (SharedVariableFactory) ClassUtil.instantiate(couple[1]));
+            }
+        }
+        super.init(new ExcludingParameterServletConfig(config));
+    }
+
+    public void addSharedVariableFactory(String variableName, SharedVariableFactory factory) {
+        name2variableFactory.put(variableName, factory);
+    }
+
     /** {@inheritDoc} */
     @Override
     protected Configuration createConfiguration() {
         Configuration configuration = super.createConfiguration();
 
-        BeanModel tilesBeanModel = new BeanModel(new TilesFMModelRepository(),
-                BeansWrapper.getDefaultInstance());
-        configuration.setSharedVariable("tiles", tilesBeanModel);
+        for (Map.Entry<String, SharedVariableFactory> entry : name2variableFactory.entrySet()) {
+            configuration.setSharedVariable(entry.getKey(), entry.getValue().create());
+        }
         return configuration;
     }
 
@@ -54,4 +90,71 @@ public class TilesFreemarkerServlet exte
     protected TemplateLoader createTemplateLoader(String templatePath) {
         return new WebappClassTemplateLoader(getServletContext());
     }
+
+    private class ExcludingParameterServletConfig implements ServletConfig {
+
+        private ServletConfig config;
+
+        public ExcludingParameterServletConfig(ServletConfig config) {
+            this.config = config;
+        }
+
+        @Override
+        public String getServletName() {
+            return config.getServletName();
+        }
+
+        @Override
+        public ServletContext getServletContext() {
+            return config.getServletContext();
+        }
+
+        @Override
+        public String getInitParameter(String name) {
+            if (CUSTOM_SHARED_VARIABLE_FACTORIES_INIT_PARAM.equals(name)) {
+                return null;
+            }
+            return config.getInitParameter(name);
+        }
+
+        @SuppressWarnings({ "rawtypes", "unchecked" })
+        @Override
+        public Enumeration getInitParameterNames() {
+            return new SkippingEnumeration(config.getInitParameterNames());
+        }
+
+    }
+
+    private static class SkippingEnumeration implements Enumeration<String> {
+
+        private Enumeration<String> enumeration;
+
+        private String next = null;
+
+        public SkippingEnumeration(Enumeration<String> enumeration) {
+            this.enumeration = enumeration;
+            updateNextElement();
+        }
+
+        @Override
+        public boolean hasMoreElements() {
+            return next != null;
+        }
+
+        @Override
+        public String nextElement() {
+            String retValue = next;
+            updateNextElement();
+            return retValue;
+        }
+
+        private void updateNextElement() {
+            String value = null;
+            while (this.enumeration.hasMoreElements()
+                    && (value = this.enumeration.nextElement())
+                            .equals(CUSTOM_SHARED_VARIABLE_FACTORIES_INIT_PARAM));
+            next = value;
+        }
+
+    }
 }

Copied: tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/WebappClassTemplateLoader.java (from r992052, tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/WebappClassTemplateLoader.java)
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/WebappClassTemplateLoader.java?p2=tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/WebappClassTemplateLoader.java&p1=tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/WebappClassTemplateLoader.java&r1=992052&r2=995228&rev=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/WebappClassTemplateLoader.java (original)
+++ tiles/sandbox/trunk/tiles-request/tiles-request-freemarker/src/main/java/org/apache/tiles/request/freemarker/servlet/WebappClassTemplateLoader.java Wed Sep  8 19:50:09 2010
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-package org.apache.tiles.freemarker.servlet;
+package org.apache.tiles.request.freemarker.servlet;
 
 import java.io.IOException;
 import java.io.Reader;

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java Wed Sep  8 19:50:09 2010
@@ -23,8 +23,8 @@ package org.apache.tiles.preparer;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Wed Sep  8 19:50:09 2010
@@ -27,10 +27,10 @@ import org.apache.tiles.TilesContainer;
 import org.apache.tiles.awareness.TilesContainerAware;
 import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
 import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.renderer.AttributeRenderer;
 import org.apache.tiles.renderer.RendererFactory;
 import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.apache.tiles.request.util.ApplicationContextAware;
 
 /**

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/util/CombinedBeanInfo.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/util/CombinedBeanInfo.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/util/CombinedBeanInfo.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/util/CombinedBeanInfo.java Wed Sep  8 19:50:09 2010
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.tiles.reflect.ClassUtil;
+import org.apache.tiles.request.reflect.ClassUtil;
 
 /**
  * Contains the bean infos about one or more classes.

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/util/CombinedBeanInfoTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/util/CombinedBeanInfoTest.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/util/CombinedBeanInfoTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/util/CombinedBeanInfoTest.java Wed Sep  8 19:50:09 2010
@@ -12,9 +12,9 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.junit.Before;
 import org.junit.Test;
 

Modified: tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextELResolverTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextELResolverTest.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextELResolverTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-el/src/test/java/org/apache/tiles/el/TilesContextELResolverTest.java Wed Sep  8 19:50:09 2010
@@ -32,9 +32,9 @@ import java.util.Map;
 import javax.el.ELContext;
 import javax.el.ELResolver;
 
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.junit.Before;
 import org.junit.Test;
 

Modified: tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java Wed Sep  8 19:50:09 2010
@@ -58,6 +58,7 @@ import org.apache.tiles.evaluator.Attrib
 import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
 import org.apache.tiles.factory.BasicTilesContainerFactory;
 import org.apache.tiles.factory.TilesContainerFactoryException;
+import org.apache.tiles.freemarker.TilesSharedVariableFactory;
 import org.apache.tiles.freemarker.renderer.FreeMarkerAttributeRenderer;
 import org.apache.tiles.impl.mgmt.CachingTilesContainer;
 import org.apache.tiles.locale.LocaleResolver;
@@ -80,6 +81,7 @@ import org.apache.tiles.renderer.impl.Ch
 import org.apache.tiles.renderer.impl.DelegateAttributeRenderer;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.freemarker.servlet.TilesFreemarkerServlet;
 import org.apache.tiles.request.velocity.render.VelocityRenderer;
 import org.apache.tiles.request.velocity.render.VelocityRendererBuilder;
 import org.apache.tiles.util.URLUtil;
@@ -140,6 +142,9 @@ public class CompleteAutoloadTilesContai
         freemarkerRenderer.setParameter("template_update_delay", "0");
         freemarkerRenderer.setParameter("default_encoding", "ISO-8859-1");
         freemarkerRenderer.setParameter("number_format", "0.##########");
+        freemarkerRenderer.setParameter(
+                TilesFreemarkerServlet.CUSTOM_SHARED_VARIABLE_FACTORIES_INIT_PARAM,
+                "tiles," + TilesSharedVariableFactory.class.getName());
         freemarkerRenderer.commit();
         rendererFactory.registerRenderer(FREEMARKER_RENDERER_NAME, freemarkerRenderer);
 

Modified: tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/module/ModularTilesInitializer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/module/ModularTilesInitializer.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/module/ModularTilesInitializer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/module/ModularTilesInitializer.java Wed Sep  8 19:50:09 2010
@@ -34,8 +34,8 @@ import java.util.jar.Manifest;
 import javax.servlet.ServletContext;
 
 import org.apache.tiles.definition.DefinitionsFactoryException;
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.apache.tiles.request.servlet.wildcard.WildcardServletApplicationContext;
 import org.apache.tiles.startup.TilesInitializer;
 import org.slf4j.Logger;

Added: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/TilesSharedVariableFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/TilesSharedVariableFactory.java?rev=995228&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/TilesSharedVariableFactory.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/TilesSharedVariableFactory.java Wed Sep  8 19:50:09 2010
@@ -0,0 +1,18 @@
+package org.apache.tiles.freemarker;
+
+import org.apache.tiles.freemarker.template.TilesFMModelRepository;
+import org.apache.tiles.request.freemarker.servlet.SharedVariableFactory;
+
+import freemarker.ext.beans.BeanModel;
+import freemarker.ext.beans.BeansWrapper;
+import freemarker.template.TemplateModel;
+
+public class TilesSharedVariableFactory implements SharedVariableFactory {
+
+    @Override
+    public TemplateModel create() {
+        return new BeanModel(new TilesFMModelRepository(),
+                BeansWrapper.getDefaultInstance());
+    }
+
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/TilesSharedVariableFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRenderer.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRenderer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRenderer.java Wed Sep  8 19:50:09 2010
@@ -34,12 +34,12 @@ import javax.servlet.http.HttpServletRes
 
 import org.apache.tiles.Attribute;
 import org.apache.tiles.freemarker.FreeMarkerTilesException;
-import org.apache.tiles.freemarker.servlet.TilesFreemarkerServlet;
 import org.apache.tiles.impl.InvalidTemplateException;
 import org.apache.tiles.renderer.impl.AbstractTypeDetectingAttributeRenderer;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
 import org.apache.tiles.request.collection.IteratorEnumeration;
+import org.apache.tiles.request.freemarker.servlet.TilesFreemarkerServlet;
 import org.apache.tiles.request.servlet.ExternalWriterHttpServletResponse;
 import org.apache.tiles.request.servlet.ServletRequest;
 import org.apache.tiles.request.util.ApplicationContextAware;

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRendererTest.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRendererTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/renderer/FreeMarkerAttributeRendererTest.java Wed Sep  8 19:50:09 2010
@@ -20,8 +20,15 @@
  */
 package org.apache.tiles.freemarker.renderer;
 
-import static org.easymock.classextension.EasyMock.*;
-import static org.junit.Assert.*;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.classextension.EasyMock.createMock;
+import static org.easymock.classextension.EasyMock.createMockBuilder;
+import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.classextension.EasyMock.verify;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.io.PrintWriter;

Modified: tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextVariableResolverFactory.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextVariableResolverFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-mvel/src/main/java/org/apache/tiles/mvel/TilesContextVariableResolverFactory.java Wed Sep  8 19:50:09 2010
@@ -26,9 +26,9 @@ import java.lang.reflect.InvocationTarge
 import java.lang.reflect.Method;
 
 import org.apache.tiles.context.TilesRequestContextHolder;
-import org.apache.tiles.reflect.CannotAccessMethodException;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.reflect.CannotAccessMethodException;
 import org.apache.tiles.util.CombinedBeanInfo;
 import org.mvel2.integration.VariableResolver;
 

Modified: tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDecorationFilter.java Wed Sep  8 19:50:09 2010
@@ -38,10 +38,10 @@ import org.apache.tiles.Attribute;
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
-import org.apache.tiles.reflect.CannotInstantiateObjectException;
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.reflect.CannotInstantiateObjectException;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.apache.tiles.request.servlet.ServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Modified: tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-servlet/src/main/java/org/apache/tiles/web/util/TilesDispatchServlet.java Wed Sep  8 19:50:09 2010
@@ -28,9 +28,9 @@ import javax.servlet.http.HttpServletRes
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
-import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.request.reflect.ClassUtil;
 import org.apache.tiles.request.servlet.ServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Modified: tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/web.xml?rev=995228&r1=995227&r2=995228&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/web.xml (original)
+++ tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/web.xml Wed Sep  8 19:50:09 2010
@@ -81,7 +81,7 @@
     <!-- Standard Action Servlet Configuration -->
     <servlet>
         <servlet-name>freemarker</servlet-name>
-        <servlet-class>org.apache.tiles.freemarker.servlet.TilesFreemarkerServlet</servlet-class>
+        <servlet-class>org.apache.tiles.request.freemarker.servlet.TilesFreemarkerServlet</servlet-class>
         
         <!-- FreemarkerServlet settings: -->
         <init-param>
@@ -110,6 +110,10 @@
             <param-name>number_format</param-name>
             <param-value>0.##########</param-value>
         </init-param>
+        <init-param>
+            <param-name>org.apache.tiles.request.freemarker.CUSTOM_SHARED_VARIABLE_FACTORIES</param-name>
+            <param-value>tiles,org.apache.tiles.freemarker.TilesSharedVariableFactory</param-value>
+        </init-param>
         
         <load-on-startup>5</load-on-startup>
     </servlet>