You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2010/08/31 21:25:19 UTC

svn commit: r991304 - in /tiles/sandbox/trunk: tiles-render/ tiles3/tiles-core/ tiles3/tiles-core/src/main/java/org/apache/tiles/factory/ tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/ tiles3/tiles-core/src/test/java/org/apache/tiles/f...

Author: apetrelli
Date: Tue Aug 31 19:25:19 2010
New Revision: 991304

URL: http://svn.apache.org/viewvc?rev=991304&view=rev
Log:
TILESSB-35
First renderer and delegation.

Added:
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DelegateAttributeRenderer.java
      - copied, changed from r982384, tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java
Modified:
    tiles/sandbox/trunk/tiles-render/   (props changed)
    tiles/sandbox/trunk/tiles-render/pom.xml
    tiles/sandbox/trunk/tiles3/tiles-core/pom.xml
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
    tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java

Propchange: tiles/sandbox/trunk/tiles-render/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Aug 31 19:25:19 2010
@@ -1 +1,2 @@
 .*
+target

Modified: tiles/sandbox/trunk/tiles-render/pom.xml
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-render/pom.xml?rev=991304&r1=991303&r2=991304&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles-render/pom.xml (original)
+++ tiles/sandbox/trunk/tiles-render/pom.xml Tue Aug 31 19:25:19 2010
@@ -1,17 +1,32 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>tiles-master</artifactId>
-    <groupId>org.apache.tiles</groupId>
-    <version>3</version>
-  </parent>
-  <groupId>org.apache.tiles.render</groupId>
-  <artifactId>tiles-render</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-  <name>Tiles Render - Parent POM project</name>
-  <description>Container project for Tiles Render</description>
-  <modules>
-  	<module>tiles-render-core</module>
-  </modules>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>tiles-master</artifactId>
+		<groupId>org.apache.tiles</groupId>
+		<version>3</version>
+	</parent>
+	<groupId>org.apache.tiles.render</groupId>
+	<artifactId>tiles-render</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+	<name>Tiles Render - Parent POM project</name>
+	<description>Container project for Tiles Render</description>
+	<modules>
+		<module>tiles-render-core</module>
+	</modules>
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<configuration>
+						<source>1.6</source>
+						<target>1.6</target>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
 </project>
\ No newline at end of file

Modified: tiles/sandbox/trunk/tiles3/tiles-core/pom.xml
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/pom.xml?rev=991304&r1=991303&r2=991304&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/pom.xml (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/pom.xml Tue Aug 31 19:25:19 2010
@@ -151,6 +151,11 @@
       <scope>test</scope>
     </dependency>
 
+    <dependency>
+    	<groupId>org.apache.tiles.render</groupId>
+    	<artifactId>tiles-render-core</artifactId>
+    	<version>1.0.0-SNAPSHOT</version>
+    </dependency>
   </dependencies>
 
   <repositories>

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=991304&r1=991303&r2=991304&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Tue Aug 31 19:25:19 2010
@@ -46,12 +46,14 @@ import org.apache.tiles.locale.LocaleRes
 import org.apache.tiles.locale.impl.DefaultLocaleResolver;
 import org.apache.tiles.preparer.BasicPreparerFactory;
 import org.apache.tiles.preparer.PreparerFactory;
+import org.apache.tiles.render.DispatchRenderer;
 import org.apache.tiles.renderer.AttributeRenderer;
 import org.apache.tiles.renderer.RendererFactory;
 import org.apache.tiles.renderer.TypeDetectingAttributeRenderer;
 import org.apache.tiles.renderer.impl.BasicRendererFactory;
 import org.apache.tiles.renderer.impl.ChainedDelegateAttributeRenderer;
 import org.apache.tiles.renderer.impl.DefinitionAttributeRenderer;
+import org.apache.tiles.renderer.impl.DelegateAttributeRenderer;
 import org.apache.tiles.renderer.impl.StringAttributeRenderer;
 import org.apache.tiles.renderer.impl.TemplateAttributeRenderer;
 import org.apache.tiles.request.ApplicationContext;
@@ -394,9 +396,7 @@ public class BasicTilesContainerFactory 
             ApplicationContext applicationContext,
             TilesContainer container,
             AttributeEvaluatorFactory attributeEvaluatorFactory) {
-        TemplateAttributeRenderer templateRenderer = new TemplateAttributeRenderer();
-        templateRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
-        return templateRenderer;
+        return new DelegateAttributeRenderer(new DispatchRenderer(), attributeEvaluatorFactory);
     }
 
     /**

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=991304&r1=991303&r2=991304&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Tue Aug 31 19:25:19 2010
@@ -60,13 +60,6 @@ public class BasicRendererFactory implem
         "org.apache.tiles.rendere.impl.BasicRendererFactory.DEFAULT_RENDERER";
 
     /**
-     * The default renderer name/renderer class map.
-     *
-     * @since 2.1.0
-     */
-    protected static final Map<String, String> DEFAULT_TYPE_2_RENDERER;
-
-    /**
      * The Tiles application context.
      *
      * @since 2.1.0
@@ -101,16 +94,6 @@ public class BasicRendererFactory implem
      */
     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());
