You have a series of transformations and you need to chain them together, passing the output of one stage to the input of the next.
Create multiple implementations of Transformer
, and chain them together with
ChainedTransformer
. A ChainedTransformer
takes an array of Transformer
objects, passing the output of
each Transformer
to the next Transformer
in the chain. The following
example demonstrates a ChainedTransformer
with two Transformer
stages. The first stage, multiply
, multiplies a number by 100, and the
second stage, increment
, adds one to
the result from the first stage:
import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; Transformer multiply = new Transformer( ) { public Object transform(Object input) { Long number = (Long) input; return( new Long( number.longValue( ) * 100 ) ); } } Transformer increment = new Transformer( ) { public Object transform(Object input) { Long number = (Long) input; return( new Long( number.longValue( ) + 1 ) ); } } Transformer[] chainElements = new Transformer[] { multiply, increment }; Transformer chain = new ChainedTransformer( chainElements ); Long original = new Long( 34 ); Long result = chain.transform( original ); System.out.println( "Original: " + original ); System.out.println( "Result: " + result );
The Transformer
chain takes the
Long
instance original
and transforms it into a
result:
Original: 34 Result: 3401
Since a Transformer
leaves the
input parameter passed to transform(
)
intact, this two-stage ChainedTransformer
creates a new instance of
Long
for each stage in the ChainedTransformer
. A Long
is passed to the first stage, multiply
, which transforms 34 to 3400. The
result from the first stage, 3400, is then passed to the second stage,
increment
, which produces the final
Long
result, 3401. A real example
would involve more complex implementations of Transformer
, but this simple example
demonstrates the mechanics of creating a simple pipeline of
transformations, one leading to another. Figure 4-4 illustrates the simple
structure of this two-staged ChainedTransformer
.