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