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/06/24 16:08:34 UTC

svn commit: r788032 [2/3] - in /tiles/framework/trunk: src/site/apt/tutorial/advanced/ tiles-api/src/main/java/org/apache/tiles/ tiles-api/src/main/java/org/apache/tiles/reflect/ tiles-api/src/test/java/org/apache/tiles/ tiles-api/src/test/java/org/apa...

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,174 @@
+/*
+ * $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.evaluator.mvel;
+
+import java.util.HashMap;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.mvel2.UnresolveablePropertyException;
+import org.mvel2.integration.VariableResolver;
+import org.mvel2.integration.impl.BaseVariableResolverFactory;
+
+/**
+ * Resolves beans stored in request, session and application scopes.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesContextBeanVariableResolverFactory extends
+        BaseVariableResolverFactory {
+
+    /**
+     * The Tiles request holder.
+     */
+    private TilesRequestContextHolder requestHolder;
+
+    /**
+     * Constructor.
+     *
+     * @param requestHolder The Tiles request holder.
+     * @since 2.2.0
+     */
+    public TilesContextBeanVariableResolverFactory(TilesRequestContextHolder requestHolder) {
+        this.requestHolder = requestHolder;
+        variableResolvers = new HashMap<String, VariableResolver>();
+    }
+
+    /** {@inheritDoc} */
+    public VariableResolver createVariable(String name, Object value) {
+        if (nextFactory != null) {
+            return nextFactory.createVariable(name, value);
+        }
+        throw new UnsupportedOperationException("This variable resolver factory is read only");
+    }
+
+    /** {@inheritDoc} */
+    public VariableResolver createVariable(String name, Object value,
+            Class<?> type) {
+        variableResolvers = new HashMap<String, VariableResolver>();
+        if (nextFactory != null) {
+            return nextFactory.createVariable(name, value, type);
+        }
+        throw new UnsupportedOperationException("This variable resolver factory is read only");
+    }
+
+    /** {@inheritDoc} */
+    public boolean isResolveable(String name) {
+        return isTarget(name) || isNextResolveable(name);
+    }
+
+    /** {@inheritDoc} */
+    public VariableResolver getVariableResolver(String name) {
+        if (isResolveable(name)) {
+            if (variableResolvers != null && variableResolvers.containsKey(name)) {
+                return variableResolvers.get(name);
+            } else if (isTarget(name)) {
+                VariableResolver variableResolver = new TilesContextBeanVariableResolver(name);
+                variableResolvers.put(name, variableResolver);
+                return variableResolver;
+            } else if (nextFactory != null) {
+                return nextFactory.getVariableResolver(name);
+            }
+        }
+
+        throw new UnresolveablePropertyException("unable to resolve variable '" + name + "'");
+    }
+
+    /** {@inheritDoc} */
+    public boolean isTarget(String name) {
+        TilesRequestContext request = requestHolder.getTilesRequestContext();
+        return request.getRequestScope().containsKey(name)
+                || request.getSessionScope().containsKey(name)
+                || request.getApplicationContext().getApplicationScope()
+                        .containsKey(name);
+    }
+
+    /**
+     * Resolves a single attribute stored in request, session or application scope.
+     *
+     * @version $Rev$ $Date$
+     * @since 2.2.0
+     */
+    private class TilesContextBeanVariableResolver implements VariableResolver {
+
+        /**
+         * The name of the attribute.
+         */
+        private String name;
+
+        /**
+         * Constructor.
+         *
+         * @param name The name of the attribute.
+         * @since 2.2.0
+         */
+        public TilesContextBeanVariableResolver(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        public int getFlags() {
+            return 0;
+        }
+
+        /** {@inheritDoc} */
+        public String getName() {
+            return name;
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        public Class getType() {
+            Object value = getValue();
+            if (value != null) {
+                return value.getClass();
+            }
+            return Object.class;
+        }
+
+        /** {@inheritDoc} */
+        public Object getValue() {
+            TilesRequestContext request = requestHolder.getTilesRequestContext();
+            Object value = request.getRequestScope().get(name);
+            if (value == null) {
+                value = request.getSessionScope().get(name);
+                if (value == null) {
+                    value = request.getApplicationContext()
+                            .getApplicationScope().get(name);
+                }
+            }
+            return value;
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        public void setStaticType(Class type) {
+            // Does nothing for the moment.
+        }
+
+        /** {@inheritDoc} */
+        public void setValue(Object value) {
+            throw new UnsupportedOperationException("This resolver is read-only");
+        }
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,266 @@
+/*
+ * $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.evaluator.mvel;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.apache.tiles.evaluator.el.TilesRequestContextBeanInfo;
+import org.apache.tiles.reflect.CannotAccessMethodException;
+import org.mvel2.integration.VariableResolver;
+import org.mvel2.integration.impl.BaseVariableResolverFactory;
+
+/**
+ * Resolves {@link org.apache.tiles.context.TilesRequestContext} and
+ * {@link org.apache.tiles.TilesApplicationContext} properties as variables.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesContextVariableResolverFactory extends
+        BaseVariableResolverFactory {
+
+    /**
+     * The Tiles request holder.
+     */
+    private TilesRequestContextHolder requestHolder;
+
+    /**
+     * Beaninfo about {@link org.apache.tiles.context.TilesRequestContext} and
+     * {@link org.apache.tiles.TilesApplicationContext}.
+     */
+    private TilesRequestContextBeanInfo requestBeanInfo = new TilesRequestContextBeanInfo();
+
+    /**
+     * Constructor.
+     *
+     * @param requestHolder The Tiles request holder.
+     * @since 2.2.0
+     */
+    public TilesContextVariableResolverFactory(TilesRequestContextHolder requestHolder) {
+        this.requestHolder = requestHolder;
+        variableResolvers = new HashMap<String, VariableResolver>();
+        for (PropertyDescriptor descriptor : requestBeanInfo.getRequestDescriptors().values()) {
+            String descriptorName = descriptor.getName();
+            variableResolvers.put(descriptorName, new RequestVariableResolver(descriptorName));
+        }
+        for (PropertyDescriptor descriptor : requestBeanInfo.getApplicationDescriptors().values()) {
+            String descriptorName = descriptor.getName();
+            variableResolvers.put(descriptorName, new ApplicationVariableResolver(descriptorName));
+        }
+    }
+
+    /** {@inheritDoc} */
+    public VariableResolver createVariable(String name, Object value) {
+        if (nextFactory != null) {
+            return nextFactory.createVariable(name, value);
+        }
+        throw new UnsupportedOperationException("This variable resolver factory is read only");
+    }
+
+    /** {@inheritDoc} */
+    public VariableResolver createVariable(String name, Object value,
+            Class<?> type) {
+        if (nextFactory != null) {
+            return nextFactory.createVariable(name, value, type);
+        }
+        throw new UnsupportedOperationException("This variable resolver factory is read only");
+    }
+
+    /** {@inheritDoc} */
+    public boolean isResolveable(String name) {
+        if (variableResolvers.containsKey(name)) {
+            return true;
+        }
+        return isNextResolveable(name);
+    }
+
+    /** {@inheritDoc} */
+    public boolean isTarget(String name) {
+        return variableResolvers.containsKey(name);
+    }
+
+    /**
+     * Resolves a {@link org.apache.tiles.context.TilesRequestContext} property as a variable.
+     *
+     * @version $Rev$ $Date$
+     * @since 2.2.0
+     */
+    private class RequestVariableResolver implements VariableResolver {
+
+        /**
+         * The name of the property.
+         */
+        private String name;
+
+        /**
+         * The property descriptor.
+         */
+        private PropertyDescriptor descriptor;
+
+        /**
+         * Constructor.
+         *
+         * @param name The name of the property.
+         * @since 2.2.0
+         */
+        public RequestVariableResolver(String name) {
+            this.name = name;
+            descriptor = requestBeanInfo.getRequestDescriptors().get(name);
+        }
+
+        /** {@inheritDoc} */
+        public int getFlags() {
+            return 0;
+        }
+
+        /** {@inheritDoc} */
+        public String getName() {
+            return name;
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        public Class getType() {
+            return descriptor.getPropertyType();
+        }
+
+        /** {@inheritDoc} */
+        public Object getValue() {
+            Method method = descriptor.getReadMethod();
+            try {
+                return method.invoke(requestHolder.getTilesRequestContext());
+            } catch (IllegalArgumentException e) {
+                throw new CannotAccessMethodException(
+                        "Arguments are wrong for property '"
+                                + descriptor.getName() + "'", e);
+            } catch (IllegalAccessException e) {
+                throw new CannotAccessMethodException(
+                        "Cannot access getter method for property '"
+                                + descriptor.getName() + "'", e);
+            } catch (InvocationTargetException e) {
+                throw new CannotAccessMethodException(
+                        "The getter method for property '"
+                                + descriptor.getName() + "' threw an exception",
+                        e);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        public void setStaticType(Class type) {
+            // Does nothing for the moment.
+        }
+
+        /** {@inheritDoc} */
+        public void setValue(Object value) {
+            throw new UnsupportedOperationException("This resolver is read-only");
+        }
+    }
+
+    /**
+     * Resolves a {@link org.apache.tiles.TilesApplicationContext} property as a
+     * variable.
+     *
+     * @version $Rev$ $Date$
+     * @since 2.2.0
+     */
+    private class ApplicationVariableResolver implements VariableResolver {
+
+        /**
+         * The name of the property.
+         *
+         * @since 2.2.0
+         */
+        private String name;
+
+        /**
+         * The property descriptor.
+         *
+         * @since 2.2.0
+         */
+        private PropertyDescriptor descriptor;
+
+        /**
+         * Constructor.
+         *
+         * @param name The name of the property.
+         * @since 2.2.0
+         */
+        public ApplicationVariableResolver(String name) {
+            this.name = name;
+            descriptor = requestBeanInfo.getApplicationDescriptors().get(name);
+        }
+
+        /** {@inheritDoc} */
+        public int getFlags() {
+            return 0;
+        }
+
+        /** {@inheritDoc} */
+        public String getName() {
+            return name;
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        public Class getType() {
+            return descriptor.getPropertyType();
+        }
+
+        /** {@inheritDoc} */
+        public Object getValue() {
+            Method method = descriptor.getReadMethod();
+            try {
+                return method.invoke(requestHolder.getTilesRequestContext()
+                        .getApplicationContext());
+            } catch (IllegalArgumentException e) {
+                throw new CannotAccessMethodException(
+                        "Arguments are wrong for property '"
+                                + descriptor.getName() + "'", e);
+            } catch (IllegalAccessException e) {
+                throw new CannotAccessMethodException(
+                        "Cannot access getter method for property '"
+                                + descriptor.getName() + "'", e);
+            } catch (InvocationTargetException e) {
+                throw new CannotAccessMethodException(
+                        "The getter method for property '"
+                                + descriptor.getName() + "' threw an exception",
+                        e);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        public void setStaticType(Class type) {
+            // Does nothing for the moment.
+        }
+
+        /** {@inheritDoc} */
+        public void setValue(Object value) {
+            throw new UnsupportedOperationException("This resolver is read-only");
+        }
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/TilesContextVariableResolverFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html Wed Jun 24 14:08:32 2009
@@ -0,0 +1,30 @@
+<!--
+/*
+ * $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.
+ */
+-->
+<html>
+<head>
+    <title>Tiles attribute evaluator MVEL implementation</title>
+</head>
+<body>
+Attribute evaluator classes that can perform MVEL evaluation for attributes.
+</body>
+</html>
\ No newline at end of file

Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/mvel/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Wed Jun 24 14:08:32 2009
@@ -45,7 +45,8 @@
 import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
 import org.apache.tiles.definition.pattern.PatternDefinitionResolverAware;
 import org.apache.tiles.definition.pattern.WildcardPatternDefinitionResolver;
-import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
 import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.apache.tiles.impl.BasicTilesContainer;
 import org.apache.tiles.locale.LocaleResolver;
@@ -91,13 +92,13 @@
                 requestContextFactory);
         container.setDefinitionsFactory(createDefinitionsFactory(applicationContext,
                 requestContextFactory, resolver));
-        AttributeEvaluator evaluator = createEvaluator(applicationContext,
-                requestContextFactory, resolver);
-        container.setEvaluator(evaluator);
+        AttributeEvaluatorFactory attributeEvaluatorFactory = createAttributeEvaluatorFactory(
+                applicationContext, requestContextFactory, resolver);
+        container.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         container.setPreparerFactory(createPreparerFactory(applicationContext,
                 requestContextFactory));
         container.setRendererFactory(createRendererFactory(applicationContext,
-                requestContextFactory, container, evaluator));
+                requestContextFactory, container, attributeEvaluatorFactory));
         return container;
     }
 
@@ -324,17 +325,21 @@
     }
 
     /**
-     * Creates the attribute evaluator to use. By default it returns a {@link DirectAttributeEvaluator}.
+     * Creates the attribute evaluator factory to use. By default it returns a
+     * {@link BasicAttributeEvaluatorFactory} containing the
+     * {@link DirectAttributeEvaluator} as the default evaluator.
+     *
      * @param applicationContext The Tiles application context.
      * @param contextFactory The Tiles context factory.
      * @param resolver The locale resolver.
      *
-     * @return The evaluator.
+     * @return The evaluator factory.
+     * @since 2.2.0
      */
-    protected AttributeEvaluator createEvaluator(TilesApplicationContext applicationContext,
-            TilesRequestContextFactory contextFactory,
-            LocaleResolver resolver) {
-        return new DirectAttributeEvaluator();
+    protected AttributeEvaluatorFactory createAttributeEvaluatorFactory(
+            TilesApplicationContext applicationContext,
+            TilesRequestContextFactory contextFactory, LocaleResolver resolver) {
+        return new BasicAttributeEvaluatorFactory(new DirectAttributeEvaluator());
     }
 
     /**
@@ -360,23 +365,23 @@
      * @param applicationContext The Tiles application context.
      * @param contextFactory The Tiles context factory.
      * @param container The container.
-     * @param evaluator The evaluator.
+     * @param attributeEvaluatorFactory The attribute evaluator factory.
      *
      * @return The renderer factory.
-     * @since 2.1.1
+     * @since 2.2.0
      */
     protected RendererFactory createRendererFactory(TilesApplicationContext applicationContext,
             TilesRequestContextFactory contextFactory,
-            TilesContainer container, AttributeEvaluator evaluator) {
+            TilesContainer container, AttributeEvaluatorFactory attributeEvaluatorFactory) {
         BasicRendererFactory retValue = new BasicRendererFactory();
         retValue.setApplicationContext(applicationContext);
         retValue.setRequestContextFactory(contextFactory);
         retValue.setContainer(container);
-        retValue.setEvaluator(evaluator);
+        retValue.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         retValue.setDefaultRenderer(createDefaultAttributeRenderer(applicationContext,
-                contextFactory, container, evaluator));
+                contextFactory, container, attributeEvaluatorFactory));
         registerAttributeRenderers(retValue, applicationContext, contextFactory,
-                container, evaluator);
+                container, attributeEvaluatorFactory);
         return retValue;
     }
 
@@ -386,25 +391,26 @@
      * @param applicationContext The Tiles application context.
      * @param contextFactory The Tiles context factory.
      * @param container The container.
-     * @param evaluator The evaluator.
+     * @param attributeEvaluatorFactory The attribute evaluator factory.
      *
      * @return The default attribute renderer.
-     * @since 2.1.1
+     * @since 2.2.0
      */
     protected AttributeRenderer createDefaultAttributeRenderer(TilesApplicationContext applicationContext,
             TilesRequestContextFactory contextFactory,
             TilesContainer container,
-            AttributeEvaluator evaluator) {
+            AttributeEvaluatorFactory attributeEvaluatorFactory) {
         UntypedAttributeRenderer retValue = new UntypedAttributeRenderer();
         retValue.setApplicationContext(applicationContext);
         retValue.setContainer(container);
         retValue.setRequestContextFactory(contextFactory);
-        retValue.setEvaluator(evaluator);
+        retValue.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         return retValue;
     }
 
     /**
-     * Creates a new pattern definition resolver. By default, it instantiate a {@link WildcardPatternDefinitionResolver}.
+     * Creates a new pattern definition resolver. By default, it instantiate a
+     * {@link WildcardPatternDefinitionResolver}.
      *
      * @param <T> The type of the customization key.
      * @param customizationKeyClass The customization key class.
@@ -426,30 +432,32 @@
      * @param applicationContext The Tiles application context.
      * @param contextFactory The Tiles context factory.
      * @param container The container.
-     * @param evaluator The evaluator.
-     * @since 2.1.1
+     * @param attributeEvaluatorFactory The attribute evaluator factory.
+     * @since 2.2.0
      */
     protected void registerAttributeRenderers(
-            BasicRendererFactory rendererFactory, TilesApplicationContext applicationContext,
+            BasicRendererFactory rendererFactory,
+            TilesApplicationContext applicationContext,
             TilesRequestContextFactory contextFactory,
-            TilesContainer container, AttributeEvaluator evaluator) {
+            TilesContainer container,
+            AttributeEvaluatorFactory attributeEvaluatorFactory) {
         StringAttributeRenderer stringRenderer = new StringAttributeRenderer();
         stringRenderer.setApplicationContext(applicationContext);
         stringRenderer.setRequestContextFactory(contextFactory);
-        stringRenderer.setEvaluator(evaluator);
+        stringRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         rendererFactory.registerRenderer("string", stringRenderer);
 
         TemplateAttributeRenderer templateRenderer = new TemplateAttributeRenderer();
         templateRenderer.setApplicationContext(applicationContext);
         templateRenderer.setRequestContextFactory(contextFactory);
-        templateRenderer.setEvaluator(evaluator);
+        templateRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         rendererFactory.registerRenderer("template", templateRenderer);
 
         DefinitionAttributeRenderer definitionRenderer = new DefinitionAttributeRenderer();
         definitionRenderer.setApplicationContext(applicationContext);
         definitionRenderer.setContainer(container);
         definitionRenderer.setRequestContextFactory(contextFactory);
-        definitionRenderer.setEvaluator(evaluator);
+        definitionRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         rendererFactory.registerRenderer("definition", definitionRenderer);
     }
 }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java Wed Jun 24 14:08:32 2009
@@ -20,6 +20,11 @@
  */
 package org.apache.tiles.factory;
 
+import java.lang.reflect.Method;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.Initializable;
@@ -35,7 +40,9 @@
 import org.apache.tiles.definition.DefinitionsFactory;
 import org.apache.tiles.definition.UrlDefinitionsFactory;
 import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
+import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
 import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.apache.tiles.impl.BasicTilesContainer;
 import org.apache.tiles.impl.mgmt.CachingTilesContainer;
@@ -46,11 +53,6 @@
 import org.apache.tiles.renderer.RendererFactory;
 import org.apache.tiles.renderer.impl.BasicRendererFactory;
 
-import java.lang.reflect.Method;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * Factory provided for convenience.
  * This factory creates a default implementation of
@@ -431,6 +433,8 @@
 
         AttributeEvaluator evaluator = (AttributeEvaluator) createFactory(
                 configuration, ATTRIBUTE_EVALUATOR_INIT_PARAM);
+        AttributeEvaluatorFactory attributeEvaluatorFactory = new BasicAttributeEvaluatorFactory(
+                evaluator);
 
         if (evaluator instanceof TilesApplicationContextAware) {
             ((TilesApplicationContextAware) evaluator)
@@ -457,8 +461,9 @@
             ((TilesContainerAware) rendererFactory).setContainer(container);
         }
 
-        if (rendererFactory instanceof AttributeEvaluatorAware) {
-            ((AttributeEvaluatorAware) rendererFactory).setEvaluator(evaluator);
+        if (rendererFactory instanceof AttributeEvaluatorFactoryAware) {
+            ((AttributeEvaluatorFactoryAware) rendererFactory)
+                    .setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         }
         rendererFactory.init(initParameters);
 
@@ -473,7 +478,7 @@
         container.setPreparerFactory(prepFactory);
         container.setApplicationContext(context);
         container.setRendererFactory(rendererFactory);
-        container.setEvaluator(evaluator);
+        container.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
     }
 
     /**

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Wed Jun 24 14:08:32 2009
@@ -34,6 +34,8 @@
 import org.apache.tiles.definition.DefinitionsFactoryException;
 import org.apache.tiles.definition.NoSuchDefinitionException;
 import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
 import org.apache.tiles.preparer.NoSuchPreparerException;
 import org.apache.tiles.preparer.PreparerFactory;
 import org.apache.tiles.preparer.ViewPreparer;
@@ -57,7 +59,8 @@
  * @since 2.0
  * @version $Rev$ $Date$
  */
-public class BasicTilesContainer implements TilesContainer {
+public class BasicTilesContainer implements TilesContainer,
+        AttributeEvaluatorFactoryAware {
 
     /**
      * Constant representing the configuration parameter used to define the
@@ -111,7 +114,7 @@
     /**
      * The attribute evaluator.
      */
-    private AttributeEvaluator evaluator;
+    private AttributeEvaluatorFactory attributeEvaluatorFactory;
 
     /**
      * The Tiles request context factory.
@@ -145,8 +148,8 @@
         if (definitionsFactory == null) {
             throw new IllegalStateException("DefinitionsFactory not specified");
         }
-        if (evaluator == null) {
-            throw new IllegalStateException("AttributeEvaluator not specified");
+        if (attributeEvaluatorFactory == null) {
+            throw new IllegalStateException("AttributeEvaluatorFactory not specified");
         }
         if (contextFactory == null) {
             throw new IllegalStateException("TilesContextFactory not specified");
@@ -294,14 +297,10 @@
         this.rendererFactory = rendererFactory;
     }
 
-    /**
-     * Sets the evaluator to use.
-     *
-     * @param evaluator The evaluator to use.
-     * @since 2.1.0
-     */
-    public void setEvaluator(AttributeEvaluator evaluator) {
-        this.evaluator = evaluator;
+    /** {@inheritDoc} */
+    public void setAttributeEvaluatorFactory(
+            AttributeEvaluatorFactory attributeEvaluatorFactory) {
+        this.attributeEvaluatorFactory = attributeEvaluatorFactory;
     }
 
     /** {@inheritDoc} */
@@ -341,6 +340,8 @@
     public Object evaluate(Attribute attribute, Object... requestItems) {
         TilesRequestContext request = getRequestContextFactory()
                 .createRequestContext(context, requestItems);
+        AttributeEvaluator evaluator = attributeEvaluatorFactory
+                .getAttributeEvaluator(attribute);
         return evaluator.evaluate(attribute, request);
     }
 
@@ -627,7 +628,7 @@
     }
 
     /**
-     * Renders the specified definition
+     * Renders the specified definition.
      * @param request The request context.
      * @param definition The definition to render.
      * @since 2.1.3

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java Wed Jun 24 14:08:32 2009
@@ -33,7 +33,8 @@
 import org.apache.tiles.context.TilesRequestContext;
 import org.apache.tiles.context.TilesRequestContextFactory;
 import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
 import org.apache.tiles.renderer.AttributeRenderer;
 
 /**
@@ -44,7 +45,7 @@
  */
 public abstract class AbstractBaseAttributeRenderer implements
         AttributeRenderer, TilesRequestContextFactoryAware,
-        TilesApplicationContextAware, AttributeEvaluatorAware {
+        TilesApplicationContextAware, AttributeEvaluatorFactoryAware {
 
     /**
      * The logging object.
@@ -67,11 +68,11 @@
     protected TilesApplicationContext applicationContext;
 
     /**
-     * The attribute evaluator.
+     * The attribute evaluator factory.
      *
-     * @since 2.1.0
+     * @since 2.2.0
      */
-    protected AttributeEvaluator evaluator;
+    protected AttributeEvaluatorFactory attributeEvaluatorFactory;
 
     /** {@inheritDoc} */
     public void setRequestContextFactory(TilesRequestContextFactory contextFactory) {
@@ -84,8 +85,8 @@
     }
 
     /** {@inheritDoc} */
-    public void setEvaluator(AttributeEvaluator evaluator) {
-        this.evaluator = evaluator;
+    public void setAttributeEvaluatorFactory(AttributeEvaluatorFactory attributeEvaluatorFactory) {
+        this.attributeEvaluatorFactory = attributeEvaluatorFactory;
     }
 
     /** {@inheritDoc} */
@@ -98,6 +99,8 @@
             return;
         }
 
+        AttributeEvaluator evaluator = attributeEvaluatorFactory
+                .getAttributeEvaluator(attribute);
         Object value = evaluator.evaluate(attribute, request);
 
         write(value, attribute, request);

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Wed Jun 24 14:08:32 2009
@@ -30,8 +30,8 @@
 import org.apache.tiles.awareness.TilesContainerAware;
 import org.apache.tiles.awareness.TilesRequestContextFactoryAware;
 import org.apache.tiles.context.TilesRequestContextFactory;
-import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+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.RendererException;
@@ -45,7 +45,7 @@
  */
 public class BasicRendererFactory implements RendererFactory,
         TilesContainerAware, TilesRequestContextFactoryAware,
-        TilesApplicationContextAware, AttributeEvaluatorAware {
+        TilesApplicationContextAware, AttributeEvaluatorFactoryAware {
 
     /**
      * The type renderers init parameter name.
@@ -102,9 +102,9 @@
     /**
      * The attribute evaluator.
      *
-     * @since 2.1.0
+     * @since 2.2.0
      */
-    protected AttributeEvaluator evaluator;
+    protected AttributeEvaluatorFactory attributeEvaluatorFactory;
 
     /**
      * The renderer name/renderer map.
@@ -221,8 +221,8 @@
     }
 
     /** {@inheritDoc} */
-    public void setEvaluator(AttributeEvaluator evaluator) {
-        this.evaluator = evaluator;
+    public void setAttributeEvaluatorFactory(AttributeEvaluatorFactory attributeEvaluatorFactory) {
+        this.attributeEvaluatorFactory = attributeEvaluatorFactory;
     }
 
     /** {@inheritDoc} */
@@ -254,8 +254,9 @@
         if (renderer instanceof TilesContainerAware) {
             ((TilesContainerAware) renderer).setContainer(container);
         }
-        if (renderer instanceof AttributeEvaluatorAware) {
-            ((AttributeEvaluatorAware) renderer).setEvaluator(evaluator);
+        if (renderer instanceof AttributeEvaluatorFactoryAware) {
+            ((AttributeEvaluatorFactoryAware) renderer)
+                    .setAttributeEvaluatorFactory(attributeEvaluatorFactory);
         }
         if (renderer instanceof Initializable && initParameters != null) {
             ((Initializable) renderer).init(initParameters);

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,50 @@
+/*
+ * $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.context;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link TilesRequestContextHolderTest}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesRequestContextHolderTest {
+
+    /**
+     * Test method for {@link TilesRequestContextHolder#setTilesRequestContext(TilesRequestContext)}.
+     */
+    @Test
+    public void testSetTilesRequestContext() {
+        TilesRequestContext request = createMock(TilesRequestContext.class);
+
+        replay(request);
+        TilesRequestContextHolder holder = new TilesRequestContextHolder();
+        holder.setTilesRequestContext(request);
+        assertSame(request, holder.getTilesRequestContext());
+        verify(request);
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/context/TilesRequestContextHolderTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestReloadableDefinitionsFactory.java Wed Jun 24 14:08:32 2009
@@ -54,7 +54,7 @@
      * The time (in milliseconds) to wait to be sure that the system updates the
      * modify date of a file.
      */
-    private static final int SLEEP_MILLIS = 30000;
+    private static final int SLEEP_MILLIS = 2000;
 
     /**
      * Creates a new instance of TestReloadableDefinitionsFactory.

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java Wed Jun 24 14:08:32 2009
@@ -61,7 +61,7 @@
      * The time (in milliseconds) to wait to be sure that the system updates the
      * modify date of a file.
      */
-    private static final int SLEEP_MILLIS = 30000;
+    private static final int SLEEP_MILLIS = 2000;
 
     /**
      * The object to test.

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java Wed Jun 24 14:08:32 2009
@@ -64,7 +64,7 @@
      * The time (in milliseconds) to wait to be sure that the system updates the
      * modify date of a file.
      */
-    private static final int SLEEP_MILLIS = 30000;
+    private static final int SLEEP_MILLIS = 2000;
 
     /**
      * The object to test.

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java Wed Jun 24 14:08:32 2009
@@ -213,11 +213,13 @@
         def = definitions.get(defName);
         assertNotNull("Couldn't find " + defName + " tile.", def);
         Attribute templateAttribute = def.getTemplateAttribute();
-        assertEquals(templateAttribute.getExpression(), "${my.expression}");
+        assertEquals(templateAttribute.getExpressionObject().getExpression(),
+                "${my.expression}");
         assertEquals("mytype", templateAttribute.getRenderer());
         attribute = def.getAttribute("body");
         assertNotNull("Couldn't Find body attribute.", attribute);
-        assertEquals("${my.attribute.expression}", attribute.getExpression());
+        assertEquals("${my.attribute.expression}", attribute
+                .getExpressionObject().getExpression());
     }
 
     /**

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,62 @@
+/*
+ * $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.definition.pattern;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Test;
+
+/**
+ * Tests {@link PatternUtil}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class PatternUtilTest {
+
+    /**
+     * Test method for
+     * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+     */
+    @Test
+    public void testReplacePlaceholders() {
+        Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+        attributes.put("attrib1", new Attribute("value{2}"));
+        attributes.put("attrib2", new Attribute("value{2}{3}"));
+        Definition definition = new Definition("definitionName", new Attribute(
+                "template{1}"), attributes);
+        Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef",
+                "value0", "value1", "value2", "value3");
+        assertEquals("nudef", nudef.getName());
+        Attribute attribute = nudef.getTemplateAttribute();
+        assertEquals("templatevalue1", attribute.getValue());
+        attribute = nudef.getAttribute("attrib1");
+        assertEquals("valuevalue2", attribute.getValue());
+        attribute = nudef.getAttribute("attrib2");
+        assertEquals("valuevalue2value3", attribute.getValue());
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,74 @@
+/*
+ * $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.definition.pattern;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link WildcardPatternDefinitionResolver}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class WildcardPatternDefinitionResolverTest {
+
+    /**
+     * The resolver to test.
+     */
+    private WildcardPatternDefinitionResolver<Integer> resolver;
+
+    /**
+     * Sets up the resolver.
+     */
+    @Before
+    public void setUp() {
+        resolver = new WildcardPatternDefinitionResolver<Integer>();
+    }
+
+    /**
+     * Test method for {@link WildcardPatternDefinitionResolver#resolveDefinition(String, Object)}.
+     */
+    @Test
+    public void testResolveDefinition() {
+        Integer key = 1;
+        Map<String, Definition> defsMap = new HashMap<String, Definition>();
+        Definition def = new Definition();
+        def.setName("testDef*.message*");
+        def.setTemplateAttribute(Attribute.createTemplateAttribute("/test{1}.jsp"));
+        def.putAttribute("body", new Attribute("message{2}"));
+        defsMap.put("testDef*.message*", def);
+        resolver.storeDefinitionPatterns(defsMap, key);
+        Definition result = resolver.resolveDefinition("testDefOne.messageTwo", key);
+        assertNotNull(result);
+        assertEquals("testDefOne.messageTwo", result.getName());
+        assertEquals("/testOne.jsp", result.getTemplateAttribute().getValue());
+        assertEquals("messageTwo", result.getAttribute("body").getValue());
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,88 @@
+/*
+ * $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.evaluator;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+import org.junit.Test;
+
+/**
+ * Tests {@link BasicAttributeEvaluatorFactory}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class BasicAttributeEvaluatorFactoryTest {
+
+    /**
+     * Test method for {@link BasicAttributeEvaluatorFactory#getAttributeEvaluator(String)}.
+     */
+    @Test
+    public void testGetAttributeEvaluatorString() {
+        AttributeEvaluator defaultEvaluator = createMock(AttributeEvaluator.class);
+        AttributeEvaluator evaluator1 = createMock(AttributeEvaluator.class);
+        AttributeEvaluator evaluator2 = createMock(AttributeEvaluator.class);
+        replay(defaultEvaluator, evaluator1, evaluator2);
+        BasicAttributeEvaluatorFactory factory = new BasicAttributeEvaluatorFactory(defaultEvaluator);
+        factory.registerAttributeEvaluator("LANG1", evaluator1);
+        factory.registerAttributeEvaluator("LANG2", evaluator2);
+        assertSame(evaluator1, factory.getAttributeEvaluator("LANG1"));
+        assertSame(evaluator2, factory.getAttributeEvaluator("LANG2"));
+        assertSame(defaultEvaluator, factory.getAttributeEvaluator("LANG3"));
+        verify(defaultEvaluator, evaluator1, evaluator2);
+    }
+
+    /**
+     * Test method for {@link BasicAttributeEvaluatorFactory#getAttributeEvaluator(Attribute)}.
+     */
+    @Test
+    public void testGetAttributeEvaluatorAttribute() {
+        AttributeEvaluator defaultEvaluator = createMock(AttributeEvaluator.class);
+        AttributeEvaluator evaluator1 = createMock(AttributeEvaluator.class);
+        AttributeEvaluator evaluator2 = createMock(AttributeEvaluator.class);
+        replay(defaultEvaluator, evaluator1, evaluator2);
+        BasicAttributeEvaluatorFactory factory = new BasicAttributeEvaluatorFactory(defaultEvaluator);
+        factory.registerAttributeEvaluator("LANG1", evaluator1);
+        factory.registerAttributeEvaluator("LANG2", evaluator2);
+        assertSame(evaluator1, factory
+                .getAttributeEvaluator(createExpressionAttribute("LANG1")));
+        assertSame(evaluator2, factory
+                .getAttributeEvaluator(createExpressionAttribute("LANG2")));
+        assertSame(defaultEvaluator, factory
+                .getAttributeEvaluator(createExpressionAttribute("LANG3")));
+        verify(defaultEvaluator, evaluator1, evaluator2);
+    }
+
+    /**
+     * Creates a sample attribute with an expression.
+     *
+     * @param language The expression language.
+     * @return The attribute.
+     */
+    private Attribute createExpressionAttribute(String language) {
+        return new Attribute(null, Expression.createExpression(
+                "myExpression", language), null, "string");
+    }
+
+}

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/BasicAttributeEvaluatorFactoryTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/ELAttributeEvaluatorTest.java Wed Jun 24 14:08:32 2009
@@ -23,13 +23,14 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import junit.framework.TestCase;
+
 import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.context.TilesRequestContext;
 import org.easymock.EasyMock;
 
-import junit.framework.TestCase;
-
 /**
  * Tests {@link ELAttributeEvaluator}.
  *
@@ -82,28 +83,28 @@
      */
     public void testEvaluate() {
         Attribute attribute = new Attribute();
-        attribute.setExpression("${requestScope.object1}");
+        attribute.setExpressionObject(new Expression("${requestScope.object1}"));
         assertEquals("The value is not correct", "value", evaluator.evaluate(
                 attribute, request));
-        attribute.setExpression("${sessionScope.object2}");
+        attribute.setExpressionObject(new Expression("${sessionScope.object2}"));
         assertEquals("The value is not correct", new Integer(1), evaluator
                 .evaluate(attribute, request));
-        attribute.setExpression("${applicationScope.object3}");
+        attribute.setExpressionObject(new Expression("${applicationScope.object3}"));
         assertEquals("The value is not correct", new Float(2.0), evaluator
                 .evaluate(attribute, request));
-        attribute.setExpression("${object1}");
+        attribute.setExpressionObject(new Expression("${object1}"));
         assertEquals("The value is not correct", "value", evaluator.evaluate(
                 attribute, request));
-        attribute.setExpression("${object2}");
+        attribute.setExpressionObject(new Expression("${object2}"));
         assertEquals("The value is not correct", new Integer(1), evaluator
                 .evaluate(attribute, request));
-        attribute.setExpression("${object3}");
+        attribute.setExpressionObject(new Expression("${object3}"));
         assertEquals("The value is not correct", new Float(2.0), evaluator
                 .evaluate(attribute, request));
-        attribute.setExpression("${paulaBean.paula}");
+        attribute.setExpressionObject(new Expression("${paulaBean.paula}"));
         assertEquals("The value is not correct", "Brillant", evaluator
                 .evaluate(attribute, request));
-        attribute.setExpression("String literal");
+        attribute.setExpressionObject(new Expression("String literal"));
         assertEquals("The value is not correct", "String literal", evaluator
                 .evaluate(attribute, request));
         attribute.setValue(new Integer(2));

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/el/TilesContextELResolverTest.java Wed Jun 24 14:08:32 2009
@@ -21,13 +21,11 @@
 package org.apache.tiles.evaluator.el;
 
 import java.beans.FeatureDescriptor;
-import java.util.ArrayList;
+import java.beans.PropertyDescriptor;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
+import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Set;
 
 import javax.el.ELContext;
 
@@ -35,6 +33,7 @@
 
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.reflect.ClassUtil;
 import org.easymock.EasyMock;
 
 /**
@@ -71,15 +70,12 @@
      * {@link TilesContextELResolver#getFeatureDescriptors(javax.el.ELContext, java.lang.Object)}.
      */
     public void testGetFeatureDescriptorsELContextObject() {
-        List<FeatureDescriptor> expected = new ArrayList<FeatureDescriptor>();
-        Set<String> properties = new HashSet<String>();
-        resolver.collectBeanInfo(TilesRequestContext.class, expected,
-                properties);
-        resolver.collectBeanInfo(TilesApplicationContext.class, expected,
-                properties);
+        Map<String, PropertyDescriptor> expected = new LinkedHashMap<String, PropertyDescriptor>();
+        ClassUtil.collectBeanInfo(TilesRequestContext.class, expected);
+        ClassUtil.collectBeanInfo(TilesApplicationContext.class, expected);
         Iterator<FeatureDescriptor> featureIt = resolver.getFeatureDescriptors(
                 null, null);
-        Iterator<FeatureDescriptor> expectedIt = expected.iterator();
+        Iterator<? extends FeatureDescriptor> expectedIt = expected.values().iterator();
         while (featureIt.hasNext() && expectedIt.hasNext()) {
             assertEquals("The feature is not the same", expectedIt.next(),
                     featureIt.next());

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java?rev=788032&r1=788031&r2=788032&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluatorTest.java Wed Jun 24 14:08:32 2009
@@ -20,10 +20,11 @@
  */
 package org.apache.tiles.evaluator.impl;
 
-import org.apache.tiles.Attribute;
-
 import junit.framework.TestCase;
 
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+
 /**
  * Tests {@link DirectAttributeEvaluator}.
  *
@@ -47,13 +48,13 @@
      */
     public void testEvaluate() {
         String expression = "This is an expression";
-        Attribute attribute = new Attribute(null, expression, null,
-                (String) null);
+        Attribute attribute = new Attribute(null, Expression.createExpression(
+                expression, null), null, (String) null);
         Object result = evaluator.evaluate(attribute, null);
         assertEquals("The expression has not been evaluated correctly", result,
                 expression);
         expression = "${attributeName}";
-        attribute.setExpression(expression);
+        attribute.setExpressionObject(new Expression(expression));
         result = evaluator.evaluate(attribute, null);
         assertEquals("The expression has not been evaluated correctly", result,
                 expression);

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,174 @@
+/*
+ * $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.evaluator.mvel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Expression;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.easymock.EasyMock;
+import org.mvel2.integration.VariableResolverFactory;
+
+/**
+ * Tests {@link MVELAttributeEvaluator}.
+ *
+ * @version $Rev$ $Date$$
+ */
+public class MVELAttributeEvaluatorTest extends TestCase {
+
+    /**
+     * The evaluator to test.
+     */
+    private MVELAttributeEvaluator evaluator;
+
+    /**
+     * The request object to use.
+     */
+    private TilesRequestContext request;
+
+    /** {@inheritDoc} */
+    protected void setUp() throws Exception {
+        super.setUp();
+        TilesRequestContextHolder requestHolder = new TilesRequestContextHolder();
+        VariableResolverFactory variableResolverFactory = new TilesContextVariableResolverFactory(
+                requestHolder);
+        variableResolverFactory
+                .setNextFactory(new TilesContextBeanVariableResolverFactory(
+                        requestHolder));
+        evaluator = new MVELAttributeEvaluator(requestHolder,
+                variableResolverFactory);
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        Map<String, Object> sessionScope = new HashMap<String, Object>();
+        Map<String, Object> applicationScope = new HashMap<String, Object>();
+        requestScope.put("object1", "value");
+        sessionScope.put("object2", new Integer(1));
+        applicationScope.put("object3", new Float(2.0));
+        requestScope.put("paulaBean", new PaulaBean());
+        request = EasyMock.createMock(TilesRequestContext.class);
+        EasyMock.expect(request.getRequestScope()).andReturn(requestScope)
+                .anyTimes();
+        EasyMock.expect(request.getSessionScope()).andReturn(sessionScope)
+                .anyTimes();
+        TilesApplicationContext applicationContext = EasyMock
+                .createMock(TilesApplicationContext.class);
+        EasyMock.expect(request.getApplicationContext()).andReturn(
+                applicationContext).anyTimes();
+        EasyMock.expect(applicationContext.getApplicationScope()).andReturn(
+                applicationScope).anyTimes();
+        EasyMock.replay(request, applicationContext);
+    }
+
+    /**
+     * Tests
+     * {@link MVELAttributeEvaluator#evaluate(Attribute, TilesRequestContext)}.
+     */
+    public void testEvaluate() {
+        Attribute attribute = new Attribute();
+        attribute.setExpressionObject(new Expression("requestScope.object1"));
+        assertEquals("The value is not correct", "value", evaluator.evaluate(
+                attribute, request));
+        attribute.setExpressionObject(new Expression("sessionScope.object2"));
+        assertEquals("The value is not correct", new Integer(1), evaluator
+                .evaluate(attribute, request));
+        attribute.setExpressionObject(new Expression("applicationScope.object3"));
+        assertEquals("The value is not correct", new Float(2.0), evaluator
+                .evaluate(attribute, request));
+        attribute.setExpressionObject(new Expression("object1"));
+        assertEquals("The value is not correct", "value", evaluator.evaluate(
+                attribute, request));
+        attribute.setExpressionObject(new Expression("object2"));
+        assertEquals("The value is not correct", new Integer(1), evaluator
+                .evaluate(attribute, request));
+        attribute.setExpressionObject(new Expression("object3"));
+        assertEquals("The value is not correct", new Float(2.0), evaluator
+                .evaluate(attribute, request));
+        attribute.setExpressionObject(new Expression("paulaBean.paula"));
+        assertEquals("The value is not correct", "Brillant", evaluator
+                .evaluate(attribute, request));
+        attribute.setExpressionObject(new Expression("'String literal'"));
+        assertEquals("The value is not correct", "String literal", evaluator
+                .evaluate(attribute, request));
+        attribute.setValue(new Integer(2));
+        assertEquals("The value is not correct", new Integer(2), evaluator
+                .evaluate(attribute, request));
+        attribute.setValue("object1");
+        assertEquals("The value has been evaluated", "object1", evaluator
+                .evaluate(attribute, request));
+    }
+
+    /**
+     * Tests {@link MVELAttributeEvaluator#evaluate(String, TilesRequestContext)}.
+     */
+    public void testEvaluateString() {
+        String expression = "requestScope.object1";
+        assertEquals("The value is not correct", "value", evaluator.evaluate(
+                expression, request));
+        expression = "sessionScope.object2";
+        assertEquals("The value is not correct", new Integer(1), evaluator
+                .evaluate(expression, request));
+        expression = "applicationScope.object3";
+        assertEquals("The value is not correct", new Float(2.0), evaluator
+                .evaluate(expression, request));
+        expression = "object1";
+        assertEquals("The value is not correct", "value", evaluator.evaluate(
+                expression, request));
+        expression = "object2";
+        assertEquals("The value is not correct", new Integer(1), evaluator
+                .evaluate(expression, request));
+        expression = "object3";
+        assertEquals("The value is not correct", new Float(2.0), evaluator
+                .evaluate(expression, request));
+        expression = "paulaBean.paula";
+        assertEquals("The value is not correct", "Brillant", evaluator
+                .evaluate(expression, request));
+        expression = "'String literal'";
+        assertEquals("The value is not correct", "String literal", evaluator
+                .evaluate(expression, request));
+    }
+
+    /**
+     * This is The Brillant Paula Bean (sic) just like it was posted to:
+     * http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx I hope that
+     * there is no copyright on it.
+     */
+    public static class PaulaBean {
+
+        /**
+         * Paula is brillant, really.
+         */
+        private String paula = "Brillant";
+
+        /**
+         * Returns brillant.
+         *
+         * @return "Brillant".
+         */
+        public String getPaula() {
+            return paula;
+        }
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/MVELAttributeEvaluatorTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java?rev=788032&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java Wed Jun 24 14:08:32 2009
@@ -0,0 +1,208 @@
+/*
+ * $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.evaluator.mvel;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.junit.Before;
+import org.junit.Test;
+import org.mvel2.UnresolveablePropertyException;
+import org.mvel2.integration.VariableResolver;
+
+/**
+ * Tests {@link TilesContextBeanVariableResolverFactory}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class TilesContextBeanVariableResolverFactoryTest {
+
+    /**
+     * The expected session scope calls.
+     */
+    private static final int EXPECTED_SESSION_CALLS = 3;
+
+    /**
+     * The expected request scope calls.
+     */
+    private static final int EXPECTED_REQUEST_CALLS = 4;
+
+    /**
+     * The Tiles request.
+     */
+    private TilesRequestContext request;
+
+    /**
+     * The Tiles application context.
+     */
+    private TilesApplicationContext applicationContext;
+
+    /**
+     * The object to test.
+     */
+    private TilesContextBeanVariableResolverFactory factory;
+
+    /**
+     * Sets up the object.
+     */
+    @Before
+    public void setUp() {
+        request = createMock(TilesRequestContext.class);
+        TilesRequestContextHolder holder = new TilesRequestContextHolder();
+        holder.setTilesRequestContext(request);
+        applicationContext = createMock(TilesApplicationContext.class);
+        factory = new TilesContextBeanVariableResolverFactory(holder);
+    }
+
+    /**
+     * Test method for {@link TilesContextBeanVariableResolverFactory#createVariable(String, Object)}.
+     */
+    @Test(expected = UnsupportedOperationException.class)
+    public void testCreateVariableStringObject() {
+        replay(request, applicationContext);
+        factory.createVariable("myName", "myValue");
+        verify(request, applicationContext);
+    }
+
+    /**
+     * Test method for {@link TilesContextBeanVariableResolverFactory#createVariable(String, Object, Class)}.
+     */
+    @Test(expected = UnsupportedOperationException.class)
+    public void testCreateVariableStringObjectClassOfQ() {
+        replay(request, applicationContext);
+        factory.createVariable("myName", "myValue", String.class);
+        verify(request, applicationContext);
+    }
+
+    /**
+     * Test method for {@link TilesContextBeanVariableResolverFactory#isResolveable(String)}.
+     */
+    @Test
+    public void testIsResolveable() {
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        requestScope.put("one", 1);
+        expect(request.getRequestScope()).andReturn(requestScope).times(
+                EXPECTED_REQUEST_CALLS);
+        Map<String, Object> applicationScope = new HashMap<String, Object>();
+        applicationScope.put("two", 2);
+        expect(request.getApplicationContext()).andReturn(applicationContext)
+                .times(2);
+        expect(applicationContext.getApplicationScope()).andReturn(
+                applicationScope).times(2);
+        Map<String, Object> sessionScope = new HashMap<String, Object>();
+        sessionScope.put("three", "three");
+        expect(request.getSessionScope()).andReturn(sessionScope).times(
+                EXPECTED_SESSION_CALLS);
+        replay(request, applicationContext);
+
+        assertTrue(factory.isResolveable("one"));
+        assertTrue(factory.isResolveable("two"));
+        assertTrue(factory.isResolveable("three"));
+        assertFalse(factory.isResolveable("four"));
+        verify(request, applicationContext);
+    }
+
+    /**
+     * Test method for {@link TilesContextBeanVariableResolverFactory#getVariableResolver(String)}.
+     */
+    @Test
+    public void testGetVariableResolverString() {
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        requestScope.put("one", 1);
+        expect(request.getRequestScope()).andReturn(requestScope).anyTimes();
+        Map<String, Object> applicationScope = new HashMap<String, Object>();
+        applicationScope.put("two", 2);
+        expect(request.getApplicationContext()).andReturn(applicationContext)
+                .anyTimes();
+        expect(applicationContext.getApplicationScope()).andReturn(
+                applicationScope).anyTimes();
+        Map<String, Object> sessionScope = new HashMap<String, Object>();
+        sessionScope.put("three", "three");
+        expect(request.getSessionScope()).andReturn(sessionScope).anyTimes();
+        replay(request, applicationContext);
+
+        VariableResolver resolver = factory.getVariableResolver("one");
+        assertEquals(1, resolver.getValue());
+        resolver = factory.getVariableResolver("two");
+        assertEquals(2, resolver.getValue());
+        resolver = factory.getVariableResolver("three");
+        assertEquals("three", resolver.getValue());
+        verify(request, applicationContext);
+    }
+
+    /**
+     * Test method for {@link TilesContextBeanVariableResolverFactory#getVariableResolver(String)}.
+     */
+    @Test(expected = UnresolveablePropertyException.class)
+    public void testGetVariableResolverStringException() {
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        requestScope.put("one", 1);
+        expect(request.getRequestScope()).andReturn(requestScope).anyTimes();
+        Map<String, Object> applicationScope = new HashMap<String, Object>();
+        applicationScope.put("two", 2);
+        expect(request.getApplicationContext()).andReturn(applicationContext)
+                .anyTimes();
+        expect(applicationContext.getApplicationScope()).andReturn(
+                applicationScope).anyTimes();
+        Map<String, Object> sessionScope = new HashMap<String, Object>();
+        sessionScope.put("three", "three");
+        expect(request.getSessionScope()).andReturn(sessionScope).anyTimes();
+        replay(request, applicationContext);
+
+        factory.getVariableResolver("four");
+    }
+
+    /**
+     * Test method for {@link TilesContextBeanVariableResolverFactory#isTarget(String)}.
+     */
+    @Test
+    public void testIsTarget() {
+        Map<String, Object> requestScope = new HashMap<String, Object>();
+        requestScope.put("one", 1);
+        expect(request.getRequestScope()).andReturn(requestScope).times(
+                EXPECTED_REQUEST_CALLS);
+        Map<String, Object> applicationScope = new HashMap<String, Object>();
+        applicationScope.put("two", 2);
+        expect(request.getApplicationContext()).andReturn(applicationContext)
+                .times(2);
+        expect(applicationContext.getApplicationScope()).andReturn(
+                applicationScope).times(2);
+        Map<String, Object> sessionScope = new HashMap<String, Object>();
+        sessionScope.put("three", "three");
+        expect(request.getSessionScope()).andReturn(sessionScope).times(
+                EXPECTED_SESSION_CALLS);
+        replay(request, applicationContext);
+
+        assertTrue(factory.isTarget("one"));
+        assertTrue(factory.isTarget("two"));
+        assertTrue(factory.isTarget("three"));
+        assertFalse(factory.isTarget("four"));
+        verify(request, applicationContext);
+    }
+}

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/mvel/TilesContextBeanVariableResolverFactoryTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL