Author: ddewolf Date: Tue Oct 31 10:21:51 2006 New Revision: 469595 URL: http://svn.apache.org/viewvc?view=rev&rev=469595 Log: Cleaning tiles-api of implementation details; Begining to implement Container
Added: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesException.java (contents, props changed) - copied, changed from r469464, struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesException.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java (with props) struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/ - copied from r469464, struts/sandbox/trunk/tiles/tiles-factory/src/main/java/org/apache/tiles/factory/ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java (with props) struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java (with props) struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java (contents, props changed) - copied, changed from r469464, struts/sandbox/trunk/tiles/tiles-factory/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java Removed: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesConfig.java struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/spi/ struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/TilesConfigTest.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesException.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/TilesContextAccess.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContextFactory.java Modified: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java struts/sandbox/trunk/tiles/tiles-core/pom.xml struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/ConfigurationNotSupportedException.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesListener.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/servlet/TilesServlet.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinition.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinitions.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestDigesterDefinitionsReader.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestReloadableDefinitionsFactory.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestTilesServlet.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java Modified: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java (original) +++ struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesContainer.java Tue Oct 31 10:21:51 2006 @@ -32,9 +32,10 @@ * Initialize the container with the given * configuration. * - * @param config + * @param context */ - void init(TilesConfig config); + void init(TilesApplicationContext context) + throws org.apache.tiles.TilesException; /** * Retrieve the containers context. @@ -46,6 +47,6 @@ * * @param request */ - void render(TilesRequestContext request); + void render(TilesRequestContext request) throws TilesException; } Copied: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesException.java (from r469464, struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesException.java) URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesException.java?view=diff&rev=469595&p1=struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesException.java&r1=469464&p2=struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesException.java&r2=469595 ============================================================================== (empty) Propchange: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesException.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesException.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Modified: struts/sandbox/trunk/tiles/tiles-core/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/pom.xml?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/pom.xml (original) +++ struts/sandbox/trunk/tiles/tiles-core/pom.xml Tue Oct 31 10:21:51 2006 @@ -19,63 +19,63 @@ */ --> <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/maven-v4_0_0.xsd"> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <parent> - <groupId>org.apache.struts.tiles</groupId> - <artifactId>tiles-parent</artifactId> - <version>2.0-SNAPSHOT</version> - </parent> - - <modelVersion>4.0.0</modelVersion> - <artifactId>tiles-core</artifactId> - <packaging>jar</packaging> - <name>Tiles - Core Library</name> - - <scm> - <connection>svm:svn:http://svn.apache.org/repos/asf/struts/sandbox/trunk/tiles</connection> - <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/sandbox/trunk/tiles</developerConnection> - <url>http://svn.apache.org/repos/asf/struts/sandbox/trunk/tiles</url> - </scm> - - <build> - - <resources> - <resource> - <directory>src/main/resources</directory> - </resource> - <resource> - <directory>.</directory> - <includes> - <include>LICENSE.txt</include> - <include>NOTICE.txt</include> - </includes> - <targetPath>META-INF</targetPath> - </resource> - </resources> - - <testResources> - <testResource> - <directory>src/test/java</directory> - <includes> - <include>**/*.xml</include> - <include>**/*.properties</include> - </includes> - </testResource> - </testResources> - <plugins> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - </manifest> - </archive> - </configuration> - </plugin> - </plugins> + <parent> + <groupId>org.apache.struts.tiles</groupId> + <artifactId>tiles-parent</artifactId> + <version>2.0-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + <artifactId>tiles-core</artifactId> + <packaging>jar</packaging> + <name>Tiles - Core Library</name> + + <scm> + <connection>svm:svn:http://svn.apache.org/repos/asf/struts/sandbox/trunk/tiles</connection> + <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/sandbox/trunk/tiles</developerConnection> + <url>http://svn.apache.org/repos/asf/struts/sandbox/trunk/tiles</url> + </scm> + + <build> + + <resources> + <resource> + <directory>src/main/resources</directory> + </resource> + <resource> + <directory>.</directory> + <includes> + <include>LICENSE.txt</include> + <include>NOTICE.txt</include> + </includes> + <targetPath>META-INF</targetPath> + </resource> + </resources> + + <testResources> + <testResource> + <directory>src/test/java</directory> + <includes> + <include>**/*.xml</include> + <include>**/*.properties</include> + </includes> + </testResource> + </testResources> + <plugins> + <plugin> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + </manifest> + </archive> + </configuration> + </plugin> + </plugins> - </build> + </build> <reporting> <plugins> @@ -92,72 +92,79 @@ <dependencies> - <dependency> - <groupId>org.apache.struts.tiles</groupId> - <artifactId>tiles-api</artifactId> - <version>${pom.version}</version> - </dependency> - - - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - <version>1.7.0</version> - </dependency> - - <dependency> - <groupId>commons-digester</groupId> - <artifactId>commons-digester</artifactId> - <version>1.7</version> - </dependency> - - <dependency> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - <version>1.0.4</version> - </dependency> - - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.3</version> - <scope>provided</scope> - </dependency> - - <dependency> - <groupId>javax.portlet</groupId> - <artifactId>portlet-api</artifactId> - <version>1.0</version> - <scope>provided</scope> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>3.8.1</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>strutstestcase</groupId> - <artifactId>strutstestcase</artifactId> - <version>2.1.2-1.1-2.3</version> - <scope>test</scope> - </dependency> - - </dependencies> - - <repositories> - <repository> - <id>dtddoc</id> - <url>http://dtddoc.sf.net/maven2</url> - </repository> - </repositories> - <pluginRepositories> - <pluginRepository> - <id>dtddoc</id> - <url>http://dtddoc.sf.net/maven2</url> - </pluginRepository> - </pluginRepositories> - + <dependency> + <groupId>org.apache.struts.tiles</groupId> + <artifactId>tiles-api</artifactId> + <version>${pom.version}</version> + </dependency> + + + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.7.0</version> + </dependency> + + <dependency> + <groupId>commons-digester</groupId> + <artifactId>commons-digester</artifactId> + <version>1.7</version> + </dependency> + + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + <version>1.0.4</version> + </dependency> + + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.3</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>javax.portlet</groupId> + <artifactId>portlet-api</artifactId> + <version>1.0</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.0</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.easymock</groupId> + <artifactId>easymock</artifactId> + <version>2.2</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>strutstestcase</groupId> + <artifactId>strutstestcase</artifactId> + <version>2.1.2-1.1-2.3</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <repositories> + <repository> + <id>dtddoc</id> + <url>http://dtddoc.sf.net/maven2</url> + </repository> + </repositories> + <pluginRepositories> + <pluginRepository> + <id>dtddoc</id> + <url>http://dtddoc.sf.net/maven2</url> + </pluginRepository> + </pluginRepositories> + </project> Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java?view=auto&rev=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java Tue Oct 31 10:21:51 2006 @@ -0,0 +1,92 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed 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. + * + * $Id$ + */ +package org.apache.tiles.access; + +import org.apache.tiles.TilesContainer; +import org.apache.tiles.TilesException; +import org.apache.tiles.TilesApplicationContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.lang.reflect.Method; + + +/** + * Provides static access to the tiles container. + */ +public class TilesAccess { + + private static final Log LOG = + LogFactory.getLog(TilesAccess.class); + + public static final String CONTAINER_ATTRIBUTE = + "org.apache.tiles.CONTAINER"; + + private static final String CONTEXT_ATTRIBUTE = + "org.apache.tiles.APPLICATION_CONTEXT"; + + public static TilesContainer getContainer(Object context) { + return (TilesContainer)getAttribute(context, CONTAINER_ATTRIBUTE); + } + + public static void setContainer(Object context, TilesContainer container) + throws TilesException { + setAttribute(context, CONTAINER_ATTRIBUTE, container); + } + + public static TilesApplicationContext getApplicationContext(Object context) { + TilesContainer container = getContainer(context); + if(container != null) { + return container.getApplicationContext(); + } + return (TilesApplicationContext)getAttribute(context, CONTEXT_ATTRIBUTE); + } + + /** + * @deprecated temporarily added for backwards compatibility. + * @param context + * @param + */ + public static void setApplicationContext(Object context, TilesApplicationContext tilesContext) + throws TilesException { + setAttribute(context, CONTEXT_ATTRIBUTE, tilesContext); + } + + private static Object getAttribute(Object context, String attributeName) { + try { + Class contextClass = context.getClass(); + Method attrMethod = contextClass.getMethod("getAttribute", String.class); + return attrMethod.invoke(context, attributeName); + } catch (Exception e) { + LOG.warn("Unable to retrieve container from specified context: '"+context+"'", e); + return null; + } + } + + private static void setAttribute(Object context, String name, Object value) + throws TilesException { + try { + Class contextClass = context.getClass(); + Method attrMethod = contextClass.getMethod("setAttribute", String.class, Object.class); + attrMethod.invoke(context, name, value); + } catch (Exception e) { + throw new TilesException("Unable to set attribute for specified context: '"+context+"'"); + } + } + +} Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java Tue Oct 31 10:21:51 2006 @@ -50,15 +50,11 @@ public TilesApplicationContext createApplicationContext(Object context) { if (context instanceof ServletContext) { ServletContext servletContext = (ServletContext)context; - TilesApplicationContext ctx = new ServletTilesApplicationContext(servletContext); - TilesContextAccess.registerApplicationContext(servletContext, ctx); - return ctx; + return new ServletTilesApplicationContext(servletContext); } else if (context instanceof PortletContext) { PortletContext portletContext = (PortletContext)context; - TilesApplicationContext ctx = new PortletTilesApplicationContext(portletContext); - TilesContextAccess.registerApplicationContext(portletContext, ctx); - return ctx; + return new PortletTilesApplicationContext(portletContext); } else { throw new IllegalArgumentException("Invalid context specified. " + context.getClass().getName()); Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/ConfigurationNotSupportedException.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/ConfigurationNotSupportedException.java?view=diff&rev=469595&r1=469464&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/ConfigurationNotSupportedException.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/ConfigurationNotSupportedException.java Tue Oct 31 10:21:51 2006 @@ -17,25 +17,18 @@ */ package org.apache.tiles.factory; +import org.apache.tiles.TilesException; + /** * * */ -public class ConfigurationNotSupportedException extends Exception { - +public class ConfigurationNotSupportedException extends TilesException { public ConfigurationNotSupportedException() { } public ConfigurationNotSupportedException(String string) { super(string); - } - - public ConfigurationNotSupportedException(String string, Throwable throwable) { - super(string, throwable); - } - - public ConfigurationNotSupportedException(Throwable throwable) { - super(throwable); } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java?view=diff&rev=469595&r1=469464&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java Tue Oct 31 10:21:51 2006 @@ -18,38 +18,142 @@ package org.apache.tiles.factory; import org.apache.tiles.TilesContainer; +import org.apache.tiles.TilesException; +import org.apache.tiles.DefinitionsFactory; import org.apache.tiles.TilesApplicationContext; -import org.apache.tiles.TilesConfig; import org.apache.tiles.definition.UrlDefinitionsFactory; +import org.apache.tiles.context.TilesContextFactory; +import org.apache.tiles.context.BasicTilesContextFactory; import org.apache.tiles.impl.BasicTilesContainer; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.HashMap; +import java.util.Enumeration; + /** * Factory provided for convenience. * This factory creates a default implementation of * the container, initializes, and puts it into service. * - * @since 2.0 * @version $Rev$ - * + * @since 2.0 */ public class TilesContainerFactory { - public static TilesContainer createContainer(Object context) - throws ConfigurationNotSupportedException { + public static final String CONTAINER_FACTORY_INIT_PARAM = + "org.apache.tiles.CONTAINER_FACTORY"; + + public static final String CONTEXT_FACTORY_INIT_PARAM = + "org.apache.tiles.CONTEXT_FACTORY"; + + public static final String DEFINITIONS_FACTORY_INIT_PARAM = + "org.apache.tiles.DEFINITIONS_FACTORY"; - TilesContainer container = new BasicTilesContainer(); + private static final Map DEFAULT_IMPLEMENTATIONS = new HashMap(); + + static { + DEFAULT_IMPLEMENTATIONS.put(CONTAINER_FACTORY_INIT_PARAM, TilesContainerFactory.class.getName()); + DEFAULT_IMPLEMENTATIONS.put(CONTEXT_FACTORY_INIT_PARAM, BasicTilesContextFactory.class.getName()); + DEFAULT_IMPLEMENTATIONS.put(DEFINITIONS_FACTORY_INIT_PARAM, UrlDefinitionsFactory.class.getName()); + } + + /** + * Retrieve a factory instance as configured through the + * specified context. + * <p/> + * The context will be queried and if a init parameter + * named 'org.apache.tiles.CONTAINER_FACTORY' is discovered + * this class will be instantiated and returned. Otherwise, + * the factory will attempt to utilize one of it's internal + * factories. + * + * @param context + * @return + * @throws TilesException + */ + public static TilesContainerFactory getFactory(Object context) + throws TilesException { + return (TilesContainerFactory) TilesContainerFactory + .createFactory(context, CONTAINER_FACTORY_INIT_PARAM); + } + + + public TilesContainer createContainer(Object context) + throws TilesException { + BasicTilesContainer container = new BasicTilesContainer(); + + TilesContextFactory contextFactory = + (TilesContextFactory)createFactory(context, CONTEXT_FACTORY_INIT_PARAM); + + DefinitionsFactory defsFactory = + (DefinitionsFactory) createFactory(context, DEFINITIONS_FACTORY_INIT_PARAM); + + container.setDefinitionsFactory(defsFactory); + container.setContextFactory(contextFactory); TilesApplicationContext tilesContext = - TilesContextFactory.createApplicationContext(context); + contextFactory.createApplicationContext(context); - TilesConfig config = new TilesConfig(); - config.setApplicationContext(tilesContext); - config.setInitParameter( - TilesConfig.DEFINITIONS_FACTORY_CLASS_NAME_ATTR_KEY, - UrlDefinitionsFactory.class.getName() - ); + container.init(tilesContext); - container.init(config); return container; + } + + + public Map getInitParameterMap(Object context) + throws TilesException { + Map initParameters = new HashMap(); + Class contextClass = context.getClass(); + try { + Method method = contextClass.getMethod("getInitParameterNames"); + Enumeration e = (Enumeration)method.invoke(context); + + method = contextClass.getMethod("getInitParameter", String.class); + while(e.hasMoreElements()) { + String key = (String)e.nextElement(); + initParameters.put(key, method.invoke(context, key)); + } + } catch (Exception e) { + throw new TilesException("Unable to retrieve init parameters." + + " Is this context a ServletContext, PortletContext," + + " or similar object?"); + } + return initParameters; + } + + + public static Object createFactory(Object context, String initParameterName) + throws TilesException { + String factoryName = resolveFactoryName(context, initParameterName); + try { + Class factoryClass = Class.forName(factoryName); + return factoryClass.newInstance(); + } catch (ClassNotFoundException e) { + throw new TilesException("Unable to resolve factory class: '" + factoryName + "'"); + } catch (IllegalAccessException e) { + throw new TilesException("Unable to access factory class: '" + factoryName + "'"); + } catch (InstantiationException e) { + throw new TilesException("Unable to instantiate factory class: '" + + factoryName + "'. Make sure that this class has a default constructor"); + } + } + + public static String resolveFactoryName(Object context, String parameterName) + throws TilesException { + + Object factoryName = null; + try { + Class contextClass = context.getClass(); + Method getInitParameterMethod = + contextClass.getMethod("getInitParameter", String.class); + factoryName = getInitParameterMethod.invoke(context, parameterName); + } catch (Exception e) { + throw new TilesException("Unrecognized context. Is this context" + + "a ServletContext, PortletContext, or similar?", e); + } + return factoryName == null + ? DEFAULT_IMPLEMENTATIONS.get(parameterName).toString() + : factoryName.toString(); } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Tue Oct 31 10:21:51 2006 @@ -17,42 +17,154 @@ */ package org.apache.tiles.impl; -import org.apache.tiles.TilesContainer; -import org.apache.tiles.TilesConfig; -import org.apache.tiles.TilesRequestContext; -import org.apache.tiles.TilesApplicationContext; +import org.apache.tiles.*; +import org.apache.tiles.context.TilesContextFactory; import org.apache.tiles.definition.UrlDefinitionsFactory; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.logging.Log; import java.util.Map; /** - * TODO Flush out the basic container implementation. + * Basic implementation of the tiles container interface. + * In most cases, this container will be customized by + * injecting customized services, not necessarily by + * override the container + * + * @since 2.0 + * @version $Rev$ + * */ public class BasicTilesContainer implements TilesContainer { - private TilesConfig config; - - public void init(TilesConfig config) { - this.config = config; - initializeDefinitionsFactory(); + /** + * Log instance for all BasicTilesContainer + * instances. + */ + private static final Log LOG = + LogFactory.getLog(BasicTilesContainer.class); + + private TilesApplicationContext context; + private DefinitionsFactory definitionsFactory; + private TilesContextFactory contextFactory; + + /** + * Initialize the Container with the given configuration. + * + * @param context + * @throws TilesException + */ + public void init(TilesApplicationContext context) throws TilesException { + checkInit(); + this.context = context; + contextFactory.init(context.getInitParams()); + definitionsFactory.init(context.getInitParams()); + } + /** + * Determine whether or not the container has been + * initialized. Utility method used for methods which + * can not be invoked after the container has been + * started. + * @throws IllegalStateException if the container has already been initialized. + */ + private void checkInit() { + if(context != null) { + throw new IllegalStateException("Container allready initialized"); + } } + /** + * Standard Getter + * @return the application context for this container. + */ public TilesApplicationContext getApplicationContext() { - return config.getApplicationContext(); + return context; + } + + + /** + * Standard Getter + * @return the definitions factory used by this container. + */ + public DefinitionsFactory getDefinitionsFactory() { + return definitionsFactory; + } + + /** + * Standard Setter + * @param definitionsFactory the definitions factory for this instance. + */ + public void setDefinitionsFactory(DefinitionsFactory definitionsFactory) { + checkInit(); + this.definitionsFactory = definitionsFactory; + } + + + public TilesContextFactory getContextFactory() { + checkInit(); + return contextFactory; } - public void render(TilesRequestContext request) { - //To change body of implemented methods use File | Settings | File Templates. + public void setContextFactory(TilesContextFactory contextFactory) { + checkInit(); + this.contextFactory = contextFactory; } + /** + * Render the specified definition. + * + * @param request the TilesRequestContext + * @throws TilesException + */ + public void render(TilesRequestContext request) + throws TilesException { + String definitionName = request.getDefinitionName(); + ComponentDefinition definition = + definitionsFactory.getDefinition(definitionName, request); + + if (definition == null) { + if(LOG.isWarnEnabled()) { + String message = "Unable to find the definition '" + definitionName + "'"; + LOG.warn(message); + } + throw new NoSuchDefinitionException(definitionName); + } - void initializeDefinitionsFactory() { - Map init = config.getInitParameters(); - String className = (String)init.get(TilesConfig.DEFINITIONS_FACTORY_CLASS_NAME_ATTR_KEY); - if(className == null) { - className = UrlDefinitionsFactory.class.getName(); + ComponentContext context = getComponentContext(request, definition); + + try { + ViewPreparer preparer = definition.getOrCreatePreparer(); + if (preparer != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Executing tiles preparer [" + preparer + "]"); + } + preparer.execute(request, context); + } + + String dispatchPath = definition.getPath(); + request.dispatch(dispatchPath); + + } catch (TilesException e) { + throw e; + } catch (Exception e) { + // TODO it would be nice to make the preparer throw a more specific + // tiles exception so that it doesn't need to be rethrown. + throw new TilesException(e.getMessage(), e); } - //. . . + } + + protected ComponentContext getComponentContext(TilesRequestContext request, + ComponentDefinition definition) { + ComponentContext context = ComponentContext.getContext(request); + if (context == null) { + context = new ComponentContext(definition.getAttributes()); + ComponentContext.setContext(context, request); + } else { + context.addMissing(definition.getAttributes()); + } + return context; + } + } Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java?view=auto&rev=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java Tue Oct 31 10:21:51 2006 @@ -0,0 +1,76 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed 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. + * + * $Id$ + */ +package org.apache.tiles.listener; + +import org.apache.tiles.factory.TilesContainerFactory; +import org.apache.tiles.TilesException; +import org.apache.tiles.TilesContainer; +import org.apache.tiles.access.TilesAccess; + +import javax.servlet.ServletContextListener; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContext; +import java.util.logging.Logger; +import java.util.logging.Level; + +public class TilesContainerListener + implements ServletContextListener { + + /** + * Logger instance. + */ + protected static final Logger LOG = + Logger.getLogger(TilesListener.class.getName()); + + /** + * Initialize the TilesContainer and place it + * into service. + * + * @param event + */ + public void contextInitialized(ServletContextEvent event) { + ServletContext servletContext = event.getServletContext(); + try { + TilesContainer container = createContainer(servletContext); + TilesAccess.setContainer(servletContext, container); + } catch (TilesException e) { + LOG.log(Level.SEVERE, "Unable to retrieve tiles factory."); + } + } + + /** + * Remove the tiles container from service. + * @param event + */ + public void contextDestroyed(ServletContextEvent event) { + ServletContext servletContext = event.getServletContext(); + try { + TilesAccess.setContainer(servletContext, null); + } catch (TilesException e) { + LOG.log(Level.SEVERE, "Unable to remove tiles container from service."); + } + } + + protected TilesContainer createContainer(ServletContext context) + throws TilesException { + TilesContainerFactory factory = + TilesContainerFactory.getFactory(context); + return factory.createContainer(context); + } + +} Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesContainerListener.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesListener.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesListener.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesListener.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/listener/TilesListener.java Tue Oct 31 10:21:51 2006 @@ -27,12 +27,9 @@ import javax.servlet.ServletContextListener; import javax.servlet.ServletException; import javax.servlet.UnavailableException; -import org.apache.tiles.DefinitionsFactory; -import org.apache.tiles.DefinitionsFactoryConfig; -import org.apache.tiles.DefinitionsFactoryException; -import org.apache.tiles.TilesApplicationContext; -import org.apache.tiles.TilesUtil; -import org.apache.tiles.TilesUtilImpl; + +import org.apache.tiles.*; +import org.apache.tiles.access.TilesAccess; import org.apache.tiles.context.BasicTilesContextFactory; import org.apache.tiles.context.TilesContextFactory; @@ -92,6 +89,7 @@ TilesContextFactory factory = new BasicTilesContextFactory(); TilesApplicationContext tilesContext = factory.createApplicationContext(context); + TilesAccess.setApplicationContext(context, tilesContext); TilesUtil.setTilesUtil(new TilesUtilImpl(tilesContext)); initDefinitionsFactory(context, fconfig); } @@ -104,6 +102,10 @@ public void contextDestroyed(ServletContextEvent event) { this.definitionFactory = null; + try { + TilesAccess.setApplicationContext(event.getServletContext(), null); + } catch (TilesException e) { + } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/servlet/TilesServlet.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/servlet/TilesServlet.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/servlet/TilesServlet.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/servlet/TilesServlet.java Tue Oct 31 10:21:51 2006 @@ -28,6 +28,7 @@ import java.util.logging.Logger; import org.apache.tiles.*; +import org.apache.tiles.access.TilesAccess; import org.apache.tiles.context.TilesContextFactory; import org.apache.tiles.context.BasicTilesContextFactory; @@ -172,6 +173,7 @@ ServletContext context = config.getServletContext(); TilesContextFactory factory = new BasicTilesContextFactory(); TilesApplicationContext tilesContext = factory.createApplicationContext(context); + TilesAccess.setApplicationContext(context, tilesContext); TilesUtil.setTilesUtil(new TilesUtilImpl(tilesContext)); initDefinitionsFactory(context, fconfig); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java Tue Oct 31 10:21:51 2006 @@ -23,7 +23,7 @@ import javax.servlet.jsp.tagext.TagSupport; import org.apache.tiles.*; -import org.apache.tiles.context.TilesContextAccess; +import org.apache.tiles.access.TilesAccess; /** * Init definitions impl. @@ -69,7 +69,7 @@ */ public int doStartTag() throws JspException { TilesApplicationContext tilesContext = - TilesContextAccess.getApplicationContext(pageContext.getServletContext()); + TilesAccess.getApplicationContext(pageContext.getServletContext()); DefinitionsFactory factory = TilesUtil.getDefinitionsFactory(); if(factory != null ) { return SKIP_BODY; Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java Tue Oct 31 10:21:51 2006 @@ -31,7 +31,7 @@ import org.apache.commons.beanutils.PropertyUtils; import org.apache.tiles.taglib.ComponentConstants; import org.apache.tiles.*; -import org.apache.tiles.context.TilesContextAccess; +import org.apache.tiles.access.TilesAccess; /** * Collection of utilities. @@ -63,7 +63,7 @@ } public static TilesApplicationContext getTilesContext(ServletContext context) { - return TilesContextAccess.getApplicationContext(context); + return TilesAccess.getApplicationContext(context); } public static TilesRequestContext getTilesRequestContext( Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinition.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinition.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinition.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinition.java Tue Oct 31 10:21:51 2006 @@ -40,7 +40,7 @@ * @param theArgs the arguments. Not used */ public static void main(String[] theArgs) { - junit.awtui.TestRunner.main( + junit.textui.TestRunner.main( new String[] { TestComponentDefinition.class.getName()}); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinitions.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinitions.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinitions.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestComponentDefinitions.java Tue Oct 31 10:21:51 2006 @@ -44,7 +44,7 @@ * @param theArgs the arguments. Not used */ public static void main(String[] theArgs) { - junit.awtui.TestRunner.main( + junit.textui.TestRunner.main( new String[] { TestComponentDefinitions.class.getName()}); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestDigesterDefinitionsReader.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestDigesterDefinitionsReader.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestDigesterDefinitionsReader.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestDigesterDefinitionsReader.java Tue Oct 31 10:21:51 2006 @@ -47,7 +47,7 @@ * @param theArgs the arguments. Not used */ public static void main(String[] theArgs) { - junit.awtui.TestRunner.main( + junit.textui.TestRunner.main( new String[] { TestDigesterDefinitionsReader.class.getName()}); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestReloadableDefinitionsFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestReloadableDefinitionsFactory.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestReloadableDefinitionsFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestReloadableDefinitionsFactory.java Tue Oct 31 10:21:51 2006 @@ -48,7 +48,7 @@ * @param theArgs the arguments. Not used */ public static void main(String[] theArgs) { - junit.awtui.TestRunner.main( + junit.textui.TestRunner.main( new String[] { TestReloadableDefinitionsFactory.class.getName()}); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestTilesServlet.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestTilesServlet.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestTilesServlet.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestTilesServlet.java Tue Oct 31 10:21:51 2006 @@ -22,6 +22,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import junit.textui.TestRunner; import servletunit.ServletConfigSimulator; import servletunit.ServletContextSimulator; @@ -47,7 +48,7 @@ * @param theArgs the arguments. Not used */ public static void main(String[] theArgs) { - junit.awtui.TestRunner.main( + TestRunner.main( new String[] { TestTilesServlet.class.getName()}); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java?view=diff&rev=469595&r1=469594&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java Tue Oct 31 10:21:51 2006 @@ -49,7 +49,7 @@ * @param theArgs the arguments. Not used */ public static void main(String[] theArgs) { - junit.awtui.TestRunner.main( + junit.textui.TestRunner.main( new String[] { TestUrlDefinitionsFactory.class.getName()}); } Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java?view=auto&rev=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java Tue Oct 31 10:21:51 2006 @@ -0,0 +1,53 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed 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. + * + * $Id$ + */ +package org.apache.tiles.access; + +import org.easymock.EasyMock; +import org.apache.tiles.TilesContainer; +import org.apache.tiles.TilesException; +import org.apache.tiles.impl.BasicTilesContainer; + +import javax.servlet.ServletContext; + +import junit.framework.TestCase; + +public class TilesAccessTest extends TestCase { + + private ServletContext context; + + public void setUp() { + context = EasyMock.createMock(ServletContext.class); + } + + public void testSetContext() throws TilesException { + TilesContainer container = new BasicTilesContainer(); + context.setAttribute(TilesAccess.CONTAINER_ATTRIBUTE,container); + EasyMock.replay(context); + TilesAccess.setContainer(context, container); + EasyMock.verify(context); + } + + public void testGetContext() throws TilesException { + TilesContainer container = new BasicTilesContainer(); + EasyMock.expect(context.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container); + EasyMock.replay(context); + assertEquals(container, TilesAccess.getContainer(context)); + EasyMock.verify(context); + } + +} Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Copied: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java (from r469464, struts/sandbox/trunk/tiles/tiles-factory/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java) URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java?view=diff&rev=469595&p1=struts/sandbox/trunk/tiles/tiles-factory/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java&r1=469464&p2=struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java&r2=469595 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-factory/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java Tue Oct 31 10:21:51 2006 @@ -23,18 +23,91 @@ import org.easymock.EasyMock; import org.apache.tiles.TilesContainer; +import org.apache.tiles.TilesException; import org.apache.tiles.context.servlet.ServletTilesApplicationContext; +import org.apache.tiles.context.TilesContextFactory; import org.apache.tiles.impl.BasicTilesContainer; +import java.util.Map; +import java.util.Vector; + public class TilesContainerFactoryTest extends TestCase { - public void testCreateContainer() throws ConfigurationNotSupportedException { - ServletContext context = (ServletContext)EasyMock.createMock(ServletContext.class); - TilesContainer container = TilesContainerFactory.createContainer(context); + private ServletContext context; + + public void setUp() { + context = EasyMock.createMock(ServletContext.class); + } + + public void testGetFactory() throws TilesException { + EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn(null); + EasyMock.replay(context); + TilesContainerFactory factory = TilesContainerFactory.getFactory(context); + assertNotNull(factory); + assertEquals(TilesContainerFactory.class, factory.getClass()); + + EasyMock.reset(context); + EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn(TestFactory.class.getName()); + EasyMock.replay(context); + factory = TilesContainerFactory.getFactory(context); + assertNotNull(factory); + assertEquals(TestFactory.class, factory.getClass()); - assertEquals(BasicTilesContainer.class, container.getClass()); - assertEquals(ServletTilesApplicationContext.class, container.getApplicationContext().getClass()); + EasyMock.reset(context); + EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn("org.missing.Class"); + EasyMock.replay(context); + try { + TilesContainerFactory.getFactory(context); + fail("Invalid classname. Exception should have been thrown."); + } + catch (TilesException e) { + } } + public void testCreateContainer() throws TilesException { + EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn(null); + EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTEXT_FACTORY_INIT_PARAM)).andReturn(null); + EasyMock.expect(context.getInitParameter(TilesContainerFactory.DEFINITIONS_FACTORY_INIT_PARAM)).andReturn(null); + EasyMock.expect(context.getInitParameter(EasyMock.isA(String.class))).andReturn(null).anyTimes(); + EasyMock.replay(context); + + TilesContainerFactory factory = TilesContainerFactory.getFactory(context); + TilesContainer container = factory.createContainer(context); + + assertNotNull(container); + //now make sure it's initialized + try { + container.init(null); + fail("Container should have allready been initialized"); + } + catch (IllegalStateException te) { + } + + } + + public void testGetInitParameterMap() throws TilesException { + Vector keys = new Vector(); + keys.add("one"); + keys.add("two"); + + EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn(null); + EasyMock.expect(context.getInitParameterNames()).andReturn(keys.elements()); + EasyMock.expect(context.getInitParameter("one")).andReturn("oneValue"); + EasyMock.expect(context.getInitParameter("two")).andReturn("twoValue"); + EasyMock.replay(context); + + TilesContainerFactory factory = TilesContainerFactory.getFactory(context); + Map map = factory.getInitParameterMap(context); + + assertEquals(2, map.size()); + assertTrue(map.containsKey("one")); + assertTrue(map.containsKey("two")); + assertEquals("oneValue", map.get("one")); + assertEquals("twoValue", map.get("two")); + } + + static class TestFactory extends TilesContainerFactory { + + } } Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date