org.apache.commons.collections
Class ClosureUtils

java.lang.Object
  extended by org.apache.commons.collections.ClosureUtils

public class ClosureUtils
extends Object

ClosureUtils provides reference implementations and utilities for the Closure functor interface. The supplied closures are:

All the supplied closures are Serializable.

Since:
Commons Collections 3.0
Version:
$Revision: 1.1.1.1 $ $Date: 2005/05/23 04:32:43 $
Author:
Matt Hall, John Watkinson, Stephen Colebourne

Constructor Summary
ClosureUtils()
          This class is not normally instantiated.
 
Method Summary
static
<I,O> Closure<I>
asClosure(Transformer<I,O> transformer)
          Creates a Closure that calls a Transformer each time it is called.
static
<T> Closure<T>
chainedClosure(Closure<T>[] closures)
          Create a new Closure that calls each closure in turn, passing the result into the next closure.
static
<T> Closure<T>
chainedClosure(Closure<T> closure1, Closure<T> closure2)
          Create a new Closure that calls two Closures, passing the result of the first into the second.
static
<T> Closure<T>
chainedClosure(Collection<T> closures)
          Create a new Closure that calls each closure in turn, passing the result into the next closure.
static
<T> Closure<T>
doWhileClosure(Closure<? super T> closure, Predicate<? super T> predicate)
          Creates a Closure that will call the closure once and then repeatedly until the predicate returns false.
static Closure exceptionClosure()
          Gets a Closure that always throws an exception.
static
<T> Closure<T>
forClosure(int count, Closure<T> closure)
          Creates a Closure that will call the closure count times.
static
<T> Closure<T>
ifClosure(Predicate<? super T> predicate, Closure<? super T> trueClosure, Closure<? super T> falseClosure)
          Create a new Closure that calls one of two closures depending on the specified predicate.
static Closure invokerClosure(String methodName)
          Creates a Closure that will invoke a specific method on the closure's input object by reflection.
static Closure invokerClosure(String methodName, Class[] paramTypes, Object[] args)
          Creates a Closure that will invoke a specific method on the closure's input object by reflection.
static Closure nopClosure()
          Gets a Closure that will do nothing.
static
<T> Closure<T>
switchClosure(Map<Predicate<? super T>,Closure<? super T>> predicatesAndClosures)
          Create a new Closure that calls one of the closures depending on the predicates.
static
<T> Closure<T>
switchClosure(Predicate<? super T>[] predicates, Closure<? super T>[] closures)
          Create a new Closure that calls one of the closures depending on the predicates.
static
<T> Closure<T>
switchClosure(Predicate<? super T>[] predicates, Closure<? super T>[] closures, Closure<? super T> defaultClosure)
          Create a new Closure that calls one of the closures depending on the predicates.
static
<T> Closure<T>
switchMapClosure(Map<T,Closure<T>> objectsAndClosures)
          Create a new Closure that uses the input object as a key to find the closure to call.
static
<T> Closure<T>
whileClosure(Predicate<? super T> predicate, Closure<? super T> closure)
          Creates a Closure that will call the closure repeatedly until the predicate returns false.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClosureUtils

public ClosureUtils()
This class is not normally instantiated.

Method Detail

exceptionClosure

public static Closure exceptionClosure()
Gets a Closure that always throws an exception. This could be useful during testing as a placeholder.

Returns:
the closure
See Also:
ExceptionClosure

nopClosure

public static Closure nopClosure()
Gets a Closure that will do nothing. This could be useful during testing as a placeholder.

Returns:
the closure
See Also:
NOPClosure

asClosure

public static <I,O> Closure<I> asClosure(Transformer<I,O> transformer)
Creates a Closure that calls a Transformer each time it is called. The transformer will be called using the closure's input object. The transformer's result will be ignored.

Parameters:
transformer - the transformer to run each time in the closure, null means nop
Returns:
the closure
See Also:
TransformerClosure

forClosure

public static <T> Closure<T> forClosure(int count,
                                        Closure<T> closure)
Creates a Closure that will call the closure count times.

A null closure or zero count returns the NOPClosure.

Parameters:
count - the number of times to loop
closure - the closure to call repeatedly
Returns:
the for closure
See Also:
ForClosure

whileClosure

public static <T> Closure<T> whileClosure(Predicate<? super T> predicate,
                                          Closure<? super T> closure)
Creates a Closure that will call the closure repeatedly until the predicate returns false.

Parameters:
predicate - the predicate to use as an end of loop test, not null
closure - the closure to call repeatedly, not null
Returns:
the while closure
Throws:
IllegalArgumentException - if either argument is null
See Also:
WhileClosure

doWhileClosure

public static <T> Closure<T> doWhileClosure(Closure<? super T> closure,
                                            Predicate<? super T> predicate)
Creates a Closure that will call the closure once and then repeatedly until the predicate returns false.

Parameters:
closure - the closure to call repeatedly, not null
predicate - the predicate to use as an end of loop test, not null
Returns:
the do-while closure
Throws:
IllegalArgumentException - if either argument is null
See Also:
WhileClosure

invokerClosure

public static Closure invokerClosure(String methodName)
Creates a Closure that will invoke a specific method on the closure's input object by reflection.

