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/02/23 12:20:34 UTC

svn commit: r630422 [1/2] - in /tiles/framework/trunk: tiles-api/src/main/java/org/apache/tiles/ tiles-api/src/test/java/org/apache/tiles/ tiles-compat/src/test/java/org/apache/tiles/compat/definition/digester/ tiles-core/src/main/java/org/apache/tiles...

Author: apetrelli
Date: Sat Feb 23 03:20:20 2008
New Revision: 630422

URL: http://svn.apache.org/viewvc?rev=630422&view=rev
Log:
TILES-189
Created the "renderer" string property in Attribute.

TILES-190
Attribute renderer created.
JUnit test needed.

TILES-191
Untyped attribute renderer created.
JUnit test needed.

TILES-249
Created attribute renderer factory.
JUnit test needed.

TILES-250
The renderer factory is used inside the BasicTilesContainer.

All existing JUnit and Selenium tests pass.

Added:
    tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesRuntimeException.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContainerAware.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContextFactoryAware.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/AttributeRenderer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererException.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererFactory.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/package.html   (with props)
Modified:
    tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java
    tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Definition.java
    tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/TestDefinition.java
    tiles/framework/trunk/tiles-compat/src/test/java/org/apache/tiles/compat/definition/digester/TestCompatibilityDigesterDefinitionsReader.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.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/test/java/org/apache/tiles/config/tiles-defs-2.1.xml
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestDefinitions.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestUrlDefinitionsFactory.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/RenderTagSupport.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java

