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/04 21:47:08 UTC

svn commit: r633632 - in /tiles/framework/trunk: tiles-api/src/main/java/org/apache/tiles/ tiles-core/src/main/java/org/apache/tiles/evaluator/ tiles-core/src/main/java/org/apache/tiles/evaluator/impl/ tiles-core/src/main/java/org/apache/tiles/factory/...

Author: apetrelli
Date: Tue Mar  4 12:47:06 2008
New Revision: 633632

URL: http://svn.apache.org/viewvc?rev=633632&view=rev
Log:
TILES-48
Added the infrastructure to build evaluators.

Added:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluator.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluatorAware.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java   (with props)
Modified:
    tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.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
    tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/renderer/ReverseStringAttributeRenderer.java

Modified: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java Tue Mar  4 12:47:06 2008
@@ -120,6 +120,19 @@
         throws TilesException, IOException;
 
     /**
+     * Evaluates the given attribute.
+     *
+     * @param attribute The attribute to evaluate.
+     * @param requestItems the current request objects.
+     * @throws TilesException If something goes wrong during accessing Tiles
+     * elements.
+     * @return The evaluated object.
+     * @since 2.1.0
+     */
+    Object evaluate(Attribute attribute, Object... requestItems)
+            throws TilesException;
+
+    /**
      * Determine whether or not the definition exists.
      * @param definition the name of the definition.
      * @param requestItems the current request objects.

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluator.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluator.java?rev=633632&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluator.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluator.java Tue Mar  4 12:47:06 2008
@@ -0,0 +1,41 @@
+/*
+ * $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 org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * It represents an object that resolves a string to return an object.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public interface AttributeEvaluator {
+
+    /**
+     * Evaluates an expression.
+     *
+     * @param expression The expression to evaluate.
+     * @param request The request object.
+     * @return The evaluated object.
+     */
+    Object evaluate(String expression, TilesRequestContext request);
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluatorAware.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluatorAware.java?rev=633632&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluatorAware.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/AttributeEvaluatorAware.java Tue Mar  4 12:47:06 2008
@@ -0,0 +1,37 @@
+/*
+ * $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;
+
+/**
+ * It represents an object that can use an {@link AttributeEvaluator}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public interface AttributeEvaluatorAware {
+
+    /**
+     * Sets the evaluator.
+     *
+     * @param evaluator The evaluator to set.
+     */
+    void setEvaluator(AttributeEvaluator evaluator);
+}

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

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

