You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2012/02/13 22:19:09 UTC
svn commit: r1243699 [1/3] - in /commons/proper/chain/trunk/src: changes/
main/java/org/apache/commons/chain/
main/java/org/apache/commons/chain/config/
main/java/org/apache/commons/chain/generic/
main/java/org/apache/commons/chain/impl/ main/java/org/...
Author: simonetripodi
Date: Mon Feb 13 21:19:07 2012
New Revision: 1243699
URL: http://svn.apache.org/viewvc?rev=1243699&view=rev
Log:
[CHAIN-58] Update Chain Context interface to use K,V generics - patch submitted by Elijah Zupancic
Added:
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java (with props)
Modified:
commons/proper/chain/trunk/src/changes/changes.xml
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Catalog.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/CatalogFactory.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Chain.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Command.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Context.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Filter.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigCatalogRule.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigParser.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigRegisterRule.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/CopyCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchLookupCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/LookupCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/RemoveCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogBase.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogFactoryBase.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ChainBase.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextBase.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractGetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractSetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainListener.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainServlet.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/WebContext.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesGetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesSetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesWebContext.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletGetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletSetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ChainProcessor.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/PathInfoMapper.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/RequestParameterMapper.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ServletGetLocaleCommand.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ServletPathMapper.java
commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ServletSetLocaleCommand.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/config/ConfigParser2TestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/config/ConfigParserTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/config/TestChain.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/config/TestCommand.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/generic/DispatchCommandTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/generic/DispatchLookupCommandTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/generic/LookupCommandTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/AddingCommand.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/CatalogBaseTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/CatalogFactoryBaseTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/ChainBaseTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/ContextBaseTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/DelegatingCommand.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/DelegatingFilter.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/ExceptionCommand.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/ExceptionFilter.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/NonDelegatingCommand.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/NonDelegatingFilter.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/TestContext.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/impl/TestContextTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/MockEnumeration.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/portlet/MockPortletContext.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/portlet/MockPortletRequest.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/portlet/MockPortletSession.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/portlet/PortletGetLocaleCommandTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/portlet/PortletWebContextTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/MockHttpServletRequest.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/MockHttpSession.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/MockServletConfig.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/MockServletContext.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/ServletGetLocaleCommandTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/ServletSetLocaleCommandTestCase.java
commons/proper/chain/trunk/src/test/java/org/apache/commons/chain/web/servlet/ServletWebContextTestCase.java
Modified: commons/proper/chain/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/changes/changes.xml?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/changes/changes.xml (original)
+++ commons/proper/chain/trunk/src/changes/changes.xml Mon Feb 13 21:19:07 2012
@@ -43,6 +43,9 @@ The <action> type attribute can be add,u
<action dev="simonetripodi" type="add" issue="CHAIN-61" due-to="Elijah Zupancic">
Chain 2.0 trunk build is throwing many warnings as a result of generification changes.
</action>
+ <action dev="simonetripodi" type="update" issue="CHAIN-58" due-to="Elijah Zupancic">
+ Update Chain Context interface to use K,V generics
+ </action>
<action dev="simonetripodi" type="add" issue="CHAIN-56">
clever Context with generic type "auto-cast" feature.
</action>
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Catalog.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Catalog.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Catalog.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Catalog.java Mon Feb 13 21:19:07 2012
@@ -18,6 +18,7 @@ package org.apache.commons.chain;
import java.util.Iterator;
+import java.util.Map;
/**
@@ -27,11 +28,15 @@ import java.util.Iterator;
* is optional, but convenient when there are multiple possible chains
* that can be selected and executed based on environmental conditions.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this command
+ * @param <V> the type of mapped values
+ * @param <C> Type of the context associated with this command
+ *
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public interface Catalog {
+public interface Catalog<K, V, C extends Map<K, V>> {
/**
@@ -46,24 +51,22 @@ public interface Catalog {
* to the set of named commands known to this {@link Catalog},
* replacing any previous command for that name.
*
- * @param <C> Type of the context associated with this command
* @param name Name of the new command
* @param command {@link Command} or {@link Chain} to be returned
* for later lookups on this name
*/
- <C extends Context> void addCommand(String name, Command<C> command);
+ void addCommand(String name, Command<K, V, C> command);
/**
* <p>Return the {@link Command} or {@link Chain} associated with the
* specified name, if any; otherwise, return <code>null</code>.</p>
*
- * @param <C> Type of the context associated with this command
* @param name Name for which a {@link Command} or {@link Chain}
* should be retrieved
* @return The Command associated with the specified name.
*/
- <C extends Context> Command<C> getCommand(String name);
+ Command<K, V, C> getCommand(String name);
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/CatalogFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/CatalogFactory.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/CatalogFactory.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/CatalogFactory.java Mon Feb 13 21:19:07 2012
@@ -19,8 +19,8 @@ package org.apache.commons.chain;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import org.apache.commons.chain.impl.CatalogFactoryBase;
+import org.apache.commons.chain.impl.CatalogFactoryBase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -34,11 +34,15 @@ import org.apache.commons.logging.LogFac
* a resolution mechanism which allows lookup of a command based on a single
* String which encodes both the catalog and command names.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this command
+ * @param <V> the type of mapped values
+ * @param <C> Type of the context associated with this command
+ *
* @author Sean Schofield
* @version $Revision$ $Date$
*/
-public abstract class CatalogFactory {
+public abstract class CatalogFactory<K, V, C extends Map<K, V>> {
/**
@@ -58,7 +62,7 @@ public abstract class CatalogFactory {
*
* @return the default Catalog instance
*/
- public abstract Catalog getCatalog();
+ public abstract Catalog<K, V, C> getCatalog();
/**
@@ -66,7 +70,7 @@ public abstract class CatalogFactory {
*
* @param catalog the default Catalog instance
*/
- public abstract void setCatalog(Catalog catalog);
+ public abstract void setCatalog(Catalog<K, V, C> catalog);
/**
@@ -76,7 +80,7 @@ public abstract class CatalogFactory {
* @param name the name of the Catalog to retrieve
* @return the specified Catalog
*/
- public abstract Catalog getCatalog(String name);
+ public abstract Catalog<K, V, C> getCatalog(String name);
/**
@@ -86,7 +90,7 @@ public abstract class CatalogFactory {
* @param name the name of the Catalog to add
* @param catalog the Catalog to add
*/
- public abstract void addCatalog(String name, Catalog catalog);
+ public abstract void addCatalog(String name, Catalog<K, V, C> catalog);
/**
@@ -123,11 +127,11 @@ public abstract class CatalogFactory {
*
* @since Chain 1.1
*/
- public <C extends Context> Command<C> getCommand(String commandID) {
+ public Command<K, V, C> getCommand(String commandID) {
String commandName = commandID;
String catalogName = null;
- Catalog catalog = null;
+ Catalog<K, V, C> catalog = null;
if (commandID != null) {
int splitPos = commandID.indexOf(DELIMITER);
@@ -170,8 +174,8 @@ public abstract class CatalogFactory {
* <p>The set of registered {@link CatalogFactory} instances,
* keyed by the relevant class loader.</p>
*/
- private static final Map<ClassLoader, CatalogFactory> factories =
- new HashMap<ClassLoader, CatalogFactory>();
+ private static final Map<ClassLoader, CatalogFactory<?, ?, ? extends Map<?, ?>>> factories =
+ new HashMap<ClassLoader, CatalogFactory<?, ?, ? extends Map<?, ?>>>();
// -------------------------------------------------------- Static Methods
@@ -187,19 +191,24 @@ public abstract class CatalogFactory {
*
* @return the per-application singleton instance of {@link CatalogFactory}
*/
- public static CatalogFactory getInstance() {
+ public static <K, V, C extends Map<K, V>> CatalogFactory<K, V, C> getInstance() {
- CatalogFactory factory = null;
+ CatalogFactory<?, ?, ? extends Map<?, ?>> factory = null;
ClassLoader cl = getClassLoader();
synchronized (factories) {
factory = factories.get(cl);
if (factory == null) {
- factory = new CatalogFactoryBase();
+ factory = new CatalogFactoryBase<K, V, C>();
factories.put(cl, factory);
}
}
- return factory;
+ /* This should always convert cleanly because we are using the
+ * base most generic for definition. */
+ @SuppressWarnings("unchecked")
+ CatalogFactory<K, V, C> result = (CatalogFactory<K, V, C>) factory;
+
+ return result;
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Chain.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Chain.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Chain.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Chain.java Mon Feb 13 21:19:07 2012
@@ -16,6 +16,8 @@
*/
package org.apache.commons.chain;
+import java.util.Map;
+
/**
* <p>A {@link Chain} represents a configured list of
@@ -53,7 +55,7 @@ package org.apache.commons.chain;
* @version $Revision$ $Date$
*/
-public interface Chain<C extends Context> extends Command<C> {
+public interface Chain<K, V, C extends Map<K, V>> extends Command<K, V, C> {
/**
@@ -70,7 +72,7 @@ public interface Chain<C extends Context
* @exception IllegalStateException if this {@link Chain} has already
* been executed at least once, so no further configuration is allowed
*/
- void addCommand(Command<C> command);
+ void addCommand(Command<K, V, C> command);
/**
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Command.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Command.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Command.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Command.java Mon Feb 13 21:19:07 2012
@@ -16,6 +16,8 @@
*/
package org.apache.commons.chain;
+import java.util.Map;
+
/**
* <p>A {@link Command} encapsulates a unit of processing work to be
@@ -73,13 +75,15 @@ package org.apache.commons.chain;
* being used in this fashion, as opposed to JavaBeans properties that simply
* configure the internal operation of this {@link Command}.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this command
+ * @param <V> the type of mapped values
* @param <C> Type of the context associated with this command
*
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public interface Command<C extends Context> {
+public interface Command<K, V, C extends Map<K, V>> {
/**
* <p>Commands should return <code>CONTINUE_PROCESSING</code> if the processing
@@ -98,6 +102,7 @@ public interface Command<C extends Conte
* @since Chain 1.1
*/
public static final boolean PROCESSING_COMPLETE = true;
+
/**
* <p>Execute a unit of processing work to be performed. This
* {@link Command} may either complete the required processing
@@ -118,8 +123,6 @@ public interface Command<C extends Conte
* of this {@link Context} should be delegated to a subsequent
* {@link Command} in an enclosing {@link Chain}
*/
-
boolean execute(C context) throws Exception;
-
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Context.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Context.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Context.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Context.java Mon Feb 13 21:19:07 2012
@@ -56,11 +56,13 @@ import java.util.Map;
* simultaneously unless this is explicitly documented for a particular
* implementation.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this catalog
+ * @param <V> the type of mapped values
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public interface Context extends Map<String, Object> {
+public interface Context<K, V> extends Map<K, V> {
/**
* That method enhances the {@link #get(Object)} method that helps users
@@ -75,6 +77,6 @@ public interface Context extends Map<Str
* @see #get(Object)
* @since 2.0
*/
- <T> T retrieve(String key);
+ <T extends V> T retrieve(K key);
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Filter.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Filter.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Filter.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/Filter.java Mon Feb 13 21:19:07 2012
@@ -16,6 +16,8 @@
*/
package org.apache.commons.chain;
+import java.util.Map;
+
/**
* <p>A {@link Filter} is a specialized {@link Command} that also expects
@@ -37,13 +39,15 @@ package org.apache.commons.chain;
* can reliably release such resources in the <code>postprocess()</code>
* method, which is guaranteed to be called by the owning {@link Chain}.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this command
+ * @param <V> the type of mapped values
* @param <C> Type of the context associated with this command
*
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public interface Filter<C extends Context> extends Command<C> {
+public interface Filter<K, V, C extends Map<K, V>> extends Command<K, V, C> {
/**
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigCatalogRule.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigCatalogRule.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigCatalogRule.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigCatalogRule.java Mon Feb 13 21:19:07 2012
@@ -17,6 +17,8 @@
package org.apache.commons.chain.config;
+import java.util.Map;
+
import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.CatalogFactory;
import org.apache.commons.digester.Rule;
@@ -89,12 +91,13 @@ class ConfigCatalogRule extends Rule {
* the element name otherwise
* @param attributes The attribute list of this element
*/
+ @Override
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
// Retrieve any current Catalog with the specified name
- Catalog catalog = null;
- CatalogFactory factory = CatalogFactory.getInstance();
+ Catalog<Object, Object, Map<Object, Object>> catalog = null;
+ CatalogFactory<Object, Object, Map<Object, Object>> factory = CatalogFactory.getInstance();
String nameValue = attributes.getValue(nameAttribute);
if (nameValue == null) {
catalog = factory.getCatalog();
@@ -105,8 +108,16 @@ class ConfigCatalogRule extends Rule {
// Create and register a new Catalog instance if necessary
if (catalog == null) {
Class<?> clazz = digester.getClassLoader().loadClass(catalogClass);
- catalog = (Catalog) clazz.newInstance();
+
+ /* Convert catalog pulled from digester to default generic signature
+ * with the assumption that the Catalog returned from digester will
+ * comply with the the historic chain contract. */
+ Catalog<Object, Object, Map<Object, Object>> digesterCatalog = (Catalog<Object, Object, Map<Object, Object>>) clazz.newInstance();
+
+ catalog = digesterCatalog;
+
if (nameValue == null) {
+
factory.setCatalog(catalog);
} else {
factory.addCatalog(nameValue, catalog);
@@ -115,8 +126,6 @@ class ConfigCatalogRule extends Rule {
// Push this Catalog onto the top of the stack
digester.push(catalog);
-
}
-
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigParser.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigParser.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigParser.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigParser.java Mon Feb 13 21:19:07 2012
@@ -19,6 +19,7 @@ package org.apache.commons.chain.config;
import java.net.URL;
import org.apache.commons.chain.Catalog;
+import org.apache.commons.chain.Context;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.RuleSet;
@@ -157,7 +158,7 @@ public class ConfigParser {
* element(s) embedded
*/
@Deprecated
- public void parse(Catalog catalog, URL url) throws Exception {
+ public <K, V, C extends Context<K, V>> void parse(Catalog<K, V, C> catalog, URL url) throws Exception {
// Prepare our Digester instance
Digester digester = getDigester();
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigRegisterRule.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigRegisterRule.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigRegisterRule.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/config/ConfigRegisterRule.java Mon Feb 13 21:19:07 2012
@@ -17,6 +17,8 @@
package org.apache.commons.chain.config;
+import java.util.Map;
+
import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.Chain;
import org.apache.commons.chain.Command;
@@ -88,12 +90,12 @@ class ConfigRegisterRule extends Rule {
|| !(top instanceof Command)) {
return;
}
-
+
/* All commands can consume a generic context. Here we depend on
* the configuration being correct because the rule binding is
* dynamic. */
- @SuppressWarnings("unchecked")
- Command<Context> command = (Command<Context>) top;
+ Command<Object, Object, Map<Object, Object>> command =
+ (Command<Object, Object, Map<Object, Object>>) top;
// Is the next object a Catalog or a Chain?
Object next = digester.peek(1);
@@ -105,17 +107,18 @@ class ConfigRegisterRule extends Rule {
if (next instanceof Catalog) {
String nameValue = attributes.getValue(nameAttribute);
if (nameValue != null) {
- Catalog catalog = (Catalog) next;
+ /* We are dynamically building a catalog and assigning
+ * generics to the most base types possible. */
+ Catalog<Object, Object, Map<Object, Object>> catalog =
+ (Catalog<Object, Object, Map<Object, Object>>) next;
catalog.addCommand(nameValue, command);
}
} else if (next instanceof Chain) {
/* Like above - the chain is being dynamically generated,
* so we can add a generic context signature at compile-time. */
- @SuppressWarnings("unchecked")
- Chain<Context> chain = (Chain<Context>) next;
+ Chain<Object, Object, Map<Object, Object>> chain = (Chain<Object, Object, Map<Object, Object>>) next;
chain.addCommand(command);
}
-
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/CopyCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/CopyCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/CopyCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/CopyCommand.java Mon Feb 13 21:19:07 2012
@@ -17,6 +17,8 @@
package org.apache.commons.chain.generic;
+import java.util.Map;
+
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
@@ -25,26 +27,28 @@ import org.apache.commons.chain.Context;
* <p>Copy a specified literal value, or a context attribute stored under
* the <code>fromKey</code> (if any), to the <code>toKey</code>.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this command
+ * @param <V> the type of mapped values
* @param <C> Type of the context associated with this command
*
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public class CopyCommand<C extends Context> implements Command<C> {
+public class CopyCommand<K, V, C extends Map<K, V>> implements Command<K, V, C> {
// -------------------------------------------------------------- Properties
- private String fromKey = null;
+ private K fromKey = null;
/**
* <p>Return the context attribute key for the source attribute.</p>
* @return The source attribute key.
*/
- public String getFromKey() {
+ public K getFromKey() {
return (this.fromKey);
@@ -56,21 +60,21 @@ public class CopyCommand<C extends Conte
*
* @param fromKey The new key
*/
- public void setFromKey(String fromKey) {
+ public void setFromKey(K fromKey) {
this.fromKey = fromKey;
}
- private String toKey = null;
+ private K toKey = null;
/**
* <p>Return the context attribute key for the destination attribute.</p>
* @return The destination attribute key.
*/
- public String getToKey() {
+ public K getToKey() {
return (this.toKey);
@@ -82,21 +86,21 @@ public class CopyCommand<C extends Conte
*
* @param toKey The new key
*/
- public void setToKey(String toKey) {
+ public void setToKey(K toKey) {
this.toKey = toKey;
}
- private String value = null;
+ private V value = null;
/**
* <p>Return the literal value to be copied.</p>
* @return The literal value.
*/
- public String getValue() {
+ public V getValue() {
return (this.value);
@@ -108,7 +112,7 @@ public class CopyCommand<C extends Conte
*
* @param value The new value
*/
- public void setValue(String value) {
+ public void setValue(V value) {
this.value = value;
@@ -129,7 +133,7 @@ public class CopyCommand<C extends Conte
*/
public boolean execute(C context) throws Exception {
- Object value = this.value;
+ V value = this.value;
if (value == null) {
value = context.get(getFromKey());
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchCommand.java Mon Feb 13 21:19:07 2012
@@ -29,11 +29,13 @@ import java.util.WeakHashMap;
* For use by developers who prefer to group related functionality into a single class
* rather than an inheritance family.
*
+ * @param <K> the type of keys maintained by the context associated with this command
+ * @param <V> the type of mapped values
* @param <C> Type of the context associated with this command
*
* @since Chain 1.1
*/
-public abstract class DispatchCommand<C extends Context> implements Command<C> {
+public abstract class DispatchCommand<K, V, C extends Context<K, V>> implements Command<K, V, C> {
/** Cache of methods */
private final Map<String, Method> methods = new WeakHashMap<String, Method>();
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchLookupCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchLookupCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchLookupCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/DispatchLookupCommand.java Mon Feb 13 21:19:07 2012
@@ -47,6 +47,8 @@ import java.util.WeakHashMap;
* silently ignored. Otherwise, a lookup failure will trigger an
* <code>IllegalArgumentException</code>.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this catalog
+ * @param <V> the type of mapped values
* @param <C> Type of the context associated with this command
*
* @author Sean Schofield
@@ -54,7 +56,8 @@ import java.util.WeakHashMap;
* @since Chain 1.1
*/
-public class DispatchLookupCommand<C extends Context> extends LookupCommand<C> implements Filter<C> {
+public class DispatchLookupCommand<K, V, C extends Context<K, V>>
+ extends LookupCommand<K, V, C> implements Filter<K, V, C> {
// -------------------------------------------------------------- Constructors
@@ -70,7 +73,7 @@ public class DispatchLookupCommand<C ext
* to given <code>factory</code>.
* @param factory The Catalog Factory.
*/
- public DispatchLookupCommand(CatalogFactory factory) {
+ public DispatchLookupCommand(CatalogFactory<K, V, C> factory) {
super(factory);
}
@@ -139,6 +142,7 @@ public class DispatchLookupCommand<C ext
* @throws Exception if no such {@link Command} can be found and the
* <code>optional</code> property is set to <code>false</code>
*/
+ @Override
public boolean execute(C context) throws Exception {
if (this.getMethod() == null && this.getMethodKey() == null) {
@@ -147,7 +151,7 @@ public class DispatchLookupCommand<C ext
);
}
- Command<C> command = getCommand(context);
+ Command<K, V, C> command = getCommand(context);
if (command != null) {
Method methodObject = extractMethod(command, context);
@@ -210,7 +214,7 @@ public class DispatchLookupCommand<C ext
* specified name.
* @throws NullPointerException if no methodName can be determined
*/
- private Method extractMethod(Command<C> command, C context)
+ private Method extractMethod(Command<K, V, C> command, C context)
throws NoSuchMethodException {
String methodName = this.getMethod();
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/LookupCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/LookupCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/LookupCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/LookupCommand.java Mon Feb 13 21:19:07 2012
@@ -17,6 +17,8 @@
package org.apache.commons.chain.generic;
+import java.util.Map;
+
import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.CatalogFactory;
import org.apache.commons.chain.Command;
@@ -46,7 +48,7 @@ import org.apache.commons.chain.Filter;
* @version $Revision$ $Date$
*/
-public class LookupCommand<C extends Context> implements Filter<C> {
+public class LookupCommand<K, V, C extends Map<K, V>> implements Filter<K, V, C> {
// -------------------------------------------------------------- Constructors
@@ -58,7 +60,7 @@ public class LookupCommand<C extends Con
* @since Chain 1.1
*/
public LookupCommand() {
- this(CatalogFactory.getInstance());
+ this(CatalogFactory.<K, V, C>getInstance());
}
/**
@@ -69,14 +71,14 @@ public class LookupCommand<C extends Con
*
* @since Chain 1.1
*/
- public LookupCommand(CatalogFactory factory) {
+ public LookupCommand(CatalogFactory<K, V, C> factory) {
this.catalogFactory = factory;
}
// -------------------------------------------------------------- Properties
- private CatalogFactory catalogFactory = null;
+ private CatalogFactory<K, V, C> catalogFactory = null;
/**
* <p>Set the {@link CatalogFactory} from which lookups will be
@@ -86,7 +88,7 @@ public class LookupCommand<C extends Con
*
* @since Chain 1.1
*/
- public void setCatalogFactory(CatalogFactory catalogFactory) {
+ public void setCatalogFactory(CatalogFactory<K, V, C> catalogFactory) {
this.catalogFactory = catalogFactory;
}
@@ -96,7 +98,7 @@ public class LookupCommand<C extends Con
*
* @since Chain 1.1
*/
- public CatalogFactory getCatalogFactory() {
+ public CatalogFactory<K, V, C> getCatalogFactory() {
return this.catalogFactory;
}
@@ -302,7 +304,7 @@ public class LookupCommand<C extends Con
*/
public boolean execute(C context) throws Exception {
- Command<C> command = getCommand(context);
+ Command<K, V, C> command = getCommand(context);
if (command != null) {
boolean result = (command.execute(context));
if (isIgnoreExecuteResult()) {
@@ -331,10 +333,10 @@ public class LookupCommand<C extends Con
*/
public boolean postprocess(C context, Exception exception) {
- Command<C> command = getCommand(context);
+ Command<K, V, C> command = getCommand(context);
if (command != null) {
if (command instanceof Filter) {
- boolean result = (((Filter<C>) command).postprocess(context, exception));
+ boolean result = (((Filter<K, V, C>) command).postprocess(context, exception));
if (isIgnorePostprocessResult()) {
return false;
}
@@ -359,14 +361,14 @@ public class LookupCommand<C extends Con
*
* @since Chain 1.2
*/
- protected Catalog getCatalog(C context) {
- CatalogFactory lookupFactory = this.catalogFactory;
+ protected Catalog<K, V, C> getCatalog(C context) {
+ CatalogFactory<K, V, C> lookupFactory = this.catalogFactory;
if (lookupFactory == null) {
lookupFactory = CatalogFactory.getInstance();
}
String catalogName = getCatalogName();
- Catalog catalog = null;
+ Catalog<K, V, C> catalog = null;
if (catalogName == null) {
// use default catalog
catalog = lookupFactory.getCatalog();
@@ -396,11 +398,11 @@ public class LookupCommand<C extends Con
* can be found and the <code>optional</code> property is set
* to <code>false</code>
*/
- protected Command<C> getCommand(C context) {
+ protected Command<K, V, C> getCommand(C context) {
- Catalog catalog = getCatalog(context);
+ Catalog<K, V, C> catalog = getCatalog(context);
- Command<C> command = null;
+ Command<K, V, C> command = null;
String name = getCommandName(context);
if (name != null) {
command = catalog.getCommand(name);
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/RemoveCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/RemoveCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/RemoveCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/generic/RemoveCommand.java Mon Feb 13 21:19:07 2012
@@ -24,26 +24,28 @@ import org.apache.commons.chain.Context;
/**
* <p>Remove any context attribute stored under the <code>fromKey</code>.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this catalog
+ * @param <V> the type of mapped values
* @param <C> Type of the context associated with this command
*
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public class RemoveCommand<C extends Context> implements Command<C> {
+public class RemoveCommand<K, V, C extends Context<K, V>> implements Command<K, V, C> {
// -------------------------------------------------------------- Properties
- private String fromKey = null;
+ private K fromKey = null;
/**
* <p>Return the context attribute key for the attribute.</p>
* @return The context attribute key.
*/
- public String getFromKey() {
+ public K getFromKey() {
return (this.fromKey);
@@ -55,7 +57,7 @@ public class RemoveCommand<C extends Con
*
* @param fromKey The new key
*/
- public void setFromKey(String fromKey) {
+ public void setFromKey(K fromKey) {
this.fromKey = fromKey;
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogBase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogBase.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogBase.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogBase.java Mon Feb 13 21:19:07 2012
@@ -21,9 +21,9 @@ import static java.util.Collections.unmo
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+
import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
/**
@@ -32,12 +32,16 @@ import org.apache.commons.chain.Context;
*
* <p>This implementation is thread-safe.</p>
*
+ * @param <K> the type of keys maintained by the context associated with this catalog
+ * @param <V> the type of mapped values
+ * @param <C> Type of the context associated with this catalog
+ *
* @author Craig R. McClanahan
* @author Matthew J. Sgarlata
* @version $Revision$ $Date$
*/
-public class CatalogBase implements Catalog {
+public class CatalogBase<K, V, C extends Map<K, V>> implements Catalog<K, V, C> {
// ----------------------------------------------------- Instance Variables
@@ -46,7 +50,8 @@ public class CatalogBase implements Cata
/**
* <p>The map of named {@link Command}s, keyed by name.
*/
- private final Map<String, Command<? extends Context>> commands = new ConcurrentHashMap<String, Command<? extends Context>>();
+ private final Map<String, Command<K, V, C>> commands =
+ new ConcurrentHashMap<String, Command<K, V, C>>();
// --------------------------------------------------------- Constructors
@@ -64,7 +69,7 @@ public class CatalogBase implements Cata
*
* @since Chain 1.1
*/
- public CatalogBase( Map<String, Command<? extends Context>> commands ) {
+ public CatalogBase(Map<String, Command<K, V, C>> commands ) {
this.commands.putAll( commands );
}
@@ -76,12 +81,11 @@ public class CatalogBase implements Cata
* to the set of named commands known to this {@link Catalog},
* replacing any previous command for that name.
*
- * @param <C> Type of the context associated with this command
* @param name Name of the new command
* @param command {@link Command} to be returned
* for later lookups on this name
*/
- public <C extends Context> void addCommand(String name, Command<C> command) {
+ public void addCommand(String name, Command<K, V, C> command) {
commands.put(name, command);
@@ -91,15 +95,13 @@ public class CatalogBase implements Cata
* <p>Return the {@link Command} associated with the
* specified name, if any; otherwise, return <code>null</code>.</p>
*
- * @param <C> Type of the context associated with this command
* @param name Name for which a {@link Command}
* should be retrieved
* @return The Command associated with the specified name.
*/
- public Command<? extends Context> getCommand(String name) {
+ public Command<K, V, C> getCommand(String name) {
- Command<? extends Context> command = commands.get(name);
- return command;
+ return commands.get(name);
}
@@ -109,7 +111,7 @@ public class CatalogBase implements Cata
* @return The map of named {@link Command}s, keyed by name.
* @since 2.0
*/
- public Map<String, Command<? extends Context>> getCommands() {
+ public Map<String, Command<K, V, C>> getCommands() {
return unmodifiableMap(commands);
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogFactoryBase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogFactoryBase.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogFactoryBase.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/CatalogFactoryBase.java Mon Feb 13 21:19:07 2012
@@ -20,6 +20,7 @@ package org.apache.commons.chain.impl;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+
import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.CatalogFactory;
@@ -30,7 +31,7 @@ import org.apache.commons.chain.CatalogF
* @version $Revision$ $Date$
*/
-public class CatalogFactoryBase extends CatalogFactory {
+public class CatalogFactoryBase<K, V, C extends Map<K, V>> extends CatalogFactory<K, V, C> {
// ----------------------------------------------------------- Constructors
@@ -49,14 +50,14 @@ public class CatalogFactoryBase extends
/**
* <p>The default {@link Catalog} for this {@link CatalogFactory}.</p>
*/
- private Catalog catalog = null;
+ private Catalog<K, V, C> catalog = null;
/**
* <p>Map of named {@link Catalog}s, keyed by catalog name.</p>
*/
- private final Map<String, Catalog> catalogs =
- new ConcurrentHashMap<String, Catalog>();
+ private final Map<String, Catalog<K, V, C>> catalogs =
+ new ConcurrentHashMap<String, Catalog<K, V, C>>();
// --------------------------------------------------------- Public Methods
@@ -68,7 +69,7 @@ public class CatalogFactoryBase extends
*
* @return the default Catalog instance
*/
- public Catalog getCatalog() {
+ public Catalog<K, V, C> getCatalog() {
return catalog;
@@ -80,7 +81,7 @@ public class CatalogFactoryBase extends
*
* @param catalog the default Catalog instance
*/
- public void setCatalog(Catalog catalog) {
+ public void setCatalog(Catalog<K, V, C> catalog) {
this.catalog = catalog;
@@ -94,7 +95,8 @@ public class CatalogFactoryBase extends
* @param name the name of the Catalog to retrieve
* @return the specified Catalog
*/
- public Catalog getCatalog(String name) {
+ @Override
+ public Catalog<K, V, C> getCatalog(String name) {
return catalogs.get(name);
@@ -108,7 +110,7 @@ public class CatalogFactoryBase extends
* @param name the name of the Catalog to add
* @param catalog the Catalog to add
*/
- public void addCatalog(String name, Catalog catalog) {
+ public void addCatalog(String name, Catalog<K, V, C> catalog) {
catalogs.put(name, catalog);
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ChainBase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ChainBase.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ChainBase.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ChainBase.java Mon Feb 13 21:19:07 2012
@@ -20,6 +20,7 @@ package org.apache.commons.chain.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import org.apache.commons.chain.Chain;
import org.apache.commons.chain.Command;
@@ -30,13 +31,15 @@ import org.apache.commons.chain.Filter;
/**
* <p>Convenience base class for {@link Chain} implementations.</p>
*
- * @param <C> Type of the context associated with this command
+ * @param <K> the type of keys maintained by the context associated with this chain
+ * @param <V> the type of mapped values
+ * @param <C> Type of the context associated with this chain
*
* @author Craig R. McClanahan
* @version $Revision$ $Date$
*/
-public class ChainBase<C extends Context> implements Chain<C> {
+public class ChainBase<K, V, C extends Map<K, V>> implements Chain<K, V, C> {
// ----------------------------------------------------------- Constructors
@@ -59,7 +62,7 @@ public class ChainBase<C extends Context
* @exception IllegalArgumentException if <code>command</code>
* is <code>null</code>
*/
- public ChainBase(Command<C> command) {
+ public ChainBase(Command<K, V, C> command) {
addCommand(command);
@@ -76,7 +79,7 @@ public class ChainBase<C extends Context
* or one of the individual {@link Command} elements,
* is <code>null</code>
*/
- public ChainBase(Command<C>[] commands) {
+ public ChainBase(Command<K, V, C>[] commands) {
if (commands == null) {
throw new IllegalArgumentException();
@@ -98,7 +101,7 @@ public class ChainBase<C extends Context
* or one of the individual {@link Command} elements,
* is <code>null</code>
*/
- public ChainBase(Collection<Command<C>> commands) {
+ public ChainBase(Collection<Command<K, V, C>> commands) {
if (commands == null) {
throw new IllegalArgumentException();
@@ -116,7 +119,7 @@ public class ChainBase<C extends Context
* the order in which they may delegate processing to the remainder of
* the {@link Chain}.</p>
*/
- private final List<Command<C>> commands = new ArrayList<Command<C>>();
+ private final List<Command<K, V, C>> commands = new ArrayList<Command<K, V, C>>();
/**
@@ -138,7 +141,7 @@ public class ChainBase<C extends Context
* is <code>null</code>
* @exception IllegalStateException if no further configuration is allowed
*/
- public void addCommand(Command<C> command) {
+ public void addCommand(Command<K, V, C> command) {
if (command == null) {
throw new IllegalArgumentException();
@@ -206,7 +209,7 @@ public class ChainBase<C extends Context
if (commands.get(j) instanceof Filter) {
try {
result =
- ((Filter<C>) commands.get(j)).postprocess(context,
+ ((Filter<K, V, C>) commands.get(j)).postprocess(context,
saveException);
if (result) {
handled = true;
@@ -248,7 +251,7 @@ public class ChainBase<C extends Context
* {@link Chain}. This method is package private, and is used only
* for the unit tests.</p>
*/
- List<Command<C>> getCommands() {
+ List<Command<K, V, C>> getCommands() {
return (commands);
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextBase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextBase.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextBase.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextBase.java Mon Feb 13 21:19:07 2012
@@ -29,7 +29,6 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.chain.Context;
@@ -52,15 +51,14 @@ import org.apache.commons.chain.Context;
* @version $Revision$ $Date$
*/
-public class ContextBase extends ConcurrentHashMap<String, Object>
- implements Context {
+public class ContextBase extends ContextMap<String, Object> {
// ------------------------------------------------------------ Constructors
/**
- *
+ *
*/
private static final long serialVersionUID = -3137668177106072122L;
@@ -127,7 +125,7 @@ public class ContextBase extends Concurr
* key that is actually a property. This value is used to ensure that
* <code>equals()</code> comparisons will always fail.</p>
*/
- private static Object singleton;
+ private static final Object singleton;
static {
@@ -328,7 +326,7 @@ public class ContextBase extends Concurr
public Object put(String key, Object value) {
/*
* ConcurrentHashMap doesn't accept null values, see
- * http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html#put(K, V)
+ * http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html#put(String, Object)
*/
if (value == null) {
if (containsKey(key)) {
@@ -363,20 +361,6 @@ public class ContextBase extends Concurr
/**
- * {@inheritDoc}
- */
- public <T> T retrieve(String key) {
- Object valueObject = get(key);
- if (valueObject == null) {
- return null;
- }
- @SuppressWarnings("unchecked") // will throw ClassCastException if type are not assignable
- T value = (T) valueObject;
- return value;
- }
-
-
- /**
* <p>Override the default <code>Map</code> behavior to call the
* <code>put()</code> method individually for each key-value pair
* in the specified <code>Map</code>.</p>
@@ -536,7 +520,7 @@ public class ContextBase extends Concurr
("Property '" + descriptor.getName()
+ "' is not readable");
}
- return (method.invoke(this, zeroParams));
+ return method.invoke(this, zeroParams);
} catch (Exception e) {
throw new UnsupportedOperationException
("Exception reading property '" + descriptor.getName()
@@ -623,24 +607,23 @@ public class ContextBase extends Concurr
*/
private class EntrySetImpl extends AbstractSet<Entry<String, Object>> {
- @Override
- public void clear() {
+ @Override
+ public void clear() {
ContextBase.this.clear();
}
- @Override
- public boolean contains(Object obj) {
- if (!(obj instanceof Map.Entry &&
- ((Map.Entry)obj).getKey() instanceof String)) {
+ @Override
+ public boolean contains(Object obj) {
+ if (!(obj instanceof Map.Entry)) {
return (false);
}
-
+
/* The contains method is expecting the search type to be of the
* same type stored. This contract is enforced as a precondition.
* So we can safely suppress type safety warnings below. */
@SuppressWarnings("unchecked")
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) obj;
- Entry actual = ContextBase.this.entry(entry.getKey());
+ Entry<String, Object> actual = ContextBase.this.entry(entry.getKey());
if (actual != null) {
return (actual.equals(entry));
} else {
@@ -648,20 +631,19 @@ public class ContextBase extends Concurr
}
}
- @Override
- public boolean isEmpty() {
+ @Override
+ public boolean isEmpty() {
return (ContextBase.this.isEmpty());
}
- public Iterator<Entry<String, Object>> iterator() {
+ public Iterator<Entry<String, Object>> iterator() {
return (ContextBase.this.entriesIterator());
}
- @Override
- public boolean remove(Object obj) {
- if (obj instanceof Map.Entry &&
- ((Map.Entry)obj).getKey() instanceof String ) {
-
+ @Override
+ public boolean remove(Object obj) {
+ if (obj instanceof Map.Entry) {
+
/* The remove method is expecting an input of the the same
* type as the entry set. This precondition is checked above,
* so we can safely suppress the unchecked warnings. */
@@ -673,7 +655,7 @@ public class ContextBase extends Concurr
}
}
- public int size() {
+ public int size() {
return (ContextBase.this.size());
}
@@ -719,14 +701,14 @@ public class ContextBase extends Concurr
private String key;
private Object value;
- @Override
- public boolean equals(Object obj) {
+ @Override
+ public boolean equals(Object obj) {
if (obj == null) {
return (false);
} else if (!(obj instanceof Map.Entry)) {
return (false);
}
- Map.Entry entry = (Map.Entry) obj;
+ Map.Entry<?, ?> entry = (Map.Entry<?, ?>) obj;
if (key == null) {
return (entry.getKey() == null);
}
@@ -762,8 +744,8 @@ public class ContextBase extends Concurr
return (previous);
}
- @Override
- public String toString() {
+ @Override
+ public String toString() {
return getKey() + "=" + getValue();
}
}
@@ -775,13 +757,13 @@ public class ContextBase extends Concurr
*/
private class ValuesImpl extends AbstractCollection<Object> {
- @Override
- public void clear() {
+ @Override
+ public void clear() {
ContextBase.this.clear();
}
- @Override
- public boolean contains(Object obj) {
+ @Override
+ public boolean contains(Object obj) {
if (!(obj instanceof Map.Entry)) {
return (false);
}
@@ -789,32 +771,31 @@ public class ContextBase extends Concurr
return (ContextBase.this.containsValue(entry.getValue()));
}
- @Override
- public boolean isEmpty() {
+ @Override
+ public boolean isEmpty() {
return (ContextBase.this.isEmpty());
}
- public Iterator<Object> iterator() {
+ public Iterator<Object> iterator() {
return (ContextBase.this.valuesIterator());
}
- @Override
- public boolean remove(Object obj) {
- if (obj instanceof Map.Entry &&
- ((Map.Entry)obj).getKey() instanceof String) {
-
+ @Override
+ public boolean remove(Object obj) {
+ if (obj instanceof Map.Entry) {
+
/* We are expecting the passed entry to be of a type
* Entry<String, Object>. This is checked in the precondition
* above, so we can safely suppress unchecked warnings. */
@SuppressWarnings("unchecked")
- Map.Entry<String, Object> entry = (Map.Entry) obj;
+ Map.Entry<String, Object> entry = (Map.Entry<String, Object>) obj;
return (ContextBase.this.remove(entry));
} else {
return (false);
}
}
- public int size() {
+ public int size() {
return (ContextBase.this.size());
}
Added: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java?rev=1243699&view=auto
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java (added)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java Mon Feb 13 21:19:07 2012
@@ -0,0 +1,89 @@
+/*
+ * 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.commons.chain.impl;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.chain.Context;
+
+/**
+ * Convenience base class for {@link Context} implementations.
+ *
+ * @param <K> the type of keys maintained by the context associated with this context
+ * @param <V> the type of mapped values
+ *
+ * @since 2.0
+ */
+public class ContextMap<K, V> extends ConcurrentHashMap<K, V> implements Context<K, V> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6980950395387220980L;
+
+ /**
+ * Creates a new, empty Context with a default initial capacity, load factor, and concurrencyLevel.
+ */
+ public ContextMap() {
+ super();
+ }
+
+ /**
+ * Creates a new, empty Context with the specified initial capacity, and with default load factor and concurrencyLevel
+ *
+ * @param initialCapacity the initial capacity.
+ */
+ public ContextMap(int initialCapacity) {
+ super(initialCapacity);
+ }
+
+ /**
+ * Creates a new, empty Context with the specified initial capacity, load factor, and concurrency level.
+ *
+ * @param initialCapacity the initial capacity.
+ * @param loadFactor the load factor threshold, used to control resizing.
+ * @param concurrencyLevel the estimated number of concurrently updating threads.
+ */
+ public ContextMap(int initialCapacity, float loadFactor, int concurrencyLevel) {
+ super(initialCapacity, loadFactor, concurrencyLevel);
+ }
+
+ /**
+ * Creates a new Context with the same mappings as the given map.
+ *
+ * @param t Map whose key-value pairs are added
+ */
+ public ContextMap(Map<? extends K, ? extends V> t) {
+ super(t);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public <T extends V> T retrieve(K key) {
+ V valueObject = get(key);
+ if (valueObject == null) {
+ return null;
+ }
+ // will throw ClassCastException if type are not assignable anyway
+ @SuppressWarnings("unchecked")
+ T value = (T) valueObject;
+ return value;
+ }
+
+}
Propchange: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/impl/ContextMap.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractGetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractGetLocaleCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractGetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractGetLocaleCommand.java Mon Feb 13 21:19:07 2012
@@ -33,7 +33,8 @@ import org.apache.commons.chain.Context;
* @version $Revision$ $Date$
*/
-public abstract class AbstractGetLocaleCommand<C extends Context> implements Command<C> {
+public abstract class AbstractGetLocaleCommand<C extends WebContext>
+ implements Command<String, Object, C> {
// -------------------------------------------------------------- Properties
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractSetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractSetLocaleCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractSetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/AbstractSetLocaleCommand.java Mon Feb 13 21:19:07 2012
@@ -34,7 +34,8 @@ import org.apache.commons.chain.Context;
* @version $Revision$ $Date$
*/
-public abstract class AbstractSetLocaleCommand<C extends Context> implements Command<C> {
+public abstract class AbstractSetLocaleCommand<C extends WebContext>
+ implements Command<String, Object, C> {
// -------------------------------------------------------------- Properties
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainListener.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainListener.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainListener.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainListener.java Mon Feb 13 21:19:07 2012
@@ -29,6 +29,7 @@ import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.CatalogFactory;
import org.apache.commons.chain.config.ConfigParser;
import org.apache.commons.chain.impl.CatalogBase;
+import org.apache.commons.chain.web.servlet.ServletWebContext;
import org.apache.commons.digester.RuleSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -180,11 +181,11 @@ public class ChainListener implements Se
String webResources = context.getInitParameter(CONFIG_WEB_RESOURCE);
// Retrieve or create the Catalog instance we may be updating
- Catalog catalog = null;
+ Catalog<String, Object, ServletWebContext> catalog = null;
if (attr != null) {
- catalog = (Catalog) context.getAttribute(attr);
+ catalog = (Catalog<String, Object, ServletWebContext>) context.getAttribute(attr);
if (catalog == null) {
- catalog = new CatalogBase();
+ catalog = new CatalogBase<String, Object, ServletWebContext>();
}
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainServlet.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainServlet.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainServlet.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/ChainServlet.java Mon Feb 13 21:19:07 2012
@@ -28,6 +28,7 @@ import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.CatalogFactory;
import org.apache.commons.chain.config.ConfigParser;
import org.apache.commons.chain.impl.CatalogBase;
+import org.apache.commons.chain.web.servlet.ServletWebContext;
import org.apache.commons.digester.RuleSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -100,7 +101,7 @@ public class ChainServlet extends HttpSe
/**
- *
+ *
*/
private static final long serialVersionUID = -6545081938506661333L;
@@ -182,11 +183,11 @@ public class ChainServlet extends HttpSe
String webResources = context.getInitParameter(CONFIG_WEB_RESOURCE);
// Retrieve or create the Catalog instance we may be updating
- Catalog catalog = null;
+ Catalog<String, Object, ServletWebContext> catalog = null;
if (attr != null) {
- catalog = (Catalog) context.getAttribute(attr);
+ catalog = (Catalog<String, Object, ServletWebContext>) context.getAttribute(attr);
if (catalog == null) {
- catalog = new CatalogBase();
+ catalog = new CatalogBase<String, Object, ServletWebContext>();
}
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/WebContext.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/WebContext.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/WebContext.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/WebContext.java Mon Feb 13 21:19:07 2012
@@ -43,7 +43,7 @@ import org.apache.commons.chain.impl.Con
public abstract class WebContext extends ContextBase {
/**
- *
+ *
*/
private static final long serialVersionUID = 6804961872140299027L;
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesGetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesGetLocaleCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesGetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesGetLocaleCommand.java Mon Feb 13 21:19:07 2012
@@ -18,7 +18,9 @@ package org.apache.commons.chain.web.fac
import java.util.Locale;
+
import javax.faces.context.FacesContext;
+
import org.apache.commons.chain.Context;
import org.apache.commons.chain.web.AbstractGetLocaleCommand;
@@ -30,7 +32,8 @@ import org.apache.commons.chain.web.Abst
* @param <C> Type of the context associated with this command
*/
-public class FacesGetLocaleCommand<C extends Context> extends AbstractGetLocaleCommand<C> {
+public class FacesGetLocaleCommand
+ extends AbstractGetLocaleCommand<FacesWebContext> {
// ------------------------------------------------------- Protected Methods
@@ -42,7 +45,7 @@ public class FacesGetLocaleCommand<C ext
* @param context The {@link Context} we are operating on.
* @return The Locale for the request.
*/
- protected Locale getLocale(C context) {
+ protected Locale getLocale(FacesWebContext context) {
FacesContext fcontext = (FacesContext)
context.get("context");
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesSetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesSetLocaleCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesSetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesSetLocaleCommand.java Mon Feb 13 21:19:07 2012
@@ -30,7 +30,8 @@ import org.apache.commons.chain.web.Abst
* @param <C> Type of the context associated with this command
*/
-public class FacesSetLocaleCommand<C extends Context> extends AbstractSetLocaleCommand<C> {
+public class FacesSetLocaleCommand
+ extends AbstractSetLocaleCommand<FacesWebContext> {
// ------------------------------------------------------- Protected Methods
@@ -42,7 +43,7 @@ public class FacesSetLocaleCommand<C ext
* @param context The {@link Context} we are operating on.
* @param locale The Locale for the request.
*/
- protected void setLocale(Context context, Locale locale) {
+ protected void setLocale(FacesWebContext context, Locale locale) {
FacesContext fcontext = (FacesContext)
context.get("context");
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesWebContext.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesWebContext.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesWebContext.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/faces/FacesWebContext.java Mon Feb 13 21:19:07 2012
@@ -42,7 +42,7 @@ public class FacesWebContext extends Web
/**
- *
+ *
*/
private static final long serialVersionUID = -1429681424077509130L;
@@ -129,11 +129,11 @@ public class FacesWebContext extends Web
* @return Application scope Map.
*/
public Map<String, Object> getApplicationScope() {
-
+
@SuppressWarnings("unchecked") // Assume faces is following contract
- Map<String, Object> scope = (Map<String, Object>)
+ Map<String, Object> scope = (Map<String, Object>)
context.getExternalContext().getApplicationMap();
-
+
return (scope);
}
@@ -145,11 +145,11 @@ public class FacesWebContext extends Web
* @return Header values Map.
*/
public Map<String, String> getHeader() {
-
+
@SuppressWarnings("unchecked") // Assume faces is following contract
Map<String, String> headers = (Map<String, String>)
context.getExternalContext().getRequestHeaderMap();
-
+
return (headers);
}
@@ -161,11 +161,11 @@ public class FacesWebContext extends Web
* @return Header values Map.
*/
public Map<String, String[]> getHeaderValues() {
-
+
@SuppressWarnings("unchecked") // Assume faces is following contract
Map<String, String[]> headerValues = (Map<String, String[]>)
- context.getExternalContext().getRequestHeaderValuesMap();
-
+ context.getExternalContext().getRequestHeaderValuesMap();
+
return (headerValues);
}
@@ -177,11 +177,11 @@ public class FacesWebContext extends Web
* @return Initialization parameter Map.
*/
public Map<String, String> getInitParam() {
-
+
@SuppressWarnings("unchecked") // Assume faces is following contract
Map<String, String> initParams = (Map<String, String>)
context.getExternalContext().getInitParameterMap();
-
+
return (initParams);
}
@@ -195,8 +195,8 @@ public class FacesWebContext extends Web
public Map<String, String> getParam() {
@SuppressWarnings("unchecked")
Map<String, String> params = (Map<String, String>)
- context.getExternalContext().getRequestParameterMap();
-
+ context.getExternalContext().getRequestParameterMap();
+
return (params);
}
@@ -211,7 +211,7 @@ public class FacesWebContext extends Web
@SuppressWarnings("unchecked") // Assume faces is following contract
Map<String, String[]> paramValues = (Map<String, String[]>)
context.getExternalContext().getRequestParameterValuesMap();
-
+
return (paramValues);
}
@@ -241,8 +241,8 @@ public class FacesWebContext extends Web
if (cookieObj instanceof Cookie) {
// See comment above about type safety check
@SuppressWarnings("unchecked")
- Map<String, Cookie> cookieMap = Collections.checkedMap(
- (Map)facesCookieMap, String.class, Cookie.class);
+ Map<String, Cookie> cookieMap = (Map<String, Cookie>) Collections.checkedMap(
+ (Map) facesCookieMap, String.class, Cookie.class);
return cookieMap;
} else {
@@ -262,11 +262,11 @@ public class FacesWebContext extends Web
* @return Request scope Map.
*/
public Map<String, Object> getRequestScope() {
-
+
@SuppressWarnings("unchecked") // Assume faces is following contract
Map<String, Object> scope = (Map<String, Object>)
context.getExternalContext().getRequestMap();
-
+
return (scope);
}
@@ -278,11 +278,11 @@ public class FacesWebContext extends Web
* @return Session scope Map.
*/
public Map<String, Object> getSessionScope() {
-
+
@SuppressWarnings("unchecked") // Assume faces is following contract
Map<String, Object> scope = (Map<String, Object>)
context.getExternalContext().getSessionMap();
-
+
return (scope);
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletGetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletGetLocaleCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletGetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletGetLocaleCommand.java Mon Feb 13 21:19:07 2012
@@ -30,7 +30,8 @@ import org.apache.commons.chain.web.Abst
* @param <C> Type of the context associated with this command
*/
-public class PortletGetLocaleCommand<C extends Context> extends AbstractGetLocaleCommand<C> {
+public class PortletGetLocaleCommand
+ extends AbstractGetLocaleCommand<PortletWebContext> {
// ------------------------------------------------------- Protected Methods
@@ -42,7 +43,7 @@ public class PortletGetLocaleCommand<C e
* @param context The {@link Context} we are operating on.
* @return The Locale for the request.
*/
- protected Locale getLocale(C context) {
+ protected Locale getLocale(PortletWebContext context) {
PortletRequest request = (PortletRequest)
context.get("request");
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletSetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletSetLocaleCommand.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletSetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/portlet/PortletSetLocaleCommand.java Mon Feb 13 21:19:07 2012
@@ -31,7 +31,8 @@ import org.apache.commons.chain.web.Abst
*
*/
-public class PortletSetLocaleCommand<C extends Context> extends AbstractSetLocaleCommand<C> {
+public class PortletSetLocaleCommand
+ extends AbstractSetLocaleCommand<PortletWebContext> {
// ------------------------------------------------------- Protected Methods
@@ -43,7 +44,7 @@ public class PortletSetLocaleCommand<C e
* @param context The {@link Context} we are operating on.
* @param locale The Locale for the request.
*/
- protected void setLocale(Context context, Locale locale) {
+ protected void setLocale(PortletWebContext context, Locale locale) {
// PortletResponse response = (PortletResponse)
// context.get("response");
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ChainProcessor.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ChainProcessor.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ChainProcessor.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/ChainProcessor.java Mon Feb 13 21:19:07 2012
@@ -18,9 +18,12 @@ package org.apache.commons.chain.web.ser
import java.io.IOException;
+
+import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+
import org.apache.commons.chain.Catalog;
import org.apache.commons.chain.CatalogFactory;
import org.apache.commons.chain.Command;
@@ -61,7 +64,7 @@ public class ChainProcessor extends Chai
/**
- *
+ *
*/
private static final long serialVersionUID = -6817532768031279260L;
@@ -131,6 +134,7 @@ public class ChainProcessor extends Chai
/**
* <p>Clean up as this application is shut down.</p>
*/
+ @Override
public void destroy() {
super.destroy();
@@ -146,6 +150,7 @@ public class ChainProcessor extends Chai
*
* @exception ServletException if an initialization error occurs
*/
+ @Override
public void init() throws ServletException {
super.init();
@@ -170,27 +175,47 @@ public class ChainProcessor extends Chai
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet exception occurs
*/
+ @Override
public void service(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
ServletWebContext context =
new ServletWebContext(getServletContext(), request, response);
- Catalog theCatalog = null;
+ Catalog<String, Object, ServletWebContext> theCatalog = null;
+
if (attribute != null) {
- theCatalog = (Catalog) getServletContext().getAttribute
- (this.attribute);
+ ServletContext servletContext = getServletContext();
+ Object testAttribute = servletContext.getAttribute(this.attribute);
+
+ if (testAttribute instanceof Catalog) {
+ /* "attribute" should always contain an instance of a
+ * Catalog class according to the historical chain convention.
+ * Although, we now double-check that it is in fact a catalog
+ * here, we still need to suppress warnings because of the
+ * type erasure of generics. */
+ @SuppressWarnings("unchecked")
+ Catalog<String, Object, ServletWebContext> attributeCatalog =
+ (Catalog<String, Object, ServletWebContext>)testAttribute;
+ theCatalog = attributeCatalog;
+ }
+ else {
+ String msg = "The object stored as the attribute [" +
+ attribute + "] was not of the expected type [" +
+ "Catalog]";
+ throw new IllegalArgumentException(msg);
+ }
} else if (catalog != null) {
- theCatalog = CatalogFactory.getInstance().getCatalog(catalog);
+ theCatalog = CatalogFactory.<String, Object, ServletWebContext>getInstance().getCatalog(catalog);
} else {
- theCatalog = CatalogFactory.getInstance().getCatalog();
+ theCatalog = CatalogFactory.<String, Object, ServletWebContext>getInstance().getCatalog();
}
if (attribute == null) {
request.setAttribute(CATALOG_DEFAULT, theCatalog);
}
- Command<ServletWebContext> command = theCatalog.getCommand(this.command);
+ Command<String, Object, ServletWebContext> cmd = theCatalog.getCommand(this.command);
try {
- command.execute(context);
+ cmd.execute(context);
} catch (Exception e) {
throw new ServletException(e);
}
Modified: commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/PathInfoMapper.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/PathInfoMapper.java?rev=1243699&r1=1243698&r2=1243699&view=diff
==============================================================================
--- commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/PathInfoMapper.java (original)
+++ commons/proper/chain/trunk/src/main/java/org/apache/commons/chain/web/servlet/PathInfoMapper.java Mon Feb 13 21:19:07 2012
@@ -37,7 +37,7 @@ import org.apache.commons.chain.generic.
* @author Craig R. McClanahan
*/
-public class PathInfoMapper<C extends Context> extends LookupCommand<C> {
+public class PathInfoMapper extends LookupCommand<String, Object, ServletWebContext> {
// ------------------------------------------------------ Instance Variables
@@ -96,11 +96,9 @@ public class PathInfoMapper<C extends Co
* @since Chain 1.2
*/
@Override
- protected String getCommandName(Context context) {
-
+ protected String getCommandName(ServletWebContext context) {
// Look up the extra path information for this request
- ServletWebContext swcontext = (ServletWebContext) context;
- HttpServletRequest request = swcontext.getRequest();
+ HttpServletRequest request = context.getRequest();
String pathInfo = (String)
request.getAttribute("javax.servlet.include.path_info");
if (pathInfo == null) {
@@ -122,8 +120,11 @@ public class PathInfoMapper<C extends Co
* @since Chain 1.2
*/
@Override
- protected Catalog getCatalog(C context) {
- Catalog catalog = (Catalog) context.get(getCatalogName());
+ protected Catalog<String, Object, ServletWebContext> getCatalog(ServletWebContext context) {
+ /* Assume that the object returned will be a catalog because of chain's
+ * historical contract. */
+ @SuppressWarnings("unchecked")
+ Catalog<String, Object, ServletWebContext> catalog = (Catalog<String, Object, ServletWebContext>) context.get(getCatalogName());
if (catalog == null) {
catalog = super.getCatalog(context);
}