You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2008/03/07 21:59:35 UTC

svn commit: r634819 - in /tiles/framework/trunk/tiles-core: ./ src/main/java/org/apache/tiles/evaluator/el/ src/main/java/org/apache/tiles/evaluator/impl/ src/main/java/org/apache/tiles/factory/ src/test/java/org/apache/tiles/evaluator/impl/ src/test/j...

Author: apetrelli
Date: Fri Mar  7 12:59:31 2008
New Revision: 634819

URL: http://svn.apache.org/viewvc?rev=634819&view=rev
Log:
TILES-48
Renamed DirectEvaluator to DirectAttributeEvaluator.
Added dependency on JUEL
Added sample implementation of ELAttributeEvaluator.

Added:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextBeanELResolver.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextELResolver.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluator.java
      - copied, changed from r633978, tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java
Removed:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java
Modified:
    tiles/framework/trunk/tiles-core/pom.xml
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRendererTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/StringAttributeRendererTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/TemplateAttributeRendererTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java

Modified: tiles/framework/trunk/tiles-core/pom.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/pom.xml?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/pom.xml (original)
+++ tiles/framework/trunk/tiles-core/pom.xml Fri Mar  7 12:59:31 2008
@@ -165,6 +165,13 @@
     </dependency>
 
     <dependency>