Added: 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/DirectEvaluator.java?rev=633632&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/DirectEvaluator.java Tue Mar  4 12:47:06 2008
@@ -0,0 +1,39 @@
+/*
+ * $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.impl;
+
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.evaluator.AttributeEvaluator;
+
+/**
+ * Resolves a string and returns the string itself. It is useful for backward
+ * compatibility.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class DirectEvaluator implements AttributeEvaluator {
+
+    /** {@inheritDoc} */
+    public Object evaluate(String expression, TilesRequestContext request) {
+        return expression;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/package.html?rev=633632&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/impl/package.html Tue Mar  4 12:47:06 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 evaluators implementations</title>
+</head>
+<body>
+Classes to manage attribute value evaluation.
+</body>
+</html>
\ No newline at end of file

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/package.html?rev=633632&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/package.html Tue Mar  4 12:47:06 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 evaluators</title>
+</head>
+<body>
+Interfaces to manage attribute value evaluation.
+</body>
+</html>
\ No newline at end of file

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

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

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -29,6 +29,9 @@
 import org.apache.tiles.context.TilesContextFactory;
 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.impl.DirectEvaluator;
 import org.apache.tiles.impl.BasicTilesContainer;
 import org.apache.tiles.impl.mgmt.CachingTilesContainer;
 import org.apache.tiles.mgmt.MutableTilesContainer;
@@ -94,6 +97,15 @@
         "org.apache.tiles.renderer.RendererFactory";
 
     /**
+     * Initialization parameter that represents the attribute evaluator class
+     * name.
+     *
+     * @since 2.1.0
+     */
+    public static final String ATTRIBUTE_EVALUATOR_INIT_PARAM =
+        "org.apache.tiles.evaluator.AttributeEvaluator";
+
+    /**
      * Default configuration parameters.
      */
     private static final Map<String, String> DEFAULTS =
@@ -105,6 +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());
     }
 
     /**
@@ -270,6 +283,9 @@
             (RendererFactory) createFactory(configuration,
                 RENDERER_FACTORY_INIT_PARAM);
 
+        AttributeEvaluator evaluator = (AttributeEvaluator) createFactory(
+                configuration, ATTRIBUTE_EVALUATOR_INIT_PARAM);
+
         contextFactory.init(configuration);
         TilesApplicationContext tilesContext =
             contextFactory.createApplicationContext(context);
@@ -285,6 +301,10 @@
             ((TilesContainerAware) rendererFactory).setContainer(container);
         }
 
+        if (rendererFactory instanceof AttributeEvaluatorAware) {
+            ((AttributeEvaluatorAware) rendererFactory).setEvaluator(evaluator);
+        }
+
         PreparerFactory prepFactory =
             (PreparerFactory) createFactory(configuration,
                 PREPARER_FACTORY_INIT_PARAM);
@@ -294,6 +314,7 @@
         container.setPreparerFactory(prepFactory);
         container.setApplicationContext(tilesContext);
         container.setRendererFactory(rendererFactory);
+        container.setEvaluator(evaluator);
     }
 
     /**

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -34,6 +34,7 @@
 import org.apache.tiles.definition.DefinitionsFactory;
 import org.apache.tiles.definition.DefinitionsFactoryException;
 import org.apache.tiles.definition.NoSuchDefinitionException;
+import org.apache.tiles.evaluator.AttributeEvaluator;
 import org.apache.tiles.preparer.NoSuchPreparerException;
 import org.apache.tiles.preparer.PreparerFactory;
 import org.apache.tiles.preparer.ViewPreparer;
@@ -110,6 +111,11 @@
     private RendererFactory rendererFactory;
 
     /**
+     * The attribute evaluator.
+     */
+    private AttributeEvaluator evaluator;
+
+    /**
      * The Tiles context factory.
      */
     private TilesContextFactory contextFactory;
@@ -265,6 +271,16 @@
         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 prepare(String preparer, Object... requestItems)
         throws TilesException {
@@ -300,6 +316,19 @@
                             + attr.getRenderer());
         }
         renderer.render(attr, writer, requestItems);
+    }
+
+    /** {@inheritDoc} */
+    public Object evaluate(Attribute attribute, Object... requestItems)
+            throws TilesException {
+        TilesRequestContext request = getContextFactory().createRequestContext(
+                context, requestItems);
+        Object retValue = attribute.getValue();
+        if (retValue != null && retValue instanceof String) {
+            retValue = evaluator.evaluate((String) retValue, request);
+        }
+
+        return retValue;
     }
 
     /** {@inheritDoc} */

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -33,6 +33,8 @@
 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 org.apache.tiles.evaluator.AttributeEvaluatorAware;
 import org.apache.tiles.renderer.AttributeRenderer;
 import org.apache.tiles.renderer.RendererException;
 
@@ -43,7 +45,7 @@
  * @since 2.1.0
  */
 public abstract class AbstractBaseAttributeRenderer implements
