org.apache.struts.chain
Class ComposableRequestProcessor

java.lang.Object
  extended by org.apache.struts.action.RequestProcessor
      extended by org.apache.struts.chain.ComposableRequestProcessor

public class ComposableRequestProcessor
extends RequestProcessor

ComposableRequestProcessor uses the Chain Of Resposibility design pattern (as implemented by the commons-chain package in Jakarta Commons) to support external configuration of command chains to be used. It is configured via the following context initialization parameters:

Since:
Struts 1.1
Version:
$Rev: 471754 $ $Date: 2005-11-12 13:01:44 -0500 (Sat, 12 Nov 2005) $

Field Summary
static String ACTION_CONTEXT_CLASS
           Token for ActionContext clazss so that it can be stored in the ControllerConfig.
protected  org.apache.commons.chain.Catalog catalog
          The Catalog containing all of the available command chains for this module.
protected  org.apache.commons.chain.CatalogFactory catalogFactory
          The CatalogFactory from which catalog containing the the base request-processing Command will be retrieved.
protected  org.apache.commons.chain.Command command
          The Command to be executed for each request.
protected static Log LOG
          The Log instance for this class.
 
Fields inherited from class org.apache.struts.action.RequestProcessor
actions, INCLUDE_PATH_INFO, INCLUDE_SERVLET_PATH, log, moduleConfig, servlet
 
Constructor Summary
ComposableRequestProcessor()
           
 
Method Summary
protected  ActionContext contextInstance(HttpServletRequest request, HttpServletResponse response)
          Provide the initialized ActionContext instance which will be used by this request.
protected  ActionContext createActionContextInstance(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response)
          Create a new instance of ActionContext according to configuration.
 void destroy()
          Clean up in preparation for a shutdown of this application.
 void init(ActionServlet servlet, ModuleConfig moduleConfig)
          Initialize this request processor instance.
protected  void initCatalogFactory(ActionServlet servlet, ModuleConfig moduleConfig)
           Establish the CatalogFactory which will be used to look up the catalog which has the request processing command.
protected  void initializeActionContext(ActionContext context)
          Set common properties on the given ActionContext instance so that commands in the chain can count on their presence.
 void process(HttpServletRequest request, HttpServletResponse response)
          Process an HttpServletRequest and create the corresponding HttpServletResponse.
protected  HttpServletRequest processMultipart(HttpServletRequest request)
          If this is a multipart request, wrap it with a special wrapper.
 void setCatalogFactory(org.apache.commons.chain.CatalogFactory catalogFactory)
          Set the CatalogFactory instance which should be used to find the request-processing command.
 
Methods inherited from class org.apache.struts.action.RequestProcessor
doForward, doInclude, getInternal, getServletContext, internalModuleRelativeForward, internalModuleRelativeInclude, processActionCreate, processActionForm, processActionPerform, processCachedMessages, processContent, processException, processForward, processForwardConfig, processInclude, processLocale, processMapping, processNoCache, processPath, processPopulate, processPreprocess, processRoles, processValidate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ACTION_CONTEXT_CLASS

public static final String ACTION_CONTEXT_CLASS

Token for ActionContext clazss so that it can be stored in the ControllerConfig.

See Also:
Constant Field Values

LOG

protected static final Log LOG

The Log instance for this class.


catalogFactory

protected org.apache.commons.chain.CatalogFactory catalogFactory

The CatalogFactory from which catalog containing the the base request-processing Command will be retrieved.


catalog

protected org.apache.commons.chain.Catalog catalog

The Catalog containing all of the available command chains for this module.


command

protected org.apache.commons.chain.Command command

The Command to be executed for each request.

Constructor Detail

ComposableRequestProcessor

public ComposableRequestProcessor()
Method Detail

destroy

public void destroy()

Clean up in preparation for a shutdown of this application.

Overrides:
destroy in class RequestProcessor

init

public void init(ActionServlet servlet,
                 ModuleConfig moduleConfig)
          throws ServletException

Initialize this request processor instance.

Overrides:
init in class RequestProcessor
Parameters:
servlet - The ActionServlet we are associated with
moduleConfig - The ModuleConfig we are associated with.
Throws:
ServletException - If an error occurs during initialization

initCatalogFactory

protected void initCatalogFactory(ActionServlet servlet,
                                  ModuleConfig moduleConfig)

Establish the CatalogFactory which will be used to look up the catalog which has the request processing command.

The base implementation simply calls CatalogFactory.getInstance(), unless the catalogFactory property of this object has already been set, in which case it is not changed.

Parameters:
servlet - The ActionServlet we are processing
moduleConfig - The ModuleConfig we are processing

process

public void process(HttpServletRequest request,
                    HttpServletResponse response)
             throws IOException,
                    ServletException

Process an HttpServletRequest and create the corresponding HttpServletResponse.

Overrides:
process in class RequestProcessor
Parameters:
request - The servlet request we are processing
response - The servlet response we are creating
Throws:
IOException - if an input/output error occurs
ServletException - if a processing exception occurs

contextInstance

protected ActionContext contextInstance(HttpServletRequest request,
                                        HttpServletResponse response)
                                 throws ServletException

Provide the initialized ActionContext instance which will be used by this request. Internally, this simply calls createActionContextInstance followed by initializeActionContext.

Parameters:
request - The servlet request we are processing
response - The servlet response we are creating
Returns:
Initiliazed ActionContext
Throws:
ServletException - if a processing exception occurs

createActionContextInstance

protected ActionContext createActionContextInstance(ServletContext servletContext,
                                                    HttpServletRequest request,
                                                    HttpServletResponse response)
                                             throws ServletException

Create a new instance of ActionContext according to configuration. If no alternative was specified at initialization, a new instance ServletActionContext is returned. If an alternative was specified using the ACTION_CONTEXT_CLASS property, then that value is treated as a classname, and an instance of that class is created. If that class implements the same constructor that ServletActionContext does, then that constructor will be used: ServletContext, HttpServletRequest, HttpServletResponse; otherwise, it is assumed that the class has a no-arguments constructor. If these constraints do not suit you, simply override this method in a subclass.

Parameters:
servletContext - The servlet context we are processing
request - The servlet request we are processing
response - The servlet response we are creating
Returns:
New instance of ActionContext
Throws:
ServletException - if a processing exception occurs

initializeActionContext

protected void initializeActionContext(ActionContext context)

Set common properties on the given ActionContext instance so that commands in the chain can count on their presence. Note that while this method does not require that its argument be an instance of ServletActionContext, at this time many common Struts commands will be expecting to receive an ActionContext which is also a ServletActionContext.

Parameters:
context - The ActionContext we are processing

processMultipart

protected HttpServletRequest processMultipart(HttpServletRequest request)

If this is a multipart request, wrap it with a special wrapper. Otherwise, return the request unchanged.

Overrides:
processMultipart in class RequestProcessor
Parameters:
request - The HttpServletRequest we are processing
Returns:
Original or wrapped request as appropriate

setCatalogFactory

public void setCatalogFactory(org.apache.commons.chain.CatalogFactory catalogFactory)

Set the CatalogFactory instance which should be used to find the request-processing command. In the base implementation, if this value is not already set, then it will be initialized when initCatalogFactory(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig) is called.

Parameters:
catalogFactory - Our CatalogFactory instance


Copyright © 2000-2008 Apache Software Foundation. All Rights Reserved.