+        <groupId>de.odysseus.juel</groupId>
+        <artifactId>juel</artifactId>
+        <version>2.1.0</version>
+        <scope>provided</scope>
+    </dependency>
+
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.0</version>

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java?rev=634819&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java Fri Mar  7 12:59:31 2008
@@ -0,0 +1,144 @@
+/*
+ * $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.el;
+
+import javax.el.ArrayELResolver;
+import javax.el.CompositeELResolver;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.el.ListELResolver;
+import javax.el.MapELResolver;
+import javax.el.ResourceBundleELResolver;
+import javax.el.ValueExpression;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.awareness.TilesContainerAware;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
+import org.apache.tiles.context.TilesContextFactory;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.evaluator.AttributeEvaluator;
+
+import de.odysseus.el.ExpressionFactoryImpl;
+import de.odysseus.el.util.SimpleContext;
+
+/**
+ * Evaluates string expression with typical EL syntax.<br>
+ * You can use normal EL syntax, knowing that the root objects are
+ * {@link TilesRequestContext}, {@link TilesApplicationContext} and beans
+ * contained in request, session and application scope.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class ELAttributeEvaluator implements AttributeEvaluator,
+        TilesContextFactoryAware, TilesContainerAware {
+
+    /**
+     * The Tiles application context.
+     *
+     * @since 2.1.0
+     */
+    protected TilesApplicationContext applicationContext;
+
+    /**
+     * The Tiles context factory.
+     *
+     * @since 2.1.0
+     */
+    protected TilesContextFactory contextFactory;
+
+    /**
+     * The Tiles container.
+     *
+     * @since 2.1.0
+     */
+    protected TilesContainer container;
+
+    /**
+     * The EL expression factory.
+     *
+     * @since 2.1.0
+     */
+    protected ExpressionFactory expressionFactory;
+
+    /**
+     * The EL resolver to use.
+     *
+     * @since 2.1.0
+     */
+    protected ELResolver defaultResolver;
+
+    /**
+     * Constructor.
+     *
+     * @since 2.1.0
+     */
+    public ELAttributeEvaluator() {
+        // FIXME Take a different strategy to hold the expression factory.
+        expressionFactory = new ExpressionFactoryImpl();
+        defaultResolver = new CompositeELResolver() {
+            {
+                add(new TilesContextELResolver());
+                add(new TilesContextBeanELResolver());
+                add(new ArrayELResolver(false));
+                add(new ListELResolver(false));
+                add(new MapELResolver(false));
+                add(new ResourceBundleELResolver());
+            }
+        };
+    }
+
+    /** {@inheritDoc} */
+    public void setApplicationContext(TilesApplicationContext applicationContext) {
+        this.applicationContext = applicationContext;
+    }
+
+    /** {@inheritDoc} */
+    public void setContextFactory(TilesContextFactory contextFactory) {
+        this.contextFactory = contextFactory;
+    }
+
+    /** {@inheritDoc} */
+    public void setContainer(TilesContainer container) {
+        this.container = container;
+    }
+
+    /** {@inheritDoc} */
+    public Object evaluate(Attribute attribute, TilesRequestContext request) {
+        Object retValue = attribute.getValue();
+
+        if (retValue instanceof String) {
+            SimpleContext context = new SimpleContext(defaultResolver);
+            context.putContext(TilesRequestContext.class, request);
+            context.putContext(TilesApplicationContext.class,
+                    applicationContext);
+            ValueExpression expression = expressionFactory
+                    .createValueExpression(context, attribute.getValue()
+                            .toString(), Object.class);
+
+            retValue = expression.getValue(context);
+        }
+
+        return retValue;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextBeanELResolver.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextBeanELResolver.java?rev=634819&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextBeanELResolver.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextBeanELResolver.java Fri Mar  7 12:59:31 2008
@@ -0,0 +1,199 @@
+/*
+ * $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.el;
+
+import java.beans.BeanInfo;
+import java.beans.FeatureDescriptor;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Resolves beans in request, session and application scope.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class TilesContextBeanELResolver extends ELResolver {
+
+    /**
+     * The logging object.
+     */
+    private static final Log LOG = LogFactory
+            .getLog(TilesContextBeanELResolver.class);
+
+    /** {@inheritDoc} */
+    @Override
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        // only resolve at the root of the context
+        if (base != null) {
+            return null;
+        }
+
+        return String.class;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
+            Object base) {
+        List<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
+
+        TilesRequestContext request = (TilesRequestContext) context
+                .getContext(TilesRequestContext.class);
+        collectBeanInfo(request.getRequestScope(), list);
+        collectBeanInfo(request.getSessionScope(), list);
+
+        TilesApplicationContext applicationContext = (TilesApplicationContext) context
+                .getContext(TilesApplicationContext.class);
+        collectBeanInfo(applicationContext.getApplicationScope(), list);
+        return list.iterator();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Class<?> getType(ELContext context, Object base, Object property) {
+        if (base != null) {
+            return null;
+        }
+
+        Object obj = findObjectByProperty(context, property);
+        if (obj != null) {
+            return obj.getClass();
+        }
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Object getValue(ELContext context, Object base, Object property) {
+        if (base != null) {
+            return null;
+        }
+
+        return findObjectByProperty(context, property);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isReadOnly(ELContext context, Object base, Object property) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setValue(ELContext context, Object base, Object property,
+            Object value) {
+        // Does nothing for the moment.
+    }
+
+    /**
+     * Collects bean infos from a map's values and filling a list.
+     *
+     * @param map The map containing the bean to be inspected.
+     * @param list The list to fill.
+     */
+    protected void collectBeanInfo(Map<String, ? extends Object> map,
+            List<FeatureDescriptor> list) {
+        if (map == null || map.isEmpty()) {
+            return;
+        }
+
+        for (Object bean : map.values()) {
+            BeanInfo info = null;
+            try {
+                info = Introspector.getBeanInfo(bean.getClass());
+            } catch (Exception ex) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Cannot inspect bean " + bean.getClass(), ex);
+                }
+            }
+            if (info == null) {
+                return;
+            }
+            for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
+                pd.setValue("type", pd.getPropertyType());
+                pd.setValue("resolvableAtDesignTime", Boolean.FALSE);
+                list.add(pd);
+            }
+        }
+    }
+
+    /**
+     * Finds an object in request, session or application scope, in this order.
+     *
+     * @param context The context to use.
+     * @param property The property used as an attribute name.
+     * @return The found bean, if it exists, or <code>null</code> otherwise.
+     */
+    protected Object findObjectByProperty(ELContext context, Object property) {
+        Object retValue = null;
+
+        TilesRequestContext request = (TilesRequestContext) context
+                .getContext(TilesRequestContext.class);
+
+        String prop = property.toString();
+
+        retValue = getObject(request.getRequestScope(), prop);
+        if (retValue == null) {
+            retValue = getObject(request.getSessionScope(), prop);
+            if (retValue == null) {
+                TilesApplicationContext applicationContext = (TilesApplicationContext) context
+                        .getContext(TilesApplicationContext.class);
+                retValue = getObject(applicationContext.getApplicationScope(),
+                        prop);
+            }
+        }
+
+        return retValue;
+    }
+
+    /**
+     * Returns an object from a map in a null-safe manner.
+     *
+     * @param map The map to use.
+     * @param property The property to use as a key.
+     * @return The object, if present, or <code>null</code> otherwise.
+     */
+    protected Object getObject(Map<String, ? extends Object> map,
+            String property) {
+        Object retValue = null;
+        if (map != null) {
+            retValue = map.get(property);
+        }
+        return retValue;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextELResolver.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextELResolver.java?rev=634819&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextELResolver.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/TilesContextELResolver.java Fri Mar  7 12:59:31 2008
@@ -0,0 +1,176 @@
+/*
+ * $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.el;
+
+import java.beans.BeanInfo;
+import java.beans.FeatureDescriptor;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.el.BeanELResolver;
+import javax.el.ELContext;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Resolves properties of {@link TilesRequestContext} and
+ * {@link TilesApplicationContext}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class TilesContextELResolver extends BeanELResolver {
+    /**
+     * The logging object.
+     */
+    private static final Log LOG = LogFactory
+            .getLog(TilesContextBeanELResolver.class);
+
+    /**
+     * The descriptors of {@link TilesRequestContext} and
+     * {@link TilesApplicationContext}.
+     *
+     * @since 2.1.0
+     */
+    private List<FeatureDescriptor> descriptors;
+
+    /**
+     * Constructor.
+     */
+    public TilesContextELResolver() {
+        List<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
+        collectBeanInfo(TilesRequestContext.class, list);
+        collectBeanInfo(TilesApplicationContext.class, list);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Class<?> getCommonPropertyType(ELContext context, Object base) {
+        // only resolve at the root of the context
+        if (base != null) {
+            return null;
+        }
+
+        return String.class;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
+            Object base) {
+        // only resolve at the root of the context
+        if (base != null) {
+            return null;
+        }
+
+        return descriptors.iterator();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Class<?> getType(ELContext context, Object base, Object property) {
+        // only resolve at the root of the context
+        if (base != null) {
+            return null;
+        }
+
+        TilesRequestContext request = (TilesRequestContext) context
+                .getContext(TilesRequestContext.class);
+
+        Class<?> retValue = super.getType(context, request, property);
+        if (retValue == null) {
+            TilesApplicationContext applicationContext = (TilesApplicationContext) context
+                    .getContext(TilesApplicationContext.class);
+            retValue = super.getType(context, applicationContext, property);
+        }
+        context.setPropertyResolved(true);
+        return retValue;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Object getValue(ELContext context, Object base, Object property) {
+        // only resolve at the root of the context
+        if (base != null) {
+            return null;
+        }
+
+        TilesRequestContext request = (TilesRequestContext) context
+                .getContext(TilesRequestContext.class);
+
+        Object retValue = super.getValue(context, request, property);
+        if (retValue == null) {
+            TilesApplicationContext applicationContext = (TilesApplicationContext) context
+                    .getContext(TilesApplicationContext.class);
+            retValue = super.getValue(context, applicationContext, property);
+        }
+        context.setPropertyResolved(true);
+        return retValue;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isReadOnly(ELContext context, Object base, Object property) {
+        if (context == null) {
+            throw new NullPointerException();
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setValue(ELContext context, Object base, Object property,
+            Object value) {
+        // Does nothing for the moment.
+    }
+
+    /**
+     * Collects bean infos from a class and filling a list.
+     *
+     * @param clazz The class to be inspected.
+     * @param list The list to fill.
+     */
+    protected void collectBeanInfo(Class<?> clazz, List<FeatureDescriptor> list) {
+        BeanInfo info = null;
+        try {
+            info = Introspector.getBeanInfo(clazz);
+        } catch (Exception ex) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Cannot inspect class " + clazz, ex);
+            }
+        }
+        if (info == null) {
+            return;
+        }
+        for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
+            pd.setValue("type", pd.getPropertyType());
+            pd.setValue("resolvableAtDesignTime", Boolean.TRUE);
+            list.add(pd);
+        }
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/package.html?rev=634819&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/package.html Fri Mar  7 12:59:31 2008
@@ -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 EL implementation</title>
+</head>
+<body>
+Attribute evaluator classes that can perform EL evaluation for attributes.
+</body>
+</html>
\ No newline at end of file

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

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

Copied: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluator.java (from r633978, tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java)
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluator.java?p2=tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluator.java&p1=tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java&r1=633978&r2=634819&rev=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectAttributeEvaluator.java Fri Mar  7 12:59:31 2008
@@ -31,7 +31,7 @@
  * @version $Rev$ $Date$
  * @since 2.1.0
  */
-public class DirectEvaluator implements AttributeEvaluator {
+public class DirectAttributeEvaluator implements AttributeEvaluator {
 
     /** {@inheritDoc} */
     public Object evaluate(Attribute attribute, TilesRequestContext request) {

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=634819&r1=634818&r2=634819&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 Fri Mar  7 12:59:31 2008
@@ -31,7 +31,7 @@
 import org.apache.tiles.definition.UrlDefinitionsFactory;
 import org.apache.tiles.evaluator.AttributeEvaluator;
 import org.apache.tiles.evaluator.AttributeEvaluatorAware;
-import org.apache.tiles.evaluator.impl.DirectEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.apache.tiles.impl.BasicTilesContainer;
 import org.apache.tiles.impl.mgmt.CachingTilesContainer;
 import org.apache.tiles.mgmt.MutableTilesContainer;
@@ -117,7 +117,7 @@
         DEFAULTS.put(DEFINITIONS_FACTORY_INIT_PARAM, UrlDefinitionsFactory.class.getName());
         DEFAULTS.put(PREPARER_FACTORY_INIT_PARAM, BasicPreparerFactory.class.getName());
         DEFAULTS.put(RENDERER_FACTORY_INIT_PARAM, BasicRendererFactory.class.getName());
-        DEFAULTS.put(ATTRIBUTE_EVALUATOR_INIT_PARAM, DirectEvaluator.class.getName());
+        DEFAULTS.put(ATTRIBUTE_EVALUATOR_INIT_PARAM, DirectAttributeEvaluator.class.getName());
     }
 
     /**
@@ -283,12 +283,23 @@
             (RendererFactory) createFactory(configuration,
                 RENDERER_FACTORY_INIT_PARAM);
 
-        AttributeEvaluator evaluator = (AttributeEvaluator) createFactory(
-                configuration, ATTRIBUTE_EVALUATOR_INIT_PARAM);
-
         contextFactory.init(configuration);
         TilesApplicationContext tilesContext =
             contextFactory.createApplicationContext(context);
+
+        AttributeEvaluator evaluator = (AttributeEvaluator) createFactory(
+                configuration, ATTRIBUTE_EVALUATOR_INIT_PARAM);
+
+        if (evaluator instanceof TilesContextFactoryAware) {
+            ((TilesContextFactoryAware) evaluator)
+                    .setContextFactory(contextFactory);
+            ((TilesContextFactoryAware) evaluator)
+                    .setApplicationContext(tilesContext);
+        }
+
+        if (evaluator instanceof TilesContainerAware) {
+            ((TilesContainerAware) evaluator).setContainer(container);
+        }
 
         if (rendererFactory instanceof TilesContextFactoryAware) {
             ((TilesContextFactoryAware) rendererFactory)

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java Fri Mar  7 12:59:31 2008
@@ -25,7 +25,7 @@
 import junit.framework.TestCase;
 
 /**
- * Tests {@link DirectEvaluator}.
+ * Tests {@link DirectAttributeEvaluator}.
  *
  * @version $Rev$ $Date$
  */
@@ -34,16 +34,16 @@
     /**
      * The evaluator to test.
      */
-    private DirectEvaluator evaluator;
+    private DirectAttributeEvaluator evaluator;
 
     /** {@inheritDoc} */
     public void setUp() throws Exception {
-        evaluator = new DirectEvaluator();
+        evaluator = new DirectAttributeEvaluator();
     }
 
     /**
      * Tests
-     * {@link DirectEvaluator#evaluate(Attribute, org.apache.tiles.context.TilesRequestContext)}.
+     * {@link DirectAttributeEvaluator#evaluate(Attribute, org.apache.tiles.context.TilesRequestContext)}.
      */
     public void testEvaluate() {
         String expression = "This is an expression";

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRendererTest.java?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRendererTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRendererTest.java Fri Mar  7 12:59:31 2008
@@ -31,7 +31,7 @@
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.evaluator.impl.DirectEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -52,7 +52,7 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new MockAttributeRenderer();
-        renderer.setEvaluator(new DirectEvaluator());
+        renderer.setEvaluator(new DirectAttributeEvaluator());
     }
 
     /**

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/DefinitionAttributeRendererTest.java Fri Mar  7 12:59:31 2008
@@ -29,7 +29,7 @@
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.evaluator.impl.DirectEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -50,7 +50,7 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new DefinitionAttributeRenderer();
-        renderer.setEvaluator(new DirectEvaluator());
+        renderer.setEvaluator(new DirectAttributeEvaluator());
     }
 
     /**

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/StringAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/StringAttributeRendererTest.java?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/StringAttributeRendererTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/StringAttributeRendererTest.java Fri Mar  7 12:59:31 2008
@@ -28,7 +28,7 @@
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.evaluator.impl.DirectEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -49,7 +49,7 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new StringAttributeRenderer();
-        renderer.setEvaluator(new DirectEvaluator());
+        renderer.setEvaluator(new DirectAttributeEvaluator());
     }
 
     /**

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/TemplateAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/TemplateAttributeRendererTest.java?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/TemplateAttributeRendererTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/TemplateAttributeRendererTest.java Fri Mar  7 12:59:31 2008
@@ -28,7 +28,7 @@
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.evaluator.impl.DirectEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -49,7 +49,7 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new TemplateAttributeRenderer();
-        renderer.setEvaluator(new DirectEvaluator());
+        renderer.setEvaluator(new DirectAttributeEvaluator());
     }
 
     /**

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java?rev=634819&r1=634818&r2=634819&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/renderer/impl/UntypedAttributeRendererTest.java Fri Mar  7 12:59:31 2008
@@ -29,7 +29,7 @@
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.evaluator.impl.DirectEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
 import org.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -50,7 +50,7 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new UntypedAttributeRenderer();
-        renderer.setEvaluator(new DirectEvaluator());
+        renderer.setEvaluator(new DirectAttributeEvaluator());
     }
 
     /**