-    }
-
     /**
      * Constructor.
      *

Copied: tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DelegateAttributeRenderer.java (from r982384, tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java)
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DelegateAttributeRenderer.java?p2=tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DelegateAttributeRenderer.java&p1=tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java&r1=982384&r2=991304&rev=991304&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/AbstractBaseAttributeRenderer.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/renderer/impl/DelegateAttributeRenderer.java Tue Aug 31 19:25:19 2010
@@ -27,20 +27,22 @@ import java.util.Set;
 import org.apache.tiles.Attribute;
 import org.apache.tiles.evaluator.AttributeEvaluator;
 import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
-import org.apache.tiles.evaluator.AttributeEvaluatorFactoryAware;
-import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.render.TypeDetectingRenderer;
+import org.apache.tiles.renderer.RendererException;
+import org.apache.tiles.renderer.TypeDetectingAttributeRenderer;
 import org.apache.tiles.request.Request;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Base abstract class that manages authorization to display the attribute.
+ * Delegates a {@link TypeDetectingRenderer} to render the value of an
+ * attribute.
  *
  * @version $Rev$ $Date$
- * @since 2.1.0
+ * @since 3.0.0
  */
-public abstract class AbstractBaseAttributeRenderer implements
-        AttributeRenderer, AttributeEvaluatorFactoryAware {
+public class DelegateAttributeRenderer implements
+        TypeDetectingAttributeRenderer {
 
     /**
      * The logging object.
@@ -48,15 +50,16 @@ public abstract class AbstractBaseAttrib
     private final Logger log = LoggerFactory
             .getLogger(AbstractBaseAttributeRenderer.class);
 
+    private TypeDetectingRenderer renderer;
+
     /**
      * The attribute evaluator factory.
-     *
-     * @since 2.2.0
      */
-    protected AttributeEvaluatorFactory attributeEvaluatorFactory;
+    private AttributeEvaluatorFactory attributeEvaluatorFactory;
 
-    /** {@inheritDoc} */
-    public void setAttributeEvaluatorFactory(AttributeEvaluatorFactory attributeEvaluatorFactory) {
+    public DelegateAttributeRenderer(TypeDetectingRenderer renderer,
+            AttributeEvaluatorFactory attributeEvaluatorFactory) {
+        this.renderer = renderer;
         this.attributeEvaluatorFactory = attributeEvaluatorFactory;
     }
 
@@ -64,29 +67,35 @@ public abstract class AbstractBaseAttrib
     public void render(Attribute attribute, Request request) throws IOException {
         Set<String> roles = attribute.getRoles();
         if (!isPermitted(request, roles)) {
-            log.debug("Access to attribute denied.  User not in role '{}'", roles);
+            log.debug("Access to attribute denied.  User not in role '{}'",
+                    roles);
             return;
         }
 
-        AttributeEvaluator evaluator = attributeEvaluatorFactory
-                .getAttributeEvaluator(attribute);
-        Object value = evaluator.evaluate(attribute, request);
+        Object value = getValue(attribute, request);
 
-        write(value, attribute, request);
+        if (value == null) {
+            throw new NullPointerException("Attribute value is null");
+        }
+
+        if (!(value instanceof String)) {
+            throw new RendererException("The attribute value is not a string, to string is: " + value.toString());
+        }
+        renderer.render((String) value, request);
     }
 
-    /**
-     * 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 request The Tiles request object.
-     * @throws IOException If something goes wrong during rendition.
-     * @since 2.1.2
-     */
-    public abstract void write(Object value, Attribute attribute,
-            Request request)
-            throws IOException;
+    /** {@inheritDoc} */
+    @Override
+    public boolean isRenderable(Attribute attribute, Request request) {
+        return isRenderable(getValue(attribute, request), attribute, request);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean isRenderable(Object value, Attribute attribute,
+            Request request) {
+        return value != null && value instanceof String && renderer.isRenderable((String) value, request);
+    }
 
     /**
      * Checks if the current user is in one of the comma-separated roles
@@ -95,9 +104,8 @@ public abstract class AbstractBaseAttrib
      * @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(Request request, Set<String> roles) {
+    private boolean isPermitted(Request request, Set<String> roles) {
         if (roles == null || roles.isEmpty()) {
             return true;
         }
@@ -111,4 +119,10 @@ public abstract class AbstractBaseAttrib
 
         return retValue;
     }
+
+    private Object getValue(Attribute attribute, Request request) {
+        AttributeEvaluator evaluator = attributeEvaluatorFactory
+                .getAttributeEvaluator(attribute);
+        return evaluator.evaluate(attribute, request);
+    }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java?rev=991304&r1=991303&r2=991304&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java Tue Aug 31 19:25:19 2010
@@ -20,8 +20,10 @@
  */
 package org.apache.tiles.factory;
 
-import static org.easymock.EasyMock.*;
-import static org.easymock.classextension.EasyMock.*;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.classextension.EasyMock.createMock;
+import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.classextension.EasyMock.verify;
 
 import java.net.URL;
 import java.util.List;
@@ -46,8 +48,8 @@ import org.apache.tiles.renderer.TypeDet
 import org.apache.tiles.renderer.impl.BasicRendererFactory;
 import org.apache.tiles.renderer.impl.ChainedDelegateAttributeRenderer;
 import org.apache.tiles.renderer.impl.DefinitionAttributeRenderer;
+import org.apache.tiles.renderer.impl.DelegateAttributeRenderer;
 import org.apache.tiles.renderer.impl.StringAttributeRenderer;
-import org.apache.tiles.renderer.impl.TemplateAttributeRenderer;
 import org.apache.tiles.request.ApplicationContext;
 import org.easymock.EasyMock;
 
@@ -181,7 +183,7 @@ public class BasicTilesContainerFactoryT
         renderer = rendererFactory.getRenderer("template");
         assertNotNull("The template renderer is null", renderer);
         assertTrue("The template renderer class is not correct",
-                renderer instanceof TemplateAttributeRenderer);
+                renderer instanceof DelegateAttributeRenderer);
         renderer = rendererFactory.getRenderer("definition");
         assertNotNull("The definition renderer is null", renderer);
         assertTrue("The definition renderer class is not correct",
@@ -248,7 +250,7 @@ public class BasicTilesContainerFactoryT
                 rendererFactory, applicationContext, container,
                 attributeEvaluatorFactory);
         assertTrue("The renderer class is not correct",
-                renderer instanceof TemplateAttributeRenderer);
+                renderer instanceof DelegateAttributeRenderer);
         verify(container, attributeEvaluatorFactory, rendererFactory);
     }