org.apache.commons.collections

Class 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: 375766 $ $Date: 2006-02-07 23:10:36 +0000 (Tue, 07 Feb 2006) $

Author: Stephen Colebourne Matt Benson

Constructor Summary
ClosureUtils()
This class is not normally instantiated.
Method Summary
static ClosureasClosure(Transformer transformer)
Creates a Closure that calls a Transformer each time it is called.
static ClosurechainedClosure(Closure closure1, Closure closure2)
Create a new Closure that calls two Closures, passing the result of the first into the second.
static ClosurechainedClosure(Closure[] closures)
Create a new Closure that calls each closure in turn, passing the result into the next closure.
static ClosurechainedClosure(Collection closures)
Create a new Closure that calls each closure in turn, passing the result into the next closure.
static ClosuredoWhileClosure(Closure closure, Predicate predicate)
Creates a Closure that will call the closure once and then repeatedly until the predicate returns false.
static ClosureexceptionClosure()
Gets a Closure that always throws an exception.
static ClosureforClosure(int count, Closure closure)
Creates a Closure that will call the closure count times.
static ClosureifClosure(Predicate predicate, Closure trueClosure)
Create a new Closure that calls another closure based on the result of the specified predicate.
static ClosureifClosure(Predicate predicate, Closure trueClosure, Closure falseClosure)
Create a new Closure that calls one of two closures depending on the specified predicate.
static ClosureinvokerClosure(String methodName)
Creates a Closure that will invoke a specific method on the closure's input object by reflection.
static ClosureinvokerClosure(String methodName, Class[] paramTypes, Object[] args)
Creates a Closure that will invoke a specific method on the closure's input object by reflection.
static ClosurenopClosure()
Gets a Closure that will do nothing.
static ClosureswitchClosure(Predicate[] predicates, Closure[] closures)
Create a new Closure that calls one of the closures depending on the predicates.
static ClosureswitchClosure(Predicate[] predicates, Closure[] closures, Closure defaultClosure)
Create a new Closure that calls one of the closures depending on the predicates.
static ClosureswitchClosure(Map predicatesAndClosures)
Create a new Closure that calls one of the closures depending on the predicates.
static ClosureswitchMapClosure(Map objectsAndClosures)
Create a new Closure that uses the input object as a key to find the closure to call.
static ClosurewhileClosure(Predicate predicate, Closure closure)
Creates a Closure that will call the closure repeatedly until the predicate returns false.

Constructor Detail

ClosureUtils

public ClosureUtils()
This class is not normally instantiated.

Method Detail

asClosure

public static Closure asClosure(Transformer 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:

chainedClosure

public static Closure chainedClosure(Closure closure1, Closure 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

public static Closure chainedClosure(Closure[] 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

public static Closure chainedClosure(Collection 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:

doWhileClosure

public static Closure doWhileClosure(Closure closure, Predicate 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:

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:

forClosure

public static Closure forClosure(int count, Closure 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:

ifClosure

public static Closure ifClosure(Predicate predicate, Closure trueClosure)
Create a new Closure that calls another closure based on the result of the specified predicate.

Parameters: predicate the validating predicate trueClosure the closure called if the predicate is true

Returns: the if closure

Throws: IllegalArgumentException if the predicate is null IllegalArgumentException if the closure is null

Since: Commons Collections 3.2

See Also:

ifClosure

public static Closure ifClosure(Predicate predicate, Closure trueClosure, Closure 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:

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

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

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:

switchClosure

public static Closure switchClosure(Predicate[] predicates, Closure[] 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

public static Closure switchClosure(Predicate[] predicates, Closure[] closures, Closure 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

public static Closure switchClosure(Map 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:

switchMapClosure

public static Closure switchMapClosure(Map 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:

whileClosure

public static Closure whileClosure(Predicate predicate, Closure 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:

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