Author: apetrelli Date: Wed Jan 10 08:41:39 2007 New Revision: 494885 URL: http://svn.apache.org/viewvc?view=rev&rev=494885 Log: Added the concept of "KeyExtractor"
Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java (with props) Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.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/KeyedDefinitionsFactoryTilesContainer.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java?view=diff&rev=494885&r1=494884&r2=494885 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java Wed Jan 10 08:41:39 2007 @@ -29,8 +29,10 @@ import org.apache.tiles.definition.DefinitionsFactory; import org.apache.tiles.impl.BasicTilesContainer; import org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer; +import org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer.KeyExtractor; import org.apache.tiles.impl.mgmt.CachingKeyedDefinitionsFactoryTilesContainerFactory; import org.apache.tiles.mgmt.MutableTilesContainer; +import org.apache.tiles.util.ClassUtil; /** * Factory that creates instances of container that will extend the @@ -47,6 +49,9 @@ */ public static final String CONTAINER_KEYS_INIT_PARAM = "org.apache.tiles.CONTAINER.keys"; + + public static final String KEY_EXTRACTOR_CLASS_INIT_PARAM = + "org.apache.tiles.CONTAINER.keyExtractor"; @Override public MutableTilesContainer createMutableTilesContainer(Object context) throws TilesException { @@ -86,10 +91,18 @@ @Override protected void storeContainerDependencies(Object context, - BasicTilesContainer container) throws TilesException { - super.storeContainerDependencies(context, container); - String keysString = getInitParameter(context, - CONTAINER_KEYS_INIT_PARAM); + Map<String, String> initParameters, Map<String, String> configuration, BasicTilesContainer container) throws TilesException { + super.storeContainerDependencies(context, initParameters, configuration, container); + + String keyExtractorClassName = configuration.get( + KEY_EXTRACTOR_CLASS_INIT_PARAM); + if (keyExtractorClassName != null + && container instanceof KeyedDefinitionsFactoryTilesContainer) { + ((KeyedDefinitionsFactoryTilesContainer) container).setKeyExtractor( + (KeyExtractor) ClassUtil.instantiate(keyExtractorClassName)); + } + + String keysString = initParameters.get(CONTAINER_KEYS_INIT_PARAM); if (keysString != null && container instanceof KeyedDefinitionsFactoryTilesContainer) { String[] keys = keysString.split(","); @@ -97,7 +110,7 @@ config.putAll(getInitParameterMap(context)); for (int i=0; i < keys.length; i++) { Map<String, String> initParams = new HashMap<String, String>(); - String param = getInitParameter(context, + String param = initParameters.get( BasicTilesContainer.DEFINITIONS_CONFIG + "@" + keys[i]); if (param != null) { initParams.put(BasicTilesContainer.DEFINITIONS_CONFIG, 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=494885&r1=494884&r2=494885 ============================================================================== --- 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 Wed Jan 10 08:41:39 2007 @@ -162,17 +162,19 @@ protected void initializeContainer(Object context, BasicTilesContainer container) throws TilesException { - storeContainerDependencies(context, container); - container.init(getInitParameterMap(context)); - + Map <String, String> initParameterMap; + + initParameterMap = getInitParameterMap(context); + Map<String, String> configuration = new HashMap<String, String>(defaultConfiguration); + configuration.putAll(initParameterMap); + storeContainerDependencies(context, initParameterMap, configuration, container); + container.init(initParameterMap); } protected void storeContainerDependencies(Object context, + Map<String, String> initParameters, + Map<String, String> configuration, BasicTilesContainer container) throws TilesException { - - Map<String, String> configuration = new HashMap<String, String>(defaultConfiguration); - configuration.putAll(getInitParameterMap(context)); - TilesContextFactory contextFactory = (TilesContextFactory) createFactory(configuration, CONTEXT_FACTORY_INIT_PARAM); Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java?view=diff&rev=494885&r1=494884&r2=494885 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java Wed Jan 10 08:41:39 2007 @@ -50,6 +50,8 @@ * Maps definition factories to their keys. */ protected Map<String, DefinitionsFactory> key2definitionsFactory; + + protected KeyExtractor keyExtractor; /** * Constructor. @@ -57,6 +59,37 @@ public KeyedDefinitionsFactoryTilesContainer() { key2definitionsFactory = new HashMap<String, DefinitionsFactory>(); } + + public interface KeyExtractor { + + /** + * Returns the definitions factory key. + * + * @param request The request object. + * @return The needed factory key. + */ + public String getDefinitionsFactoryKey(TilesRequestContext request); + } + + protected class DefaultKeyExtractor implements KeyExtractor { + + /** + * Returns the definitions factory key. + * + * @param request The request object. + * @return The needed factory key. + */ + public String getDefinitionsFactoryKey(TilesRequestContext request) { + String retValue = null; + Map requestScope = request.getRequestScope(); + if (requestScope != null) { // Probably the request scope does not exist + retValue = (String) requestScope.get( + DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME); + } + + return retValue; + } + } /** * Standard Getter @@ -114,6 +147,10 @@ setDefinitionsFactory(definitionsFactory); } } + + public void setKeyExtractor(KeyExtractor keyExtractor) { + this.keyExtractor = keyExtractor; + } @Override protected ComponentDefinition getDefinition(String definitionName, @@ -141,13 +178,10 @@ * @return The needed factory key. */ protected String getDefinitionsFactoryKey(TilesRequestContext request) { - String retValue = null; - Map requestScope = request.getRequestScope(); - if (requestScope != null) { // Probably the request scope does not exist - retValue = (String) requestScope.get( - DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME); - } - return retValue; + if (keyExtractor == null) { + keyExtractor = new DefaultKeyExtractor(); + } + return keyExtractor.getDefinitionsFactoryKey(request); } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java?view=diff&rev=494885&r1=494884&r2=494885 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java Wed Jan 10 08:41:39 2007 @@ -37,6 +37,7 @@ import org.apache.tiles.definition.DefinitionsFactory; import org.apache.tiles.factory.KeyedDefinitionsFactoryTilesContainerFactory; import org.apache.tiles.factory.TilesContainerFactory; +import org.apache.tiles.util.RollingVectorEnumeration; import org.easymock.EasyMock; @@ -57,6 +58,9 @@ ServletContext context = EasyMock.createMock(ServletContext.class); Vector<String> v = new Vector<String>(); + v.add(KeyedDefinitionsFactoryTilesContainerFactory.CONTAINER_KEYS_INIT_PARAM); + v.add(BasicTilesContainer.DEFINITIONS_CONFIG + "@one"); + v.add(BasicTilesContainer.DEFINITIONS_CONFIG + "@two"); EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn(null); EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTEXT_FACTORY_INIT_PARAM)).andReturn(null); @@ -69,7 +73,7 @@ EasyMock.expect(context.getInitParameter(BasicTilesContainer.DEFINITIONS_CONFIG + "@two")) .andReturn("/WEB-INF/tiles-two.xml").anyTimes(); EasyMock.expect(context.getInitParameter(EasyMock.isA(String.class))).andReturn(null).anyTimes(); - EasyMock.expect(context.getInitParameterNames()).andReturn(v.elements()).anyTimes(); + EasyMock.expect(context.getInitParameterNames()).andReturn(new RollingVectorEnumeration<String>(v)).anyTimes(); try { URL url = getClass().getResource("/org/apache/tiles/factory/test-defs.xml"); EasyMock.expect(context.getResource("/WEB-INF/tiles.xml")).andReturn(url); Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java?view=auto&rev=494885 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java Wed Jan 10 08:41:39 2007 @@ -0,0 +1,59 @@ +/* + * $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.util; + +import java.util.Enumeration; +import java.util.Vector; + +/** + * @version $Rev$ $Date$ + */ +public class RollingVectorEnumeration<E> implements Enumeration<E> { + + private Vector<E> vector; + + private Enumeration<E> elements; + + public RollingVectorEnumeration(Vector<E> vector) { + this.vector = vector; + } + + public boolean hasMoreElements() { + if (elements == null) { + elements = vector.elements(); + return false; + } + return elements.hasMoreElements(); + } + + public E nextElement() { + E retValue = elements.nextElement(); + + if (!elements.hasMoreElements()) { + elements = null; + } + + return retValue; + } + +} Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/util/RollingVectorEnumeration.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL