Launcher::Cascade::Container - a class to run L::C::Base launchers in cascade


Launcher-Cascade documentation Contained in the Launcher-Cascade distribution.

Index


Code Index:

NAME

Top

Launcher::Cascade::Container - a class to run L::C::Base launchers in cascade

SYNOPSIS

Top

    use Launcher::Cascade::Base::...;
    use Launcher::Cascade::Container;

    my $launcher1 = new Launcher::Cascade::Base:... ...;
    my $launcher2 = new Launcher::Cascade::Base:... ...;
    my $launcher3 = new Launcher::Cascade::Base:... ...;

    my $container = new Launcher::Cascade::Container
	-launchers => [ $launcher1, $launcher2, $launcher3 ];

    $container->run_session();

DESCRIPTION

Top

A L::C::Container object maintains a list of launchers, which are instances of L::C::Base or of its subclasses. The run_session() method let all the launchers run in turn and checks their status until all of them succeed or one of them fails.

Methods

launchers
launchers LIST
launchers ARRAYREF

Returns the list of Launcher::Cascade::Base objects that are to be run in this section.

When called with a LIST of arguments, this methods also sets the list of launchers to LIST. The argument can also be an ARRAYREF, in which case it will automatically be dereferenced.

All elements in LIST or ARRAYREF should be instances of Launcher::Cascade::Base or one of its subclasses.

add_launcher LIST

Pushes a launcher to list of launchers. All elements in LIST should be instances of Launcher::Cascade::Base or one of its subclasses.

is_success

Returns a true status if all the contained launchers are successfull (their is_success() yields true).

is_failure

Returns a true status if at least one contained launcher has failed (its is_failure() yields true).

status

Returns 1 if is_success(), 0 if is_failure() and undef if the status is yet undetermined, i.e. some launchers are still running or haven't run yet.

run
check_status

Invokes run(), respectively check_status() on all the contained launchers.

run_session

Launches run() and check_status() in loop, until either all the contained launchers are successfull or one of them fails.

SEE ALSO

Top

Launcher::Cascade, Launcher::Cascade::Base

AUTHOR

Top

Cédric Bouvier <cbouvi@cpan.org>

COPYRIGHT & LICENSE

Top


Launcher-Cascade documentation Contained in the Launcher-Cascade distribution.
package Launcher::Cascade::Container;

use strict;
use warnings;

use base qw( Launcher::Cascade );

sub launchers {

    my $self = shift;

    $self->{_launchers} ||= [];
    if ( @_ ) {
	if ( UNIVERSAL::isa($_[0], 'ARRAY') ) {
	    # Dereference the first arg if it is an arrayref (so that the
	    # method can be called with an arrayref from the constructor).
	    $self->{_launchers} = $_[0];
	}
	else {
	    $self->{_launchers} = [ @_ ];
	}
    }
    return @{$self->{_launchers}};
}

sub add_launcher {

    my $self = shift;
    push @{$self->{_launchers} ||= []}, @_;
}

sub is_success {

    my $self = shift;
    
    foreach ( $self->launchers() ) {
	return unless $_->is_success();
    }
    return 1;
}

sub is_failure {

    my $self = shift;

    foreach ( $self->launchers() ) {
	return 1 if $_->is_failure();
    }
    return 0;
}

sub status {

    my $self = shift;

    return $self->is_success()  ? 1
	 : $self->is_failure()  ? 0
	 :                        undef;
}

sub run {

    my $self = shift;

    foreach ( $self->launchers() ) {
	$_->run()
    }
}

sub check_status {

    my $self = shift;

    foreach ( $self->launchers() ) {
	$_->check_status();
    }
}

sub run_session {

    my $self = shift;
    
    while ( !defined($self->status()) ) {
	$self->run();
	$self->check_status();
    }
}

1; # end of Launcher::Cascade::Container