-        AttributeRenderer, TilesContextFactoryAware {
+        AttributeRenderer, TilesContextFactoryAware, AttributeEvaluatorAware {
 
     /**
      * The logging object.
@@ -65,6 +67,13 @@
      */
     protected TilesApplicationContext applicationContext;
 
+    /**
+     * The attribute evaluator.
+     *
+     * @since 2.1.0
+     */
+    protected AttributeEvaluator evaluator;
+
     /** {@inheritDoc} */
     public void setContextFactory(TilesContextFactory contextFactory) {
         this.contextFactory = contextFactory;
@@ -76,6 +85,11 @@
     }
 
     /** {@inheritDoc} */
+    public void setEvaluator(AttributeEvaluator evaluator) {
+        this.evaluator = evaluator;
+    }
+
+    /** {@inheritDoc} */
     public void render(Attribute attribute, Writer writer,
             Object... requestItems) throws IOException, TilesException {
         TilesRequestContext request = getRequestContext(requestItems);
@@ -92,23 +106,30 @@
             return;
         }
 
-        write(attribute, writer, request, requestItems);
+        Object value = attribute.getValue();
+
+        if (attribute.getValue() instanceof String) {
+            value = evaluator.evaluate((String) value, request);
+        }
+
+        write(value, attribute, writer, request, requestItems);
     }
 
     /**
      * Implement this method knowing that the attribute won't be null and it
      * will be authorized.
-     *
+     * @param value The value of the attribute to be rendered.
      * @param attribute The attribute to render.
      * @param writer The writer to use.
      * @param request The Tiles request object.
      * @param requestItems The original request items.
+     *
      * @throws IOException If something goes wrong during rendition.
      * @throws TilesException If something goes wrong in Tiles engine.
      * @since 2.1.0
      */
-    public abstract void write(Attribute attribute, Writer writer,
-            TilesRequestContext request, Object... requestItems)
+    public abstract void write(Object value, Attribute attribute,
+            Writer writer, TilesRequestContext request, Object... requestItems)
             throws IOException, TilesException;
 
     /**

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -30,6 +30,8 @@
 import org.apache.tiles.awareness.TilesContainerAware;
 import org.apache.tiles.awareness.TilesContextFactoryAware;
 import org.apache.tiles.context.TilesContextFactory;
+import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.AttributeEvaluatorAware;
 import org.apache.tiles.renderer.AttributeRenderer;
 import org.apache.tiles.renderer.RendererException;
 import org.apache.tiles.renderer.RendererFactory;
@@ -42,7 +44,7 @@
  * @since 2.1.0
  */
 public class BasicRendererFactory implements RendererFactory,
-        TilesContainerAware, TilesContextFactoryAware {
+        TilesContainerAware, TilesContextFactoryAware, AttributeEvaluatorAware {
 
     /**
      * The type renderers init parameter name.
@@ -97,6 +99,13 @@
     protected TilesContainer container;
 
     /**
+     * The attribute evaluator.
+     *
+     * @since 2.1.0
+     */
+    protected AttributeEvaluator evaluator;
+
+    /**
      * The renderer name/renderer map.
      *
      * @since 2.1.0
@@ -181,6 +190,11 @@
     }
 
     /** {@inheritDoc} */
+    public void setEvaluator(AttributeEvaluator evaluator) {
+        this.evaluator = evaluator;
+    }
+
+    /** {@inheritDoc} */
     public void setContextFactory(TilesContextFactory contextFactory) {
         this.contextFactory = contextFactory;
     }
@@ -204,6 +218,9 @@
         }
         if (renderer instanceof TilesContainerAware) {
             ((TilesContainerAware) renderer).setContainer(container);
+        }
+        if (renderer instanceof AttributeEvaluatorAware) {
+            ((AttributeEvaluatorAware) renderer).setEvaluator(evaluator);
         }
     }
 }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java Tue Mar  4 12:47:06 2008
@@ -53,9 +53,9 @@
 
     /** {@inheritDoc} */
     @Override
-    public void write(Attribute attribute, Writer writer,
-            TilesRequestContext request, Object... requestItems)
+    public void write(Object value, Attribute attribute,
+            Writer writer, TilesRequestContext request, Object... requestItems)
             throws IOException, TilesException {
-        container.render(attribute.getValue().toString(), requestItems);
+        container.render(value.toString(), requestItems);
     }
 }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java Tue Mar  4 12:47:06 2008
