package Iotta::Chain; use strict; use Iotta; our @ISA = ("Iotta"); sub read { } sub write { } sub setup { } sub run { my $self = shift; my $meta = shift; my $mod = ${$self->mods}[0]; $mod->run ($meta, 0); } sub mod_add { my $self = shift; my $mod = shift; $mod->chain ($self); my $lmod = pop @{$self->mods}; if ($lmod) { $lmod->next ($mod); push @{$self->mods}, $lmod; } push @{$self->mods}, $mod; } sub mod_creat { my $s = shift; my $modn = shift; my $modt; my $cfg = $s->cfg; my %opts; for (keys (%$cfg)) { if (/^mod\/$modn\//) { my $opt = $_; $opt =~ s/^mod\/.*?\///; $opts{$opt} = $$cfg{$_}; } } my $modt = $$cfg{"mod/$modn"}; #print "trying to instantiate $modt (config)\n"; print "trying to instantiate $modn ($modt)\n"; my $mod = $modt->new || die "could not instantiate $modt ($modn)"; $mod->chain ($s); $mod->setup(\%opts); return $mod; } sub finish { my $self = shift; for (@{$self->mods}) { $_->finish; } } sub initialize { my $self = shift; my @initval; $self->SUPER::initialize (@_); @{$self->{mods}}=(); $self->{data}=""; $self->{cfg}=0; } 1;