Modified: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java Sat Feb 23 03:20:20 2008
@@ -37,6 +37,9 @@
 
     /**
      * Attribute types.
+     *
+     * @deprecated Use {@link Attribute#setRenderer(String)} and
+     * {@link Attribute#getRenderer()}.
      */
     public static enum AttributeType {
         /**
@@ -122,10 +125,10 @@
     protected Object value = null;
 
     /**
-     * The type of the attribute. It can be <code>string</code>,
-     * <code>template</code>, <code>definition</code>.
+     * The renderer name of the attribute. Default names are <code>string</code>,
+     * <code>template</code>, <code>definition</code>, <code>object</code>.
      */
-    private AttributeType type = null;
+    private String renderer = null;
 
     /**
      * The name of the attribute. If it is <code>null</code>, it should be used
@@ -159,8 +162,8 @@
     public Attribute(Attribute attribute) {
         this.name = attribute.name;
         this.roles = attribute.roles;
-        this.type = attribute.type;
         this.value = attribute.getValue();
+        this.renderer = attribute.renderer;
     }
 
     /**
@@ -189,12 +192,28 @@
      * Constructor.
      *
      * @param value Object to store.
-     * @param role  Asociated role.
-     * @param type  Attribute type.
+     * @param role Associated role.
+     * @param type Attribute type.
+     * @deprecated Use {@link Attribute#Attribute(Object, String, String)}.
      */
+    @Deprecated
     public Attribute(Object value, String role, AttributeType type) {
         this.value = value;
-        this.type = type;
+        setType(type);
+        setRole(role);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param value Object to store.
+     * @param role Associated role.
+     * @param rendererName The renderer name.
+     * @since 2.1.0
+     */
+    public Attribute(Object value, String role, String rendererName) {
+        this.value = value;
+        this.renderer = rendererName;
         setRole(role);
     }
 
@@ -203,14 +222,16 @@
      *
      * @param name name of the attribute
      * @param value Object to store.
-     * @param role  Asociated role.
-     * @param type  Attribute type.
+     * @param role Asociated role.
+     * @param type Attribute type.
+     * @deprecated Use
+     * {@link Attribute#Attribute(Object, String, String)))}.
      */
     public Attribute(String name, Object value, String role,
             AttributeType type) {
         this.name = name;
         this.value = value;
-        this.type = type;
+        setType(type);
         setRole(role);
     }
 
@@ -304,18 +325,40 @@
      *
      * @return The attribute type. It can be <code>string</code>,
      * <code>template</code>, <code>definition</code>, <code>object</code>.
+     * @deprecated Use {@link Attribute#getRenderer()}.
      */
     public AttributeType getType() {
-        return type;
+        return AttributeType.getType(renderer);
     }
 
     /**
      * Sets the type of this attribute.
      *
      * @param type The attribute type.
+     * @deprecated Use {@link Attribute#setRenderer(String))}.
      */
     public void setType(AttributeType type) {
-        this.type = type;
+        this.renderer = type.toString();
+    }
+
+    /**
+     * Returns the renderer name to use.
+     *
+     * @return The renderer name.
+     * @since 2.1.0
+     */
+    public String getRenderer() {
+        return renderer;
+    }
+
+    /**
+     * Sets the renderer name to use.
+     *
+     * @param rendererName The renderer.
+     * @since 2.1.0
+     */
+    public void setRenderer(String rendererName) {
+        this.renderer = rendererName;
     }
 
     /**

Modified: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Definition.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Definition.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Definition.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Definition.java Sat Feb 23 03:20:20 2008
@@ -26,8 +26,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.tiles.Attribute.AttributeType;
-
 /**
  * A definition, i.e. a template with (completely or not) filled attributes.
  * Attributes of a template can be defined with the help of this class.<br>
@@ -260,7 +258,8 @@
      */
     @Deprecated
     public void put(String name, Object content, String role) {
-        put(name, content, null, role);
+        Attribute attribute = new Attribute(content, role, (String) null);
+        putAttribute(name, attribute);
     }
 
     /**
@@ -275,7 +274,8 @@
      * or {@link AttributeContext#putAttribute(String, Attribute, boolean)}.
      */
     @Deprecated
-    public void put(String name, Object content, AttributeType type, String role) {
+    public void put(String name, Object content,
+            org.apache.tiles.Attribute.AttributeType type, String role) {
         // Is there a type set ?
         // First check direct attribute, and translate it to a valueType.
         // Then, evaluate valueType, and create requested typed attribute.

Added: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesRuntimeException.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesRuntimeException.java?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesRuntimeException.java (added)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesRuntimeException.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,79 @@
+/*
+ * $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;
+
+/**
+ * Root class for all Tiles runtime exceptions.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class TilesRuntimeException extends RuntimeException {
+
+    /**
+     * Constructor.
+     * @since 2.1.0
+     */
+    public TilesRuntimeException() {
+        super();
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message The error or warning message.
+     * @since 2.1.0
+     */
+    public TilesRuntimeException(String message) {
+        super(message);
+    }
+
+    /**
+     * Create a new <code>TilesRuntimeException</code> wrapping an existing
+     * exception. <p/>
+     * <p>
+     * The existing exception will be embedded in the new one, and its message
+     * will become the default message for the TilesException.
+     * </p>
+     *
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public TilesRuntimeException(Exception e) {
+        super(e);
+    }
+
+    /**
+     * Create a new <code>TilesRuntimeException</code> from an existing
+     * exception. <p/>
+     * <p>
+     * The existing exception will be embedded in the new one, but the new
+     * exception will have its own message.
+     * </p>
+     *
+     * @param message The detail message.
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public TilesRuntimeException(String message, Exception e) {
+        super(message, e);
+    }
+}

Propchange: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/TilesRuntimeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Modified: tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/TestDefinition.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/TestDefinition.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/TestDefinition.java (original)
+++ tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/TestDefinition.java Sat Feb 23 03:20:20 2008
@@ -22,8 +22,6 @@
 package org.apache.tiles;
 
 
-import org.apache.tiles.Attribute.AttributeType;
-
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -71,13 +69,14 @@
         Definition def = new Definition();
         def.setName("test1");
         def.setTemplate("/page1.jsp");
-        Attribute attr1 = new Attribute("test.definition.name", null, AttributeType.DEFINITION);
+        Attribute attr1 = new Attribute("test.definition.name", null,
+                "definition");
         def.putAttribute("attr1",  attr1);
 
         attr1 = def.getAttribute("attr1");
         assertNotNull("Null attribute.", attr1);
-        assertTrue("Wrong attribute type",
-                attr1.getType() == AttributeType.DEFINITION);
+        assertTrue("Wrong attribute type", "definition".equals(attr1
+                .getRenderer()));
     }
 
     /**

Modified: tiles/framework/trunk/tiles-compat/src/test/java/org/apache/tiles/compat/definition/digester/TestCompatibilityDigesterDefinitionsReader.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-compat/src/test/java/org/apache/tiles/compat/definition/digester/TestCompatibilityDigesterDefinitionsReader.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-compat/src/test/java/org/apache/tiles/compat/definition/digester/TestCompatibilityDigesterDefinitionsReader.java (original)
+++ tiles/framework/trunk/tiles-compat/src/test/java/org/apache/tiles/compat/definition/digester/TestCompatibilityDigesterDefinitionsReader.java Sat Feb 23 03:20:20 2008
@@ -51,6 +51,11 @@
             .getLog(TestCompatibilityDigesterDefinitionsReader.class);
 
     /**
+     * The definitions reader.
+     */
+    private DefinitionsReader reader;
+
+    /**
      * Creates a new instance of TestDigesterDefinitionsReader.
      *
      * @param name The name of the test.
@@ -67,6 +72,13 @@
         return new TestSuite(TestCompatibilityDigesterDefinitionsReader.class);
     }
 
+    /** {@inheritDoc} */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        reader = new CompatibilityDigesterDefinitionsReader();
+    }
+
     /**
      * Tests the read method to read Tiles 1.1 files.
      *
@@ -74,7 +86,6 @@
      * @throws IOException If an I/O exception happens.
      */
     public void testReadOldFormat() throws DefinitionsFactoryException, IOException {
-        DefinitionsReader reader = new CompatibilityDigesterDefinitionsReader();
         reader.init(new HashMap<String, String>());
 
         URL configFile = this.getClass().getClassLoader().getResource(
@@ -101,7 +112,6 @@
      * @throws IOException If an I/O exception happens.
      */
     public void testReadNewFormat() throws DefinitionsFactoryException, IOException {
-        DefinitionsReader reader = new CompatibilityDigesterDefinitionsReader();
         reader.init(new HashMap<String, String>());
 
         URL configFile = this.getClass().getClassLoader().getResource(
@@ -127,7 +137,6 @@
      */
     public void testRead21Version() {
         try {
-            DefinitionsReader reader = new CompatibilityDigesterDefinitionsReader();
             reader.init(new HashMap<String, String>());
 
             URL configFile = this.getClass().getClassLoader().getResource(
@@ -159,8 +168,6 @@
      */
     public void testNoInit() {
         try {
-            DefinitionsReader reader = new CompatibilityDigesterDefinitionsReader();
-
             // What happens if we don't call init?
             // reader.init(new HashMap());
 
@@ -187,12 +194,7 @@
      */
     public void testBadSource() {
         try {
-            // Create Digester Reader.
-            DefinitionsReader reader = new CompatibilityDigesterDefinitionsReader();
-            Map<String, String> params = new HashMap<String, String>();
-
-            // Initialize reader.
-            reader.init(params);
+            reader.init(new HashMap<String, String>());
 
             // Read definitions.
             reader.read(new String("Bad Input"));

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContainerAware.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContainerAware.java?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContainerAware.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContainerAware.java Sat Feb 23 03:20:20 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.awareness;
+
+import org.apache.tiles.TilesContainer;
+
+/**
+ * It represents an object that can have a reference to the
+ * {@link TilesContainer}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public interface TilesContainerAware {
+
+    /**
+     * Sets the Tiles container.
+     *
+     * @param container The Tiles container.
+     * @since 2.1.0
+     */
+    void setContainer(TilesContainer container);
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContextFactoryAware.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContextFactoryAware.java?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContextFactoryAware.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/TilesContextFactoryAware.java Sat Feb 23 03:20:20 2008
@@ -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.awareness;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.context.TilesContextFactory;
+
+/**
+ * It represents an object that can have a reference to the
+ * {@link TilesContextFactory} and to the {@link TilesApplicationContext}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public interface TilesContextFactoryAware {
+
+    /**
+     * Sets the Tiles context factory.
+     *
+     * @param contextFactory The Tiles context factory.
+     * @since 2.1.0
+     */
+    void setContextFactory(TilesContextFactory contextFactory);
+
+    /**
+     * Sets the Tiles application context.
+     *
+     * @param applicationContext The Tiles application context.
+     * @since 2.1.0
+     */
+    void setApplicationContext(TilesApplicationContext applicationContext);
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/package.html?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/awareness/package.html Sat Feb 23 03:20:20 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 interfaces for injection of dependencies</title>
+</head>
+<body>
+Interfaces that let the Tiles engine to inject dependencies to its objects.
+</body>
+</html>
\ No newline at end of file

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

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

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java Sat Feb 23 03:20:20 2008
@@ -25,7 +25,6 @@
 import org.apache.commons.digester.Rule;
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
-import org.apache.tiles.Attribute.AttributeType;
 import org.apache.tiles.context.ListAttribute;
 import org.apache.tiles.definition.DefinitionsFactoryException;
 import org.apache.tiles.definition.DefinitionsReader;
@@ -157,8 +156,7 @@
             Attribute attribute = (Attribute) digester.peek();
             attribute.setValue(attributes.getValue("value"));
             attribute.setRole(attributes.getValue("role"));
-            attribute.setType(AttributeType
-                    .getType(attributes.getValue("type")));
+            attribute.setRenderer(attributes.getValue("type"));
         }
     }
 

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=630422&r1=630421&r2=630422&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 Sat Feb 23 03:20:20 2008
@@ -23,6 +23,8 @@
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.TilesException;
+import org.apache.tiles.awareness.TilesContainerAware;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
 import org.apache.tiles.context.ChainedTilesContextFactory;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.definition.DefinitionsFactory;
@@ -32,6 +34,8 @@
 import org.apache.tiles.mgmt.MutableTilesContainer;
 import org.apache.tiles.preparer.BasicPreparerFactory;
 import org.apache.tiles.preparer.PreparerFactory;
+import org.apache.tiles.renderer.RendererFactory;
+import org.apache.tiles.renderer.impl.BasicRendererFactory;
 import org.apache.tiles.util.ClassUtil;
 
 import java.lang.reflect.Method;
@@ -82,6 +86,12 @@
     public static final String PREPARER_FACTORY_INIT_PARAM =
         "org.apache.tiles.preparer.PreparerFactory";
 
+    /**
+     * Initialization parameter that represents the renderer factory class name.
+     * @since 2.1.0
+     */
+    public static final String RENDERER_FACTORY_INIT_PARAM =
+        "org.apache.tiles.renderer.RendererFactory";
 
     /**
      * Default configuration parameters.
@@ -94,6 +104,7 @@
         DEFAULTS.put(CONTEXT_FACTORY_INIT_PARAM, ChainedTilesContextFactory.class.getName());
         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());
     }
 
     /**
@@ -255,20 +266,35 @@
             (DefinitionsFactory) createFactory(configuration,
                 DEFINITIONS_FACTORY_INIT_PARAM);
 
-        PreparerFactory prepFactory =
-            (PreparerFactory) createFactory(configuration,
-                PREPARER_FACTORY_INIT_PARAM);
+        RendererFactory rendererFactory =
+            (RendererFactory) createFactory(configuration,
+                RENDERER_FACTORY_INIT_PARAM);
 
         contextFactory.init(configuration);
         TilesApplicationContext tilesContext =
             contextFactory.createApplicationContext(context);
 
+        if (rendererFactory instanceof TilesContextFactoryAware) {
+            ((TilesContextFactoryAware) rendererFactory)
+                    .setContextFactory(contextFactory);
+            ((TilesContextFactoryAware) rendererFactory)
+                    .setApplicationContext(tilesContext);
+        }
+
+        if (rendererFactory instanceof TilesContainerAware) {
+            ((TilesContainerAware) rendererFactory).setContainer(container);
+        }
+
+        PreparerFactory prepFactory =
+            (PreparerFactory) createFactory(configuration,
+                PREPARER_FACTORY_INIT_PARAM);
+
         container.setDefinitionsFactory(defsFactory);
         container.setContextFactory(contextFactory);
         container.setPreparerFactory(prepFactory);
         container.setApplicationContext(tilesContext);
+        container.setRendererFactory(rendererFactory);
     }
-
 
     /**
      * Creates a factory instance.

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=630422&r1=630421&r2=630422&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 Sat Feb 23 03:20:20 2008
@@ -29,7 +29,6 @@
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.TilesException;
-import org.apache.tiles.Attribute.AttributeType;
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.context.TilesRequestContext;
 import org.apache.tiles.definition.DefinitionsFactory;
@@ -38,6 +37,9 @@
 import org.apache.tiles.preparer.NoSuchPreparerException;
 import org.apache.tiles.preparer.PreparerFactory;
 import org.apache.tiles.preparer.ViewPreparer;
+import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.renderer.RendererException;
+import org.apache.tiles.renderer.RendererFactory;
 
 import java.io.IOException;
 import java.io.Writer;
@@ -103,6 +105,11 @@
     private PreparerFactory preparerFactory;
 
     /**
+     * The renderer factory.
+     */
+    private RendererFactory rendererFactory;
+
+    /**
      * The Tiles context factory.
      */
     private TilesContextFactory contextFactory;
@@ -125,6 +132,12 @@
             LOG.info("Initializing Tiles2 container. . .");
         }
 
+        if (rendererFactory != null) {
+            rendererFactory.init(initParameters);
+        } else {
+            throw new IllegalStateException("RendererFactory not specified");
+        }
+
         //Everything is now initialized.  We will populate
         // our definitions
         initializeDefinitionsFactory(definitionsFactory, getResourceString(),
@@ -226,6 +239,16 @@
         this.preparerFactory = preparerFactory;
     }
 
+    /**
+     * Sets the renderer instance factory.
+     *
+     * @param rendererFactory the renderer instance factory for this container.
+     * @since 2.1.0
+     */
+    public void setRendererFactory(RendererFactory rendererFactory) {
+        this.rendererFactory = rendererFactory;
+    }
+
     /** {@inheritDoc} */
     public void prepare(String preparer, Object... requestItems)
         throws TilesException {
@@ -249,44 +272,18 @@
     /** {@inheritDoc} */
     public void render(Attribute attr, Writer writer, Object... requestItems)
         throws TilesException, IOException {
-        TilesRequestContext request = getRequestContext(requestItems);
-
         if (attr == null) {
-            throw new TilesException("Cannot render a null attribute");
+            throw new RendererException("Cannot render a null attribute");
         }
 
-        if (!isPermitted(request, attr.getRoles())) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Access to attribute denied.  User not in role '"
-                        + attr.getRoles() + "'");
-            }
-            return;
-        }
-
-        AttributeType type = attr.getType();
-        if (type == null) {
-            type = calculateType(attr, request);
-            attr.setType(type);
-        }
-
-        switch (type) {
-            case OBJECT:
-                throw new TilesException(
-                    "Cannot insert an attribute of 'object' type");
-            case STRING:
-                writer.write(attr.getValue().toString());
-                break;
-            case DEFINITION:
-                render(request, attr.getValue().toString());
-                break;
-            case TEMPLATE:
-                request.dispatch(attr.getValue().toString());
-                break;
-            default: // should not happen
-                throw new TilesException(
-                        "Unrecognized type for attribute value "
-                        + attr.getValue());
+        AttributeRenderer renderer = rendererFactory.getRenderer(attr
+                .getRenderer());
+        if (renderer == null) {
+            throw new RendererException(
+                    "Cannot render an attribute with renderer name "
+                            + attr.getRenderer());
         }
+        renderer.render(attr, writer, requestItems);
     }
 
     /** {@inheritDoc} */
@@ -384,6 +381,10 @@
     protected void initializeDefinitionsFactory(
             DefinitionsFactory definitionsFactory, String resourceString,
             Map<String, String> initParameters) throws TilesException {
+        if (rendererFactory == null) {
+            throw new IllegalStateException("No RendererFactory found");
+        }
+
         List<String> resources = getResourceNames(resourceString);
 
         try {
@@ -620,34 +621,6 @@
         } finally {
             popContext(request);
         }
-    }
-
-    /**
-     * Calculates the type of an attribute.
-     *
-     * @param attr The attribute to check.
-     * @param request The request object.
-     * @return The calculated attribute type.
-     * @throws TilesException If the type is not recognized.
-     */
-    private AttributeType calculateType(Attribute attr,
-            TilesRequestContext request) throws TilesException {
-        AttributeType type;
-        Object valueContent = attr.getValue();
-        if (valueContent instanceof String) {
-            String valueString = (String) valueContent;
-            if (isValidDefinition(request, valueString)) {
-                type = AttributeType.DEFINITION;
-            } else if (valueString.startsWith("/")) {
-                type = AttributeType.TEMPLATE;
-            } else {
-                type = AttributeType.STRING;
-            }
-        } else {
-            type = AttributeType.OBJECT;
-        }
-
-        return type;
     }
 
     /**

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/AttributeRenderer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/AttributeRenderer.java?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/AttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/AttributeRenderer.java Sat Feb 23 03:20:20 2008
@@ -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.renderer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesException;
+
+/**
+ * An object that can render an attribute. For each attribute, if it needs to be
+ * rendered, has an associated renderer.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public interface AttributeRenderer {
+
+    /**
+     * Renders an attribute.
+     *
+     * @param attribute The attribute to render.
+     * @param writer The writer to use.
+     * @param requestItems The request items.
+     * @throws IOException If something goes wrong during rendition.
+     * @throws TilesException If something goes wrong in Tiles engine.
+     * @since 2.1.0
+     */
+    void render(Attribute attribute, Writer writer, Object... requestItems)
+            throws IOException, TilesException;
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererException.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererException.java?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererException.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererException.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,81 @@
+/*
+ * $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.renderer;
+
+import org.apache.tiles.TilesException;
+
+/**
+ * Exception for attribute rendition events.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class RendererException extends TilesException {
+
+    /**
+     * Constructor.
+     *
+     * @since 2.1.0
+     */
+    public RendererException() {
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message The error or warning message.
+     * @since 2.1.0
+     */
+    public RendererException(String message) {
+        super(message);
+    }
+
+    /**
+     * Create a new <code>RendererException</code> wrapping an existing
+     * exception. <p/>
+     * <p>
+     * The existing exception will be embedded in the new one, and its message
+     * will become the default message for the TilesException.
+     * </p>
+     *
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public RendererException(Exception e) {
+        super(e);
+    }
+
+    /**
+     * Create a new <code>RendererException</code> from an existing exception.
+     * <p/>
+     * <p>
+     * The existing exception will be embedded in the new one, but the new
+     * exception will have its own message.
+     * </p>
+     *
+     * @param message The detail message.
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public RendererException(String message, Exception e) {
+        super(message, e);
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererFactory.java?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/RendererFactory.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,61 @@
+/*
+ * $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.renderer;
+
+import java.util.Map;
+
+import org.apache.tiles.TilesException;
+
+/**
+ * <p>
+ * Factory interface used to create/retrieve instances of the
+ * {@link AttributeRenderer} interface.
+ * </p>
+ *
+ * <p>
+ * This factory provides an extension point into the default tiles
+ * implementation. Implementors wishing to provide per request initialization of
+ * the AttributeRenderer (for instance) may provide a custom renderer.
+ * </p>
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public interface RendererFactory {
+
+    /**
+     * Initialize the renderer factory.
+     *
+     * @param parameters The parameters for the initialization.
+     * @throws TilesException If something goes wrong during initialization.
+     * @since 2.1.0
+     */
+    void init(Map<String, String> parameters) throws TilesException;
+
+    /**
+     * Returns a renderer by its name.
+     *
+     * @param name The name of the renderer.
+     * @return The renderer.
+     * @since 2.1.0
+     */
+    AttributeRenderer getRenderer(String name);
+}

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

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

Added: 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=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,149 @@
+/*
+ * $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.renderer.impl;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
+import org.apache.tiles.context.TilesContextFactory;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.renderer.RendererException;
+
+/**
+ * Base abstract class that manages authorization to display the attribute.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public abstract class AbstractBaseAttributeRenderer implements
+        AttributeRenderer, TilesContextFactoryAware {
+
+    /**
+     * The logging object.
+     */
+    private static final Log LOG = LogFactory
+            .getLog(AbstractBaseAttributeRenderer.class);
+
+    /**
+     * The Tiles context factory.
+     *
+     * @since 2.1.0
+     */
+    protected TilesContextFactory contextFactory;
+
+    /**
+     * The Tiles application context.
+     *
+     * @since 2.1.0
+     */
+    protected TilesApplicationContext applicationContext;
+
+    /** {@inheritDoc} */
+    public void setContextFactory(TilesContextFactory contextFactory) {
+        this.contextFactory = contextFactory;
+    }
+
+    /** {@inheritDoc} */
+    public void setApplicationContext(TilesApplicationContext applicationContext) {
+        this.applicationContext = applicationContext;
+    }
+
+    /** {@inheritDoc} */
+    public void render(Attribute attribute, Writer writer,
+            Object... requestItems) throws IOException, TilesException {
+        TilesRequestContext request = getRequestContext(requestItems);
+
+        if (attribute == null) {
+            throw new RendererException("Cannot render a null attribute");
+        }
+
+        if (!isPermitted(request, attribute.getRoles())) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Access to attribute denied.  User not in role '"
+                        + attribute.getRoles() + "'");
+            }
+            return;
+        }
+
+        write(attribute, writer, request, requestItems);
+    }
+
+    /**
+     * Implement this method knowing that the attribute won't be null and it
+     * will be authorized.
+     *
+     * @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)
+            throws IOException, TilesException;
+
+    /**
+     * Creates a Tiles request context from request items.
+     *
+     * @param requestItems The request items.
+     * @return The created Tiles request context.
+     * @since 2.1.0
+     */
+    protected TilesRequestContext getRequestContext(Object... requestItems) {
+        return contextFactory.createRequestContext(applicationContext,
+                requestItems);
+    }
+
+    /**
+     * Checks if the current user is in one of the comma-separated roles
+     * specified in the <code>role</code> parameter.
+     *
+     * @param request The request context.
+     * @param roles The list of roles.
+     * @return <code>true</code> if the current user is in one of those roles.
+     * @since 2.1.0
+     */
+    protected boolean isPermitted(TilesRequestContext request, Set<String> roles) {
+        if (roles == null || roles.isEmpty()) {
+            return true;
+        }
+
+        boolean retValue = false;
+
+        for (Iterator<String> roleIt = roles.iterator(); roleIt.hasNext()
+                && !retValue;) {
+            retValue = request.isUserInRole(roleIt.next());
+        }
+
+        return retValue;
+    }
+}

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

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

Added: 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=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Sat Feb 23 03:20:20 2008
@@ -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.renderer.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.TilesRuntimeException;
+import org.apache.tiles.awareness.TilesContainerAware;
+import org.apache.tiles.awareness.TilesContextFactoryAware;
+import org.apache.tiles.context.TilesContextFactory;
+import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.renderer.RendererException;
+import org.apache.tiles.renderer.RendererFactory;
+import org.apache.tiles.util.ClassUtil;
+
+/**
+ * Basic renderer factory implementation.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class BasicRendererFactory implements RendererFactory,
+        TilesContainerAware, TilesContextFactoryAware {
+
+    /**
+     * The type renderers init parameter name.
+     *
+     * @since 2.1.0
+     */
+    public static final String TYPE_RENDERERS_INIT_PARAM =
+        "org.apache.tiles.rendere.impl.BasicRendereFactory.TYPE_RENDERERS";
+
+    /**
+     * The default renderer init parameter.
+     *
+     * @since 2.1.0
+     */
+    public static final String DEFAULT_RENDERER_INIT_PARAM =
+        "org.apache.tiles.rendere.impl.BasicRendereFactory.DEFAULT_RENDERER";
+
+    /**
+     * The default renderer class name.
+     *
+     * @since 2.1.0
+     */
+    public static final String DEFAULT_RENDERER_CLASS_NAME =
+        UntypedAttributeRenderer.class.getName();
+
+    /**
+     * The default renderer name/renderer class map.
+     *
+     * @since 2.1.0
+     */
+    protected static final Map<String, String> DEFAULT_TYPE_2_RENDERER;
+
+    /**
+     * The Tiles context factory.
+     *
+     * @since 2.1.0
+     */
+    protected TilesContextFactory contextFactory;
+
+    /**
+     * The Tiles application context.
+     *
+     * @since 2.1.0
+     */
+    protected TilesApplicationContext applicationContext;
+
+    /**
+     * The Tiles container.
+     *
+     * @since 2.1.0
+     */
+    protected TilesContainer container;
+
+    /**
+     * The renderer name/renderer map.
+     *
+     * @since 2.1.0
+     */
+    protected Map<String, AttributeRenderer> renderers;
+
+    /**
+     * The default renderer.
+     *
+     * @since 2.1.0
+     */
+    protected AttributeRenderer defaultRenderer;
+
+    static {
+        DEFAULT_TYPE_2_RENDERER = new HashMap<String, String>();
+        DEFAULT_TYPE_2_RENDERER.put("string", StringAttributeRenderer.class
+                .getName());
+        DEFAULT_TYPE_2_RENDERER.put("definition",
+                DefinitionAttributeRenderer.class.getName());
+        DEFAULT_TYPE_2_RENDERER.put("template", TemplateAttributeRenderer.class
+                .getName());
+    }
+
+    /** {@inheritDoc} */
+    public void init(Map<String, String> parameters) throws TilesException {
+        String defaultRendererParam = parameters.get(DEFAULT_RENDERER_INIT_PARAM);
+        if (defaultRendererParam == null) {
+            defaultRendererParam = DEFAULT_RENDERER_CLASS_NAME;
+        }
+        defaultRenderer = (AttributeRenderer) ClassUtil
+                .instantiate(defaultRendererParam);
+        initializeRenderer(defaultRenderer);
+        String typeRenderersParam = parameters.get(TYPE_RENDERERS_INIT_PARAM);
+        Map<String, String> completeParams = new HashMap<String, String>(
+                DEFAULT_TYPE_2_RENDERER);
+        if (typeRenderersParam != null) {
+            String[] pairs = typeRenderersParam.split("\\s*;\\s");
+            for (int i = 0; i < pairs.length; i++) {
+                String[] pair = pairs[i].split("\\s*,\\s*");
+                if (pair == null || pair.length != 2) {
+                    throw new RendererException("The string '" + pairs[i]
+                            + "' is not a valid type-renderer pair");
+                }
+                completeParams.put(pair[0], pair[1]);
+            }
+        }
+
+        renderers = new HashMap<String, AttributeRenderer>();
+        for (Map.Entry<String, String> entry : completeParams.entrySet()) {
+            AttributeRenderer renderer = (AttributeRenderer) ClassUtil
+                    .instantiate(entry.getValue());
+            initializeRenderer(renderer);
+            renderers.put(entry.getKey(), renderer);
+        }
+    }
+
+    /** {@inheritDoc} */
+    public AttributeRenderer getRenderer(String name) {
+        AttributeRenderer retValue;
+        if (name != null) {
+            retValue = renderers.get(name);
+            if (retValue == null) {
+                try {
+                    retValue = (AttributeRenderer) ClassUtil.instantiate(name);
+                } catch (TilesException e) {
+                    throw new TilesRuntimeException(
+                            "Cannot instantiate renderer " + name, e);
+                }
+                renderers.put(name, retValue);
+            }
+        } else {
+            retValue = defaultRenderer;
+        }
+
+        return retValue;
+    }
+
+    /** {@inheritDoc} */
+    public void setContainer(TilesContainer container) {
+        this.container = container;
+    }
+
+    /** {@inheritDoc} */
+    public void setContextFactory(TilesContextFactory contextFactory) {
+        this.contextFactory = contextFactory;
+    }
+
+    /** {@inheritDoc} */
+    public void setApplicationContext(TilesApplicationContext applicationContext) {
+        this.applicationContext = applicationContext;
+    }
+
+    /**
+     * Initialize a renderer, by injecting dependencies.
+     *
+     * @param renderer The renderer to initialize.
+     * @since 2.1.0
+     */
+    protected void initializeRenderer(AttributeRenderer renderer) {
+        if (renderer instanceof TilesContextFactoryAware) {
+            TilesContextFactoryAware cfaRenderer = (TilesContextFactoryAware) renderer;
+            cfaRenderer.setApplicationContext(applicationContext);
+            cfaRenderer.setContextFactory(contextFactory);
+        }
+        if (renderer instanceof TilesContainerAware) {
+            ((TilesContainerAware) renderer).setContainer(container);
+        }
+    }
+}

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

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

Added: 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=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DefinitionAttributeRenderer.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,59 @@
+/*
+ * $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.renderer.impl;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.awareness.TilesContainerAware;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.renderer.AttributeRenderer;
+
+/**
+ * Renders an attribute that contains a reference to a definition.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class DefinitionAttributeRenderer extends AbstractBaseAttributeRenderer
+        implements TilesContainerAware, AttributeRenderer {
+
+    /**
+     * The Tiles container.
+     */
+    private TilesContainer container;
+
+    /** {@inheritDoc} */
+    public void setContainer(TilesContainer container) {
+        this.container = container;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(Attribute attribute, Writer writer,
+            TilesRequestContext request, Object... requestItems)
+            throws IOException, TilesException {
+        container.render(attribute.getValue().toString(), requestItems);
+    }
+}

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

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

Added: 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=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/StringAttributeRenderer.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,44 @@
+/*
+ * $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.renderer.impl;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Renders an attribute that contains a string.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class StringAttributeRenderer extends AbstractBaseAttributeRenderer {
+
+    /** {@inheritDoc} */
+    public void write(Attribute attribute, Writer writer,
+            TilesRequestContext request, Object... requestItems)
+            throws IOException, TilesException {
+        writer.write(attribute.getValue().toString());
+    }
+}

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

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

Added: 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=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/TemplateAttributeRenderer.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,45 @@
+/*
+ * $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.renderer.impl;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.context.TilesRequestContext;
+
+/**
+ * Renders an attribute that contains a reference to a template.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class TemplateAttributeRenderer extends AbstractBaseAttributeRenderer {
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(Attribute attribute, Writer writer,
+            TilesRequestContext request, Object... requestItems)
+            throws IOException, TilesException {
+        request.dispatch(attribute.getValue().toString());
+    }
+}

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

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

Added: 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=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/UntypedAttributeRenderer.java Sat Feb 23 03:20:20 2008
@@ -0,0 +1,72 @@
+/*
+ * $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.renderer.impl;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.awareness.TilesContainerAware;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.renderer.RendererException;
+
+/**
+ * Renders an attribute that has no associated renderer.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class UntypedAttributeRenderer extends AbstractBaseAttributeRenderer
+        implements TilesContainerAware {
+
+    /**
+     * The Tiles container.
+     */
+    private TilesContainer container;
+
+    /** {@inheritDoc} */
+    public void setContainer(TilesContainer container) {
+        this.container = container;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void write(Attribute attribute, Writer writer,
+            TilesRequestContext request, Object... requestItems)
+            throws IOException, TilesException {
+        Object valueContent = attribute.getValue();
+        if (valueContent instanceof String) {
+            String valueString = (String) valueContent;
+            if (container.isValidDefinition(valueString, requestItems)) {
+                container.render(valueString, requestItems);
+            } else if (valueString.startsWith("/")) {
+                request.dispatch(valueString);
+            } else {
+                writer.write(valueString);
+            }
+        } else {
+            throw new RendererException(
+                    "Cannot render an untyped object attribute");
+        }
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/package.html?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/package.html Sat Feb 23 03:20:20 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 renderers implementations</title>
+</head>
+<body>
+Default implementations to manage attribute rendering.
+</body>
+</html>
\ No newline at end of file

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/package.html?rev=630422&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/package.html Sat Feb 23 03:20:20 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 renderers</title>
+</head>
+<body>
+Interfaces to manage attribute rendering.
+</body>
+</html>
\ No newline at end of file

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

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

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/tiles-defs-2.1.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/tiles-defs-2.1.xml?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/tiles-defs-2.1.xml (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/tiles-defs-2.1.xml Sat Feb 23 03:20:20 2008
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <!--
 /*
- * $Id$
+ * $Id:tiles-defs-2.1.xml 628334 2008-02-16 16:01:46Z apetrelli $
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestDefinitions.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestDefinitions.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestDefinitions.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestDefinitions.java Sat Feb 23 03:20:20 2008
@@ -29,7 +29,6 @@
 import junit.framework.TestSuite;
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
-import org.apache.tiles.Attribute.AttributeType;
 
 /**
  * Tests the DefinitionsImpl class.
@@ -84,7 +83,7 @@
         defs.put(def.getName(), def);
         attr = new Attribute();
         attr.setValue("tiles.def1");
-        attr.setType(AttributeType.STRING);
+        attr.setRenderer("string");
         def.putAttribute("attr3", attr);
         defs.put(def.getName(), def);
 
@@ -122,8 +121,8 @@
         assertNotNull("Dependent attribute not found.", attr);
         attr = def.getAttribute("attr3");
         assertNotNull("Dependent attribute not found.", attr);
-        assertTrue("The attribute 'attr3' should be of type STRING", attr
-                .getType() == AttributeType.STRING);
+        assertTrue("The attribute 'attr3' should be of type STRING", "string"
+                .equals(attr.getRenderer()));
 
         def = definitions.getDefinition("child.def1");
 
@@ -140,8 +139,8 @@
         assertNotNull("Dependent attribute not found.", attr);
         attr = def.getAttribute("attr3");
         assertNotNull("Dependent attribute not found.", attr);
-        assertTrue("The attribute 'attr3' should be of type STRING", attr
-                .getType() == AttributeType.STRING);
+        assertTrue("The attribute 'attr3' should be of type STRING", "string"
+                .equals(attr.getRenderer()));
     }
 
     /**
@@ -265,7 +264,7 @@
         def.setTemplate("/test1.jsp");
         Attribute attr = new Attribute();
         attr.setValue("tiles.def2");
-        attr.setType(AttributeType.DEFINITION);
+        attr.setRenderer("definition");
         def.putAttribute("attr1", attr);
         defs.put(def.getName(), def);
 

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestUrlDefinitionsFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestUrlDefinitionsFactory.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestUrlDefinitionsFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/TestUrlDefinitionsFactory.java Sat Feb 23 03:20:20 2008
@@ -22,11 +22,11 @@
 package org.apache.tiles.definition;
 
 import java.net.URL;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Collections;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -55,6 +55,18 @@
     private static final int POSTFIX_COUNT = 3;
 
     /**
+     * The definitions factory.
+     */
+    private MockPublicUrlDefinitionsFactory factory;
+
+    /** {@inheritDoc} */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        factory = new MockPublicUrlDefinitionsFactory();
+    }
+
+    /**
      * Creates a new instance of TestUrlDefinitionsFactory.
      *
      * @param name The name of the test.
@@ -88,8 +100,6 @@
      */
     @SuppressWarnings("unchecked")
     public void testReadDefinitions() throws Exception {
-        DefinitionsFactory factory = new UrlDefinitionsFactory();
-
         // Set up multiple data sources.
         URL url1 = this.getClass().getClassLoader().getResource(
                 "org/apache/tiles/config/defs1.xml");
@@ -121,8 +131,6 @@
      */
     @SuppressWarnings("unchecked")
     public void testGetDefinition() throws Exception {
-        DefinitionsFactory factory = new UrlDefinitionsFactory();
-
         // Set up multiple data sources.
         URL url1 = this.getClass().getClassLoader().getResource(
                 "org/apache/tiles/config/defs1.xml");
@@ -206,8 +214,6 @@
     @SuppressWarnings("unchecked")
     public void testBadSourceType() throws Exception {
         try {
-            DefinitionsFactory factory = new UrlDefinitionsFactory();
-
             factory.init(Collections.EMPTY_MAP);
             factory.addSource("Bad object.");
 
@@ -228,8 +234,6 @@
      */
     @SuppressWarnings("unchecked")
     public void testReadByLocale() throws Exception {
-        MockPublicUrlDefinitionsFactory factory = new MockPublicUrlDefinitionsFactory();
-
         // Set up multiple data sources.
         URL url1 = this.getClass().getClassLoader().getResource(
                 "org/apache/tiles/config/defs1.xml");
@@ -278,7 +282,6 @@
      */
     @SuppressWarnings("unchecked")
     public void testIsContextProcessed() throws Exception {
-        MockPublicUrlDefinitionsFactory factory = new MockPublicUrlDefinitionsFactory();
 
         // Set up multiple data sources.
         URL url1 = this.getClass().getClassLoader().getResource(

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=630422&r1=630421&r2=630422&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 Sat Feb 23 03:20:20 2008
@@ -52,6 +52,11 @@
             .getLog(TestDigesterDefinitionsReader.class);
 
     /**
+     * The definitions reader.
+     */
+    private DefinitionsReader reader;
+
+    /**
      * Creates a new instance of TestDigesterDefinitionsReader.
      *
      * @param name The name of the test.
@@ -78,12 +83,18 @@
         return new TestSuite(TestDigesterDefinitionsReader.class);
     }
 
+    /** {@inheritDoc} */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        reader = new DigesterDefinitionsReader();
+    }
+
     /**
      * Tests the read method under normal conditions.
      */
     public void testRead() {
         try {
-            DefinitionsReader reader = new DigesterDefinitionsReader();
             reader.init(new HashMap<String, String>());
 
             URL configFile = this.getClass().getClassLoader().getResource(
@@ -130,7 +141,6 @@
      */
     public void testRead21Version() {
         try {
-            DefinitionsReader reader = new DigesterDefinitionsReader();
             reader.init(new HashMap<String, String>());
 
             URL configFile = this.getClass().getClassLoader().getResource(
@@ -162,8 +172,6 @@
      */
     public void testNoInit() {
         try {
-            DefinitionsReader reader = new DigesterDefinitionsReader();
-
             // What happens if we don't call init?
             // reader.init(new HashMap());
 
@@ -190,8 +198,6 @@
      */
     public void testBadSource() {
         try {
-            // Create Digester Reader.
-            DefinitionsReader reader = new DigesterDefinitionsReader();
             Map<String, String> params = new HashMap<String, String>();
 
             // Initialize reader.
@@ -215,7 +221,6 @@
      */
     public void testBadXml() {
         try {
-            DefinitionsReader reader = new DigesterDefinitionsReader();
             reader.init(new HashMap<String, String>());
 
             URL configFile = this.getClass().getClassLoader().getResource(
@@ -244,7 +249,6 @@
     public void testValidatingParameter() {
         // Testing with default (validation ON).
         try {
-            DefinitionsReader reader = new DigesterDefinitionsReader();
             Map<String, String> params = new HashMap<String, String>();
             reader.init(params);
 
@@ -266,7 +270,7 @@
 
         // Testing with validation OFF.
         try {
-            DefinitionsReader reader = new DigesterDefinitionsReader();
+            setUp();
             Map<String, String> params = new HashMap<String, String>();
             params.put(DigesterDefinitionsReader.PARSER_VALIDATE_PARAMETER_NAME,
                     "false");

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=630422&r1=630421&r2=630422&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 Sat Feb 23 03:20:20 2008
@@ -140,6 +140,7 @@
         request.setHttpSession(session);
         MockHttpServletResponse response = new MockHttpServletResponse();
         Attribute attribute = new Attribute((Object) "This is the value", "myrole");
+        attribute.setRenderer("string");
         StringWriter writer = new StringWriter();
         container.render(attribute, writer, request, response);
         writer.close();

Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java Sat Feb 23 03:20:20 2008
@@ -22,7 +22,6 @@
 package org.apache.tiles.jsp.taglib;
 
 import org.apache.tiles.Attribute;
-import org.apache.tiles.Attribute.AttributeType;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -91,9 +90,8 @@
      * @param nestedTag the put tag desciendent.
      */
     public void processNestedTag(AddAttributeTag nestedTag) {
-        Attribute attribute = new Attribute(
-            nestedTag.getValue(), nestedTag.getRole(),
-            AttributeType.getType(nestedTag.getType()));
+        Attribute attribute = new Attribute(nestedTag.getValue(), nestedTag
+                .getRole(), nestedTag.getType());
 
         this.addValue(attribute);
     }

Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java?rev=630422&r1=630421&r2=630422&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java Sat Feb 23 03:20:20 2008
@@ -22,7 +22,6 @@
 package org.apache.tiles.jsp.taglib;
 
 import org.apache.tiles.Attribute;
-import org.apache.tiles.Attribute.AttributeType;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -92,9 +91,8 @@
      * @param nestedTag the put tag desciendent.
      */
     public void processNestedTag(AddAttributeTag nestedTag) {
-        Attribute attribute = new Attribute(
-            nestedTag.getValue(), nestedTag.getRole(),
-            AttributeType.getType(nestedTag.getType()));
+        Attribute attribute = new Attribute(nestedTag.getValue(), nestedTag
+                .getRole(), nestedTag.getType());
 
         this.addValue(attribute);
     }