@@ -36,9 +36,9 @@
 public class StringAttributeRenderer extends AbstractBaseAttributeRenderer {
 
     /** {@inheritDoc} */
-    public void write(Attribute attribute, Writer writer,
-            TilesRequestContext request, Object... requestItems)
+    public void write(Object value, Attribute attribute,
+            Writer writer, TilesRequestContext request, Object... requestItems)
             throws IOException, TilesException {
-        writer.write(attribute.getValue().toString());
+        writer.write(value.toString());
     }
 }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java Tue Mar  4 12:47:06 2008
@@ -37,9 +37,9 @@
 
     /** {@inheritDoc} */
     @Override
-    public void write(Attribute attribute, Writer writer,
-            TilesRequestContext request, Object... requestItems)
+    public void write(Object value, Attribute attribute,
+            Writer writer, TilesRequestContext request, Object... requestItems)
             throws IOException, TilesException {
-        request.dispatch(attribute.getValue().toString());
+        request.dispatch(value.toString());
     }
 }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java Tue Mar  4 12:47:06 2008
@@ -51,12 +51,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public void write(Attribute attribute, Writer writer,
-            TilesRequestContext request, Object... requestItems)
+    public void write(Object value, Attribute attribute,
+            Writer writer, TilesRequestContext request, Object... requestItems)
             throws IOException, TilesException {
-        Object valueContent = attribute.getValue();
-        if (valueContent instanceof String) {
-            String valueString = (String) valueContent;
+        if (value instanceof String) {
+            String valueString = (String) value;
             if (container.isValidDefinition(valueString, requestItems)) {
                 container.render(valueString, requestItems);
             } else if (valueString.startsWith("/")) {

Added: 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=633632&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/evaluator/impl/DirectEvaluatorTest.java Tue Mar  4 12:47:06 2008
@@ -0,0 +1,56 @@
+/*
+ * $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.impl;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link DirectEvaluator}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DirectEvaluatorTest extends TestCase {
+
+    /**
+     * The evaluator to test.
+     */
+    private DirectEvaluator evaluator;
+
+    /** {@inheritDoc} */
+    public void setUp() throws Exception {
+        evaluator = new DirectEvaluator();
+    }
+
+    /**
+     * Tests
+     * {@link DirectEvaluator#evaluate(String, org.apache.tiles.context.TilesRequestContext)}.
+     */
+    public void testEvaluate() {
+        String expression = "This is an expression";
+        Object result = evaluator.evaluate(expression, null);
+        assertEquals("The expression has not been evaluated correctly", result,
+                expression);
+        expression = "${attributeName}";
+        result = evaluator.evaluate(expression, null);
+        assertEquals("The expression has not been evaluated correctly", result,
+                expression);
+    }
+}

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

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

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java Tue Mar  4 12:47:06 2008
@@ -155,6 +155,22 @@
     }
 
     /**
+     * Tests {@link BasicTilesContainer#evaluate(Attribute, Object...)}.
+     *
+     * @throws TilesException If something goes wrong.
+     */
+    public void testEvaluate() throws TilesException {
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        MockHttpSession session = new MockHttpSession();
+        request.setHttpSession(session);
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        Attribute attribute = new Attribute((Object) "This is the value");
+        Object value = container.evaluate(attribute, request, response);
+        assertEquals("The attribute has not been evaluated correctly",
+                "This is the value", value);
+    }
+
+    /**
      * Servlet request mock class that allows to choose the user roles.
      */
     private static class RoleMockHttpServletRequest extends MockHttpServletRequest {

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -159,8 +159,8 @@
 
         /** {@inheritDoc} */
         @Override
-        public void write(Attribute attribute, Writer writer,
-                TilesRequestContext request, Object... requestItems)
+        public void write(Object value, Attribute attribute,
+                Writer writer, TilesRequestContext request, Object... requestItems)
                 throws IOException, TilesException {
             writer.write("wrote");
         }

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -29,6 +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.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -49,11 +50,12 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new DefinitionAttributeRenderer();
+        renderer.setEvaluator(new DirectEvaluator());
     }
 
     /**
      * Tests
-     * {@link StringAttributeRenderer#write(Attribute, java.io.Writer, TilesRequestContext, Object...)}.
+     * {@link StringAttributeRenderer#write(Object, Attribute, java.io.Writer, TilesRequestContext, Object...)}.
      *
      * @throws IOException If something goes wrong during rendition.
      * @throws TilesException If something goes wrong during the usage of Tiles.

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -28,6 +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.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -48,11 +49,12 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new StringAttributeRenderer();
+        renderer.setEvaluator(new DirectEvaluator());
     }
 
     /**
      * Tests
-     * {@link StringAttributeRenderer#write(Attribute, java.io.Writer, TilesRequestContext, Object...)}.
+     * {@link StringAttributeRenderer#write(Object, Attribute, java.io.Writer, TilesRequestContext, Object...)}.
      *
      * @throws IOException If something goes wrong during rendition.
      * @throws TilesException If something goes wrong during the usage of Tiles.

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -28,6 +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.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -48,11 +49,12 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new TemplateAttributeRenderer();
+        renderer.setEvaluator(new DirectEvaluator());
     }
 
     /**
      * Tests
-     * {@link StringAttributeRenderer#write(Attribute, java.io.Writer, TilesRequestContext, Object...)}.
+     * {@link StringAttributeRenderer#write(Object, Attribute, java.io.Writer, TilesRequestContext, Object...)}.
      *
      * @throws IOException If something goes wrong during rendition.
      * @throws TilesException If something goes wrong during the usage of Tiles.

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=633632&r1=633631&r2=633632&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 Tue Mar  4 12:47:06 2008
@@ -29,6 +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.easymock.EasyMock;
 
 import junit.framework.TestCase;
@@ -49,11 +50,12 @@
     @Override
     protected void setUp() throws Exception {
         renderer = new UntypedAttributeRenderer();
+        renderer.setEvaluator(new DirectEvaluator());
     }
 
     /**
      * Tests
-     * {@link StringAttributeRenderer#write(Attribute, java.io.Writer, TilesRequestContext, Object...)}
+     * {@link StringAttributeRenderer#write(Object, Attribute, java.io.Writer, TilesRequestContext, Object...)}
      * writing a Definition.
      *
      * @throws IOException If something goes wrong during rendition.
@@ -85,7 +87,7 @@
 
     /**
      * Tests
-     * {@link StringAttributeRenderer#write(Attribute, java.io.Writer, TilesRequestContext, Object...)}
+     * {@link StringAttributeRenderer#write(Object, Attribute, java.io.Writer, TilesRequestContext, Object...)}
      * writing a string.
      *
      * @throws IOException If something goes wrong during rendition.
@@ -116,7 +118,7 @@
 
     /**
      * Tests
-     * {@link StringAttributeRenderer#write(Attribute, java.io.Writer, TilesRequestContext, Object...)}
+     * {@link StringAttributeRenderer#write(Object, Attribute, java.io.Writer, TilesRequestContext, Object...)}
      * writing a template.
      *
      * @throws IOException If something goes wrong during rendition.

Modified: tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/renderer/ReverseStringAttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/renderer/ReverseStringAttributeRenderer.java?rev=633632&r1=633631&r2=633632&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/renderer/ReverseStringAttributeRenderer.java (original)
+++ tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/renderer/ReverseStringAttributeRenderer.java Tue Mar  4 12:47:06 2008
@@ -37,8 +37,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public void write(Attribute attribute, Writer writer,
-            TilesRequestContext request, Object... requestItems)
+    public void write(Object value, Attribute attribute,
+            Writer writer, TilesRequestContext request, Object... requestItems)
             throws IOException, TilesException {
         String original = attribute.getValue().toString();
         char[] array = original.toCharArray();