Author: apetrelli
Date: Mon Apr  7 14:06:54 2008
New Revision: 645688

URL: http://svn.apache.org/viewvc?rev=645688&view=rev
Log:
TILES-261
Added the first version of the standard Java-only container factory.

Added:
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
   (with props)

Added: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=645688&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
 Mon Apr  7 14:06:54 2008
@@ -0,0 +1,285 @@
+/*
+ * $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.factory;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.context.TilesContextFactory;
+import org.apache.tiles.definition.DefinitionsFactory;
+import org.apache.tiles.definition.DefinitionsReader;
+import org.apache.tiles.definition.UrlDefinitionsFactory;
+import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
+import org.apache.tiles.evaluator.AttributeEvaluator;
+import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
+import org.apache.tiles.impl.BasicTilesContainer;
+import org.apache.tiles.locale.LocaleResolver;
+import org.apache.tiles.locale.impl.DefaultLocaleResolver;
+import org.apache.tiles.preparer.BasicPreparerFactory;
+import org.apache.tiles.preparer.PreparerFactory;
+import org.apache.tiles.renderer.AttributeRenderer;
+import org.apache.tiles.renderer.RendererFactory;
+import org.apache.tiles.renderer.impl.BasicRendererFactory;
+import org.apache.tiles.renderer.impl.DefinitionAttributeRenderer;
+import org.apache.tiles.renderer.impl.StringAttributeRenderer;
+import org.apache.tiles.renderer.impl.TemplateAttributeRenderer;
+import org.apache.tiles.renderer.impl.UntypedAttributeRenderer;
+import org.apache.tiles.servlet.context.ServletTilesContextFactory;
+
+/**
+ * Factory that builds a standard Tiles container using only Java code.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.1.0
+ */
+public class BasicTilesContainerFactory extends AbstractTilesContainerFactory {
+
+    /** [EMAIL PROTECTED] */
+    @Override
+    public TilesContainer createContainer(Object context) {
+        BasicTilesContainer container = new BasicTilesContainer();
+        TilesContextFactory contextFactory = createContextFactory(context);
+        TilesApplicationContext applicationContext = contextFactory
+                .createApplicationContext(context);
+        container.setContextFactory(contextFactory);
+        container.setApplicationContext(applicationContext);
+        container.setDefinitionsFactory(createDefinitionsFactory(context,
+                applicationContext, contextFactory));
+        AttributeEvaluator evaluator = createEvaluator(context,
+                applicationContext, contextFactory);
+        container.setEvaluator(evaluator);
+        container.setPreparerFactory(createPreparerFactory(context,
+                applicationContext, contextFactory));
+        container.setRendererFactory(createRendererFactory(context,
+                applicationContext, contextFactory, container, evaluator));
+        return container;
+    }
+
+    /**
+     * Create a Tiles context factory. By default it creates a
+     * [EMAIL PROTECTED] ServletTilesContextFactory}.
+     *
+     * @param context The context.
+     * @return The context factory.
+     */
+    protected TilesContextFactory createContextFactory(Object context) {
+        return new ServletTilesContextFactory();
+    }
+
+    /**
+     * Creates the definitions factory. By default it creates a
+     * [EMAIL PROTECTED] UrlDefinitionsFactory} with default dependencies.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @return The definitions factory.
+     */
+    protected DefinitionsFactory createDefinitionsFactory(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory) {
+        UrlDefinitionsFactory factory = new UrlDefinitionsFactory();
+        factory.setApplicationContext(applicationContext);
+        factory.setLocaleResolver(createLocaleResolver(context,
+                applicationContext, contextFactory));
+        factory.setReader(createDefinitionsReader(context, applicationContext,
+                contextFactory));
+        factory.setSourceURLs(getSourceURLs(context, applicationContext,
+                contextFactory));
+        return factory;
+    }
+
+    /**
+     * Creates the locale resolver. By default it creates a
+     * [EMAIL PROTECTED] DefaultLocaleResolver}.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @return The locale resolver.
+     */
+    protected LocaleResolver createLocaleResolver(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory) {
+        return new DefaultLocaleResolver();
+    }
+
+    /**
+     * Creates the definitions reader. By default it creates a
+     * [EMAIL PROTECTED] DigesterDefinitionsReader}.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @return The definitions reader.
+     */
+    protected DefinitionsReader createDefinitionsReader(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory) {
+        return new DigesterDefinitionsReader();
+    }
+
+    /**
+     * Returns a list containing the URLs to be parsed. By default, it returns 
a
+     * list containing the URL point to "/WEB-INF/tiles.xml".
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @return The source URLs.
+     */
+    protected List<URL> getSourceURLs(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory) {
+        List<URL> retValue = new ArrayList<URL>(1);
+        try {
+            retValue.add(applicationContext.getResource("/WEB-INF/tiles.xml"));
+        } catch (IOException e) {
+            throw new TilesContainerFactoryException(
+                    "Cannot get URL: /WEB-INF/tiles.xml");
+        }
+        return retValue;
+    }
+
+    /**
+     * Creates the attribute evaluator to use. By default it returns a [EMAIL 
PROTECTED] DirectAttributeEvaluator}.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @return The evaluator.
+     */
+    protected AttributeEvaluator createEvaluator(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory) {
+        return new DirectAttributeEvaluator();
+    }
+
+    /**
+     * Creates the preparer factory to use. By default it returns a
+     * [EMAIL PROTECTED] BasicPreparerFactory}.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @return The preparer factory.
+     */
+    protected PreparerFactory createPreparerFactory(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory) {
+        return new BasicPreparerFactory();
+    }
+
+    /**
+     * Creates a renderer factory. By default it returns a
+     * [EMAIL PROTECTED] BasicRendererFactory}, composed of an
+     * [EMAIL PROTECTED] UntypedAttributeRenderer} as default, and
+     * [EMAIL PROTECTED] StringAttributeRenderer}, [EMAIL PROTECTED] 
TemplateAttributeRenderer} and
+     * [EMAIL PROTECTED] DefinitionAttributeRenderer}.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @param container The container.
+     * @param evaluator The evaluator.
+     * @return The renderer factory.
+     */
+    protected RendererFactory createRendererFactory(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory, TilesContainer container,
+            AttributeEvaluator evaluator) {
+        BasicRendererFactory retValue = new BasicRendererFactory();
+        retValue.setApplicationContext(applicationContext);
+        retValue.setContextFactory(contextFactory);
+        retValue.setContainer(container);
+        retValue.setEvaluator(evaluator);
+        retValue.setDefaultRenderer(createDefaultAttributeRenderer(context,
+                applicationContext, contextFactory, container, evaluator));
+        registerAttributeRenderers(retValue, context, applicationContext,
+                contextFactory, container, evaluator);
+        return retValue;
+    }
+
+    /**
+     * Creates the default attribute renderer. By default it is an
+     * [EMAIL PROTECTED] UntypedAttributeRenderer}.
+     *
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @param container The container.
+     * @param evaluator The evaluator.
+     * @return The default attribute renderer.
+     */
+    protected AttributeRenderer createDefaultAttributeRenderer(Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory, TilesContainer container,
+            AttributeEvaluator evaluator) {
+        UntypedAttributeRenderer retValue = new UntypedAttributeRenderer();
+        retValue.setApplicationContext(applicationContext);
+        retValue.setContainer(container);
+        retValue.setContextFactory(contextFactory);
+        retValue.setEvaluator(evaluator);
+        return retValue;
+    }
+
+    /**
+     * Registers attribute renderers in a [EMAIL PROTECTED] 
BasicRendererFactory}. By
+     * default, it registers a [EMAIL PROTECTED] StringAttributeRenderer}, a
+     * [EMAIL PROTECTED] TemplateAttributeRenderer} and a
+     * [EMAIL PROTECTED] DefinitionAttributeRenderer}.
+     *
+     * @param rendererFactory The renderer factory to configure.
+     * @param context The context.
+     * @param applicationContext The Tiles application context.
+     * @param contextFactory The Tiles context factory.
+     * @param container The container.
+     * @param evaluator The evaluator.
+     */
+    protected void registerAttributeRenderers(
+            BasicRendererFactory rendererFactory, Object context,
+            TilesApplicationContext applicationContext,
+            TilesContextFactory contextFactory, TilesContainer container,
+            AttributeEvaluator evaluator) {
+        StringAttributeRenderer stringRenderer = new StringAttributeRenderer();
+        stringRenderer.setApplicationContext(applicationContext);
+        stringRenderer.setContextFactory(contextFactory);
+        stringRenderer.setEvaluator(evaluator);
+        rendererFactory.registerRenderer("string", stringRenderer);
+
+        TemplateAttributeRenderer templateRenderer = new 
TemplateAttributeRenderer();
+        templateRenderer.setApplicationContext(applicationContext);
+        templateRenderer.setContextFactory(contextFactory);
+        templateRenderer.setEvaluator(evaluator);
+        rendererFactory.registerRenderer("template", templateRenderer);
+
+        DefinitionAttributeRenderer definitionRenderer = new 
DefinitionAttributeRenderer();
+        definitionRenderer.setApplicationContext(applicationContext);
+        definitionRenderer.setContainer(container);
+        definitionRenderer.setContextFactory(contextFactory);
+        definitionRenderer.setEvaluator(evaluator);
+        rendererFactory.registerRenderer("definition", definitionRenderer);
+    }
+}

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

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


Reply via email to