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);
}