Interface Command<C extends Context>
- Type Parameters:
C
- Type of the context associated with this command
- All Known Implementing Classes:
ChainBase
,CopyCommand
,DispatchCommand
,DispatchLookupCommand
,FacesGetLocaleCommand
,FacesGetLocaleCommand
,FacesSetLocaleCommand
,FacesSetLocaleCommand
,GetLocaleCommand
,GetLocaleCommand
,LookupCommand
,PathInfoMapper
,PathInfoMapper
,PortletGetLocaleCommand
,PortletSetLocaleCommand
,RemoveCommand
,RequestParameterMapper
,RequestParameterMapper
,ServletGetLocaleCommand
,ServletGetLocaleCommand
,ServletPathMapper
,ServletPathMapper
,ServletSetLocaleCommand
,ServletSetLocaleCommand
,SetLocaleCommand
,SetLocaleCommand
Command
encapsulates a unit of processing work to be
performed, whose purpose is to examine and/or modify the state of a
transaction that is represented by a Context
. Individual
Command
s can be assembled into a Chain
, which allows
them to either complete the required processing or delegate further
processing to the next Command
in the Chain
.
Command
implementations should be designed in a thread-safe
manner, suitable for inclusion in multiple Chain
s that might be
processed by different threads simultaneously. In general, this implies
that Command
classes should not maintain state information in
instance variables. Instead, state information should be maintained via
suitable modifications to the attributes of the Context
that is
passed to the execute()
command.
Command
implementations typically retrieve and store state
information in the Context
instance that is passed as a parameter
to the execute()
method, using particular keys into the
Map
that can be acquired via Context.getAttributes()
. To
improve interoperability of Command
implementations, a useful
design pattern is to expose the key values used as JavaBeans properties
of the Command
implementation class itself. For example, a
Command
that requires an input and an output key might implement
the following properties:
private String inputKey = "input"; public String getInputKey() { return this.inputKey; } public void setInputKey(String inputKey) { this.inputKey = inputKey; } private String outputKey = "output"; public String getOutputKey() { return this.outputKey; } public void setOutputKey(String outputKey) { this.outputKey = outputKey; }
And the operation of accessing the "input" information in the context would be executed by calling:
String input = (String) context.get(getInputKey());
instead of hard coding the attribute name. The use of the "Key"
suffix on such property names is a useful convention to identify properties
being used in this fashion, as opposed to JavaBeans properties that simply
configure the internal operation of this Command
.
- Version:
- $Revision$ $Date$
- Author:
- Craig R. McClanahan
-
Field Summary
Modifier and TypeFieldDescriptionstatic final boolean
static final boolean
Commands should returnPROCESSING_COMPLETE
if the processing of the givenContext
has been completed. -
Method Summary
-
Field Details
-
CONTINUE_PROCESSING
Commands should returnCONTINUE_PROCESSING
if the processing of the givenContext
should be delegated to a subsequentCommand
in an enclosingChain
.- Since:
- Chain 1.1
- See Also:
-
PROCESSING_COMPLETE
Commands should returnPROCESSING_COMPLETE
if the processing of the givenContext
has been completed.- Since:
- Chain 1.1
- See Also:
-
-
Method Details
-
execute
Execute a unit of processing work to be performed. ThisCommand
may either complete the required processing and returntrue
, or delegate remaining processing to the nextCommand
in aChain
containing thisCommand
by returningfalse
.- Parameters:
context
- TheContext
to be processed by thisCommand
- Returns:
true
if the processing of thisContext
has been completed, orfalse
if the processing of thisContext
should be delegated to a subsequentCommand
in an enclosingChain
- Throws:
Exception
- general purpose exception return to indicate abnormal terminationIllegalArgumentException
- ifcontext
isnull
-