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 2009/07/28 21:24:32 UTC

svn commit: r798665 - in /tiles/framework/trunk/tiles-extras: ./ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tiles/ src/main/java/org/apache/tiles/extras/ src/main/java/org/apache/tiles/extras/factory/

Author: apetrelli
Date: Tue Jul 28 19:24:31 2009
New Revision: 798665

URL: http://svn.apache.org/viewvc?rev=798665&view=rev
Log:
TILES-443
First version of the factory.

Added:
    tiles/framework/trunk/tiles-extras/src/main/java/org/
    tiles/framework/trunk/tiles-extras/src/main/java/org/apache/
    tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/
    tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/
    tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/
    tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/CompleteAutoloadTilesContainerFactory.java   (with props)
Modified:
    tiles/framework/trunk/tiles-extras/pom.xml

Modified: tiles/framework/trunk/tiles-extras/pom.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-extras/pom.xml?rev=798665&r1=798664&r2=798665&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-extras/pom.xml (original)
+++ tiles/framework/trunk/tiles-extras/pom.xml Tue Jul 28 19:24:31 2009
@@ -67,6 +67,46 @@
       <version>${pom.version}</version>
     </dependency>
     <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>tiles-jsp</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>tiles-freemarker</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>tiles-velocity</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>tiles-compat</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.el</groupId>
+      <artifactId>el-api</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mvel</groupId>
+      <artifactId>mvel2</artifactId>
+      <version>2.0.11</version>
+    </dependency>
+
+    <dependency>
+      <groupId>ognl</groupId>
+      <artifactId>ognl</artifactId>
+      <version>2.7.3</version>
+    </dependency>
+
+    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jcl-over-slf4j</artifactId>
       <version>1.5.8</version>
@@ -100,4 +140,11 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
+  <repositories>
+    <repository>
+      <id>java_net</id>
+      <url>http://download.java.net/maven/1/</url>
+      <layout>legacy</layout>
+    </repository>
+  </repositories>
 </project>

Added: tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/CompleteAutoloadTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/CompleteAutoloadTilesContainerFactory.java?rev=798665&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/CompleteAutoloadTilesContainerFactory.java (added)
+++ tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/CompleteAutoloadTilesContainerFactory.java Tue Jul 28 19:24:31 2009
@@ -0,0 +1,262 @@
+package org.apache.tiles.extras.factory;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.el.ArrayELResolver;
+import javax.el.BeanELResolver;
+import javax.el.CompositeELResolver;
+import javax.el.ELResolver;
+import javax.el.ListELResolver;
+import javax.el.MapELResolver;
+import javax.el.ResourceBundleELResolver;
+
+import ognl.OgnlException;
+import ognl.OgnlRuntime;
+import ognl.PropertyAccessor;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.compat.definition.digester.CompatibilityDigesterDefinitionsReader;
+import org.apache.tiles.context.ChainedTilesRequestContextFactory;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextFactory;
+import org.apache.tiles.context.TilesRequestContextHolder;
+import org.apache.tiles.definition.DefinitionsFactoryException;
+import org.apache.tiles.definition.DefinitionsReader;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcherFactory;
+import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.PrefixedPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.regexp.RegexpDefinitionPatternMatcherFactory;
+import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
+import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
+import org.apache.tiles.evaluator.el.ELAttributeEvaluator;
+import org.apache.tiles.evaluator.el.TilesContextBeanELResolver;
+import org.apache.tiles.evaluator.el.TilesContextELResolver;
+import org.apache.tiles.evaluator.mvel.MVELAttributeEvaluator;
+import org.apache.tiles.evaluator.mvel.TilesContextBeanVariableResolverFactory;
+import org.apache.tiles.evaluator.mvel.TilesContextVariableResolverFactory;
+import org.apache.tiles.evaluator.ognl.ApplicationScopeNestedObjectExtractor;
+import org.apache.tiles.evaluator.ognl.DelegatePropertyAccessor;
+import org.apache.tiles.evaluator.ognl.NestedObjectDelegatePropertyAccessor;
+import org.apache.tiles.evaluator.ognl.OGNLAttributeEvaluator;
+import org.apache.tiles.evaluator.ognl.PropertyAccessorDelegateFactory;
+import org.apache.tiles.evaluator.ognl.RequestScopeNestedObjectExtractor;
+import org.apache.tiles.evaluator.ognl.SessionScopeNestedObjectExtractor;
+import org.apache.tiles.evaluator.ognl.TilesApplicationContextNestedObjectExtractor;
+import org.apache.tiles.evaluator.ognl.TilesContextPropertyAccessorDelegateFactory;
+import org.apache.tiles.factory.BasicTilesContainerFactory;
+import org.apache.tiles.factory.TilesContainerFactoryException;
+import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContextFactory;
+import org.apache.tiles.freemarker.renderer.FreeMarkerAttributeRenderer;
+import org.apache.tiles.impl.BasicTilesContainer;
+import org.apache.tiles.impl.mgmt.CachingTilesContainer;
+import org.apache.tiles.jsp.evaluator.el.JspExpressionFactoryFactory;
+import org.apache.tiles.locale.LocaleResolver;
+import org.apache.tiles.renderer.impl.BasicRendererFactory;
+import org.apache.tiles.velocity.context.VelocityTilesRequestContextFactory;
+import org.apache.tiles.velocity.renderer.VelocityAttributeRenderer;
+import org.mvel2.integration.VariableResolverFactory;
+
+public class CompleteAutoloadTilesContainerFactory extends BasicTilesContainerFactory {
+
+    /** {@inheritDoc} */
+    @Override
+    protected BasicTilesContainer instantiateContainer(
+            TilesApplicationContext applicationContext) {
+        return new CachingTilesContainer();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected List<TilesRequestContextFactory> getTilesRequestContextFactoriesToBeChained(
+            ChainedTilesRequestContextFactory parent) {
+        List<TilesRequestContextFactory> factories = super.getTilesRequestContextFactoriesToBeChained(parent);
+        registerRequestContextFactory(
+                FreeMarkerTilesRequestContextFactory.class.getName(),
+                factories, parent);
+        registerRequestContextFactory(
+                VelocityTilesRequestContextFactory.class.getName(),
+                factories, parent);
+        return factories;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void registerAttributeRenderers(
+            BasicRendererFactory rendererFactory,
+            TilesApplicationContext applicationContext,
+            TilesRequestContextFactory contextFactory,
+            TilesContainer container,
+            AttributeEvaluatorFactory attributeEvaluatorFactory) {
+        super.registerAttributeRenderers(rendererFactory, applicationContext, contextFactory,
+                container, attributeEvaluatorFactory);
+
+        FreeMarkerAttributeRenderer freemarkerRenderer = new FreeMarkerAttributeRenderer();
+        freemarkerRenderer.setApplicationContext(applicationContext);
+        freemarkerRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
+        freemarkerRenderer.setRequestContextFactory(contextFactory);
+        freemarkerRenderer.setParameter("TemplatePath", "/");
+        freemarkerRenderer.setParameter("NoCache", "true");
+        freemarkerRenderer.setParameter("ContentType", "text/html");
+        freemarkerRenderer.setParameter("template_update_delay", "0");
+        freemarkerRenderer.setParameter("default_encoding", "ISO-8859-1");
+        freemarkerRenderer.setParameter("number_format", "0.##########");
+        freemarkerRenderer.commit();
+        rendererFactory.registerRenderer("freemarker", freemarkerRenderer);
+
+        VelocityAttributeRenderer velocityRenderer = new VelocityAttributeRenderer();
+        velocityRenderer.setApplicationContext(applicationContext);
+        velocityRenderer.setAttributeEvaluatorFactory(attributeEvaluatorFactory);
+        velocityRenderer.setRequestContextFactory(contextFactory);
+        velocityRenderer.setParameter("org.apache.velocity.toolbox", "/WEB-INF/tools.xml");
+        velocityRenderer.setParameter("org.apache.velocity.properties", "/WEB-INF/velocity.properties");
+        velocityRenderer.commit();
+        rendererFactory.registerRenderer("velocity", velocityRenderer);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected AttributeEvaluatorFactory createAttributeEvaluatorFactory(
+            TilesApplicationContext applicationContext,
+            TilesRequestContextFactory contextFactory, LocaleResolver resolver) {
+        BasicAttributeEvaluatorFactory attributeEvaluatorFactory = new BasicAttributeEvaluatorFactory(
+                createELEvaluator(applicationContext));
+        attributeEvaluatorFactory.registerAttributeEvaluator("MVEL",
+                createMVELEvaluator());
+        attributeEvaluatorFactory.registerAttributeEvaluator("OGNL",
+                createOGNLEvaluator());
+
+        return attributeEvaluatorFactory;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected <T> PatternDefinitionResolver<T> createPatternDefinitionResolver(
+            Class<T> customizationKeyClass) {
+        DefinitionPatternMatcherFactory wildcardFactory = new WildcardDefinitionPatternMatcherFactory();
+        DefinitionPatternMatcherFactory regexpFactory = new RegexpDefinitionPatternMatcherFactory();
+        PrefixedPatternDefinitionResolver<T> resolver = new PrefixedPatternDefinitionResolver<T>();
+        resolver.registerDefinitionPatternMatcherFactory("WILDCARD", wildcardFactory);
+        resolver.registerDefinitionPatternMatcherFactory("REGEXP", regexpFactory);
+        return resolver;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected List<URL> getSourceURLs(TilesApplicationContext applicationContext,
+            TilesRequestContextFactory contextFactory) {
+        List<URL> urls = new ArrayList<URL>();
+        try {
+            Set<URL> urlSet = applicationContext
+                    .getResources("/WEB-INF/**/tiles*.xml");
+            urlSet.addAll(applicationContext
+                    .getResources("classpath*:META-INF/**/tiles*.xml"));
+            List<URL> filteredUrls = new ArrayList<URL>();
+            for (URL url : urlSet) {
+                String externalForm = url.toExternalForm();
+                if (externalForm.indexOf('_', externalForm.lastIndexOf("/")) < 0) {
+                    filteredUrls.add(url);
+                }
+            }
+            urls = filteredUrls;
+        } catch (IOException e) {
+            throw new DefinitionsFactoryException(
+                    "Cannot load definition URLs", e);
+        }
+        return urls;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected DefinitionsReader createDefinitionsReader(TilesApplicationContext applicationContext,
+            TilesRequestContextFactory contextFactory) {
+        return new CompatibilityDigesterDefinitionsReader();
+    }
+
+    /**
+     * Creates the EL evaluator.
+     *
+     * @param applicationContext The Tiles application context.
+     * @return The EL evaluator.
+     */
+    private ELAttributeEvaluator createELEvaluator(
+            TilesApplicationContext applicationContext) {
+        ELAttributeEvaluator evaluator = new ELAttributeEvaluator();
+        evaluator.setApplicationContext(applicationContext);
+        JspExpressionFactoryFactory efFactory = new JspExpressionFactoryFactory();
+        efFactory.setApplicationContext(applicationContext);
+        evaluator.setExpressionFactory(efFactory.getExpressionFactory());
+        ELResolver elResolver = new CompositeELResolver() {
+            {
+                add(new TilesContextELResolver());
+                add(new TilesContextBeanELResolver());
+                add(new ArrayELResolver(false));
+                add(new ListELResolver(false));
+                add(new MapELResolver(false));
+                add(new ResourceBundleELResolver());
+                add(new BeanELResolver(false));
+            }
+        };
+        evaluator.setResolver(elResolver);
+        return evaluator;
+    }
+
+    /**
+     * Creates the MVEL evaluator.
+     *
+     * @return The MVEL evaluator.
+     */
+    private MVELAttributeEvaluator createMVELEvaluator() {
+        TilesRequestContextHolder requestHolder = new TilesRequestContextHolder();
+        VariableResolverFactory variableResolverFactory = new TilesContextVariableResolverFactory(
+                requestHolder);
+        variableResolverFactory
+                .setNextFactory(new TilesContextBeanVariableResolverFactory(
+                        requestHolder));
+        MVELAttributeEvaluator mvelEvaluator = new MVELAttributeEvaluator(requestHolder,
+                variableResolverFactory);
+        return mvelEvaluator;
+    }
+
+    /**
+     * Creates the OGNL evaluator.
+     *
+     * @return The OGNL evaluator.
+     */
+    private OGNLAttributeEvaluator createOGNLEvaluator() {
+        try {
+            PropertyAccessor objectPropertyAccessor = OgnlRuntime.getPropertyAccessor(Object.class);
+            PropertyAccessor mapPropertyAccessor = OgnlRuntime.getPropertyAccessor(Map.class);
+            PropertyAccessor applicationContextPropertyAccessor =
+                new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+                    new TilesApplicationContextNestedObjectExtractor(),
+                    objectPropertyAccessor);
+            PropertyAccessor requestScopePropertyAccessor =
+                new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+                    new RequestScopeNestedObjectExtractor(), mapPropertyAccessor);
+            PropertyAccessor sessionScopePropertyAccessor =
+                new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+                    new SessionScopeNestedObjectExtractor(), mapPropertyAccessor);
+            PropertyAccessor applicationScopePropertyAccessor =
+                new NestedObjectDelegatePropertyAccessor<TilesRequestContext>(
+                    new ApplicationScopeNestedObjectExtractor(), mapPropertyAccessor);
+            PropertyAccessorDelegateFactory<TilesRequestContext> factory =
+                new TilesContextPropertyAccessorDelegateFactory(
+                    objectPropertyAccessor, applicationContextPropertyAccessor,
+                    requestScopePropertyAccessor, sessionScopePropertyAccessor,
+                    applicationScopePropertyAccessor);
+            PropertyAccessor tilesRequestAccessor = new DelegatePropertyAccessor<TilesRequestContext>(factory);
+            OgnlRuntime.setPropertyAccessor(TilesRequestContext.class, tilesRequestAccessor);
+            return new OGNLAttributeEvaluator();
+        } catch (OgnlException e) {
+            throw new TilesContainerFactoryException(
+                    "Cannot initialize OGNL evaluator", e);
+        }
+    }
+}

Propchange: tiles/framework/trunk/tiles-extras/src/main/java/org/apache/tiles/extras/factory/CompleteAutoloadTilesContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

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