Parameters:
methodName - the name of the method
Returns:
the invoker closure
Throws:
IllegalArgumentException - if the method name is null
See Also:
InvokerTransformer, TransformerClosure

invokerClosure

public static Closure invokerClosure(String methodName,
                                     Class[] paramTypes,
                                     Object[] args)
Creates a Closure that will invoke a specific method on the closure's input object by reflection.

Parameters:
methodName - the name of the method
paramTypes - the parameter types
args - the arguments
Returns:
the invoker closure
Throws:
IllegalArgumentException - if the method name is null
IllegalArgumentException - if the paramTypes and args don't match
See Also:
InvokerTransformer, TransformerClosure

chainedClosure

public static <T> Closure<T> chainedClosure(Closure<T> closure1,
                                            Closure<T> closure2)
Create a new Closure that calls two Closures, passing the result of the first into the second.

Parameters:
closure1 - the first closure
closure2 - the second closure
Returns:
the chained closure
Throws:
IllegalArgumentException - if either closure is null
See Also:
ChainedClosure

chainedClosure

public static <T> Closure<T> chainedClosure(Closure<T>[] closures)
Create a new Closure that calls each closure in turn, passing the result into the next closure.

Parameters:
closures - an array of closures to chain
Returns:
the chained closure
Throws:
IllegalArgumentException - if the closures array is null
IllegalArgumentException - if any closure in the array is null
See Also:
ChainedClosure

chainedClosure

public static <T> Closure<T> chainedClosure(Collection<T> closures)
Create a new Closure that calls each closure in turn, passing the result into the next closure. The ordering is that of the iterator() method on the collection.

Parameters:
closures - a collection of closures to chain
Returns:
the chained closure
Throws:
IllegalArgumentException - if the closures collection is null
IllegalArgumentException - if the closures collection is empty
IllegalArgumentException - if any closure in the collection is null
See Also:
ChainedClosure

ifClosure

public static <T> Closure<T> ifClosure(Predicate<? super T> predicate,
                                       Closure<? super T> trueClosure,
                                       Closure<? super T> falseClosure)
Create a new Closure that calls one of two closures depending on the specified predicate.

Parameters:
predicate - the predicate to switch on
trueClosure - the closure called if the predicate is true
falseClosure - the closure called if the predicate is false
Returns:
the switch closure
Throws:
IllegalArgumentException - if the predicate is null
IllegalArgumentException - if either closure is null
See Also:
IfClosure

switchClosure

public static <T> Closure<T> switchClosure(Predicate<? super T>[] predicates,
                                           Closure<? super T>[] closures)
Create a new Closure that calls one of the closures depending on the predicates.

The closure at array location 0 is called if the predicate at array location 0 returned true. Each predicate is evaluated until one returns true.

Parameters:
predicates - an array of predicates to check, not null
closures - an array of closures to call, not null
Returns:
the switch closure
Throws:
IllegalArgumentException - if the either array is null
IllegalArgumentException - if any element in the arrays is null
IllegalArgumentException - if the arrays are different sizes
See Also:
SwitchClosure

switchClosure

public static <T> Closure<T> switchClosure(Predicate<? super T>[] predicates,
                                           Closure<? super T>[] closures,
                                           Closure<? super T> defaultClosure)
Create a new Closure that calls one of the closures depending on the predicates.

The closure at array location 0 is called if the predicate at array location 0 returned true. Each predicate is evaluated until one returns true. If no predicates evaluate to true, the default closure is called.

Parameters:
predicates - an array of predicates to check, not null
closures - an array of closures to call, not null
defaultClosure - the default to call if no predicate matches
Returns:
the switch closure
Throws:
IllegalArgumentException - if the either array is null
IllegalArgumentException - if any element in the arrays is null
IllegalArgumentException - if the arrays are different sizes
See Also:
SwitchClosure

switchClosure

public static <T> Closure<T> switchClosure(Map<Predicate<? super T>,Closure<? super T>> predicatesAndClosures)
Create a new Closure that calls one of the closures depending on the predicates.

The Map consists of Predicate keys and Closure values. A closure is called if its matching predicate returns true. Each predicate is evaluated until one returns true. If no predicates evaluate to true, the default closure is called. The default closure is set in the map with a null key. The ordering is that of the iterator() method on the entryset collection of the map.

Parameters:
predicatesAndClosures - a map of predicates to closures
Returns:
the switch closure
Throws:
IllegalArgumentException - if the map is null
IllegalArgumentException - if the map is empty
IllegalArgumentException - if any closure in the map is null
ClassCastException - if the map elements are of the wrong type
See Also:
SwitchClosure

switchMapClosure

public static <T> Closure<T> switchMapClosure(Map<T,Closure<T>> objectsAndClosures)
Create a new Closure that uses the input object as a key to find the closure to call.

The Map consists of object keys and Closure values. A closure is called if the input object equals the key. If there is no match, the default closure is called. The default closure is set in the map using a null key.

Parameters:
objectsAndClosures - a map of objects to closures
Returns:
the closure
Throws:
IllegalArgumentException - if the map is null
IllegalArgumentException - if the map is empty
IllegalArgumentException - if any closure in the map is null
See Also:
SwitchClosure


Copyright © 2005-2005 Apache Software Foundation, Matt Hall, John Watkinson. All Rights Reserved.