Raw content of Foo
package Foo;
use Bio::Root::Global qw(:devel);
use Bio::Root::Object ();
use Bar ();
@ISA = qw( Bio::Root::Object );
my $ID = 'Foo';
my $DEFAULT_COLOR = 'gray';
my @COLORS = qw('red' 'green' 'blue' 'gray');
use strict;
#----------------------------------------------------------------------
# PACKAGE : Foo.pm
# PURPOSE : Dummy object for testing Bio::Root::Object.pm and Bio::Root::Err.pm.
# AUTHOR : Steve Chervitz (sac@bioperl.org)
# REVISION : $Id: Foo.pm,v 1.1 2002/08/27 18:17:17 bosborne Exp $
#----------------------------------------------------------------------
####################################
sub _initialize {
my($self, %param) = @_;
$DEBUG && do{ printf ">>>> Initializing %s (%s) %s\n",$ID,ref($self),$param{-NAME}||'anon';
; };
#----------------------
# DATA MEMBERS:
# foodat
# color
# bar
#----------------------
$self->SUPER::_initialize( %param );
my ($foo, $color) = $self->_rearrange([qw(FOO COLOR)], %param);
$self->set_data( $foo);
$self->set_color( $color);
$self->set_bar( %param) if defined $param{-BAR};
# $self->index();
$DEBUG and printf "---> Initialized %s (%s) %s\n",$ID, ref($self), $self->name;
}
###################################
sub destroy {
my $self = shift;
if(ref($self->{'Bar'})) {
$self->{'Bar'}->destroy;
undef $self->{'Bar'};
}
$self->SUPER::destroy();
}
###################################
sub set_data {
my ($self, $d) = @_;
if(not defined ($d) or $d =~ /\D/) {
$self->throw("Undefined or invalid foo data: $d",
"All $ID objects must be initialized with numeric data.");
}
$self->{'Foodat'} = $d;
}
###################################
sub set_color {
my ($self, $c) = @_;
$DEBUG and print "$ID: setting color()";
$c || do{ $self->warn("Color not defined.",
"All $ID objects must have a color.".
"\tSetting to $DEFAULT_COLOR");
$c = $DEFAULT_COLOR; };
$self->{'Color'} = "\L$c\E";
}
###################################
sub change_color {
my ($self,$c) = @_;
if( grep /$c/i, @COLORS) {
$self->set_color($c);
} else {
$self->throw("Invalid or unspecified color = $c",
"Color not changed ($self->{'Color'}).\nAcceptable colors: @COLORS");
}
}
###################################
sub set_bar {
my ($self, %param) = @_;
my $bar = undef;
$DEBUG and print "Foo::set_bar()\n";
$param{-PARENT} = $self;
my $bar_name = 'BAR_'.$self->{'Foodat'};
$param{-NAME} = $bar_name;
eval { $bar = new Bar(%param); };
if($@) {
## If Bar throws an exception, assimilate the exception as a warning
## and add a note to it.
$self->warn(-MSG =>$@,
-NOTE =>"${\$self->name()} can't build Bar object \"$bar_name\": Invalid object.");
} else {
$self->{'Bar'} = $bar;
}
}
###################################
sub color { my $self = shift; defined $self->{'Color'} ? $self->{'Color'} : 'unknown'; }
sub data { my $self = shift; $self->{'Foodat'} }
sub bar { my $self = shift; $self->{'Bar'} }
###################################
sub _display_stats {
my ($self, $OUT ) = @_;
$self->SUPER::_display_stats($OUT);
printf( $OUT "%-15s: %d\n", 'DATA',$self->data());
printf( $OUT "%-15s: %s\n", 'COLOR',$self->color());
(defined $self->{'Bar'})
? $self->{'Bar'}->display(-WHERE=>$OUT, -HEADER=>1)
: ( printf( $OUT "%-15s: %s\n", 'BAR','undefined'));
print $OUT "\n";
}
######################################
1;