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