Raw content of Bio::Tools::Run::WrapperBase
# $Id: WrapperBase.pm,v 1.7.2.2 2003/03/11 10:52:26 jason Exp $
#
# BioPerl module for Bio::Tools::Run::WrapperBase
#
# Cared for by Jason Stajich
#
# Copyright Jason Stajich
#
# You may distribute this module under the same terms as perl itself
# POD documentation - main docs before the code
=head1 NAME
Bio::Tools::Run::WrapperBase - A Base object for wrappers around executables
=head1 SYNOPSIS
# do not use this object directly, it provides the following methods
# for its subclasses
my $errstr = $obj->error_string();
my $exe = $obj->executable();
$obj->save_tempfiles($booleanflag)
my $outfile= $obj->outfile_name();
my $tempdir= $obj->tempdir(); # get a temporary dir for executing
my $io = $obj->io; # Bio::Root::IO object
my $cleanup= $obj->cleanup(); # remove tempfiles
$obj->run({-arg1 => $value});
=head1 DESCRIPTION
This is a basic module from which to build executable wrapper modules.
It has some basic methods to help when implementing new modules.
=head1 FEEDBACK
=head2 Mailing Lists
User feedback is an integral part of the evolution of this and other
Bioperl modules. Send your comments and suggestions preferably to
the Bioperl mailing list. Your participation is much appreciated.
bioperl-l@bioperl.org - General discussion
http://bioperl.org/MailList.shtml - About the mailing lists
=head2 Reporting Bugs
Report bugs to the Bioperl bug tracking system to help us keep track
of the bugs and their resolution. Bug reports can be submitted via
email or the web:
bioperl-bugs@bioperl.org
http://bioperl.org/bioperl-bugs/
=head1 AUTHOR - Jason Stajich
Email jason@bioperl.org
Describe contact details here
=head1 CONTRIBUTORS
Additional contributors names and emails here
=head1 APPENDIX
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _
=cut
# Let the code begin...
package Bio::Tools::Run::WrapperBase;
use vars qw(@ISA);
use strict;
# Object preamble - inherits from Bio::Root::Root
use Bio::Root::RootI;
use Bio::Root::IO;
@ISA = qw(Bio::Root::RootI);
=head2 run
Title : run
Usage : $wrapper->run({ARGS HERE});
Function: Support generic running with args passed in
as a hashref
Returns : Depends on the implementation, status OR data
Args : hashref of named arguments
=cut
sub run {
my ($self,@args) = @_;
$self->throw_not_implemented();
}
=head2 error_string
Title : error_string
Usage : $obj->error_string($newval)
Function: Where the output from the last analysus run is stored.
Returns : value of error_string
Args : newvalue (optional)
=cut
sub error_string{
my ($self,$value) = @_;
if( defined $value) {
$self->{'_error_string'} = $value;
}
return $self->{'_error_string'} || '';
}
=head2 no_param_checks
Title : no_param_checks
Usage : $obj->no_param_checks($newval)
Function: Boolean flag as to whether or not we should
trust the sanity checks for parameter values
Returns : value of no_param_checks
Args : newvalue (optional)
=cut
sub no_param_checks{
my ($self,$value) = @_;
if( defined $value || ! defined $self->{'no_param_checks'} ) {
$value = 0 unless defined $value;
$self->{'no_param_checks'} = $value;
}
return $self->{'no_param_checks'};
}
=head2 save_tempfiles
Title : save_tempfiles
Usage : $obj->save_tempfiles($newval)
Function:
Returns : value of save_tempfiles
Args : newvalue (optional)
=cut
sub save_tempfiles{
my ($self,$value) = @_;
if( defined $value) {
$self->{'save_tempfiles'} = $value;
}
return $self->{'save_tempfiles'};
}
=head2 outfile_name
Title : outfile_name
Usage : my $outfile = $wrapper->outfile_name();
Function: Get/Set the name of the output file for this run
(if you wanted to do something special)
Returns : string
Args : [optional] string to set value to
=cut
sub outfile_name{
my ($self,$nm) = @_;
if( defined $nm || ! defined $self->{'_outfilename'} ) {
$nm = 'mlc' unless defined $nm;
$self->{'_outfilename'} = $nm;
}
return $self->{'_outfilename'};
}
=head2 tempdir
Title : tempdir
Usage : my $tmpdir = $self->tempdir();
Function: Retrieve a temporary directory name (which is created)
Returns : string which is the name of the temporary directory
Args : none
=cut
sub tempdir{
my ($self) = @_;
unless( $self->{'_tmpdir'} ) {
$self->{'_tmpdir'} = $self->io->tempdir(CLEANUP => ! $self->save_tempfiles );
}
unless( -d $self->{'_tmpdir'} ) {
mkdir($self->{'_tmpdir'},0777);
}
$self->{'_tmpdir'};
}
=head2 cleanup
Title : cleanup
Usage : $wrapper->cleanup();
Function: Will cleanup the tempdir directory after a PAML run
Returns : none
Args : none
=cut
sub cleanup{
my ($self) = @_;
$self->io->_io_cleanup();
if( defined $self->{'_tmpdir'} &&
-d $self->{'_tmpdir'} ) {
$self->io->rmtree($self->{'_tmpdir'});
}
}
=head2 io
Title : io
Usage : $obj->io($newval)
Function: Gets a L object
Returns : L object
Args : none
=cut
sub io{
my ($self) = @_;
unless( defined $self->{'io'} ) {
$self->{'io'} = new Bio::Root::IO(-verbose => $self->verbose());
}
return $self->{'io'};
}
=head2 version
Title : version
Usage : $version = $wrapper->version()
Function: Returns the program version (if available)
Returns : string representing version of the program
Args : [Optional] value to (re)set version string
=cut
sub version{
my ($self,@args) = @_;
return undef;
}
=head2 executable
Title : executable
Usage : my $exe = $factory->executable();
Function: Finds the full path to the executable
Returns : string representing the full path to the exe
Args : [optional] name of executable to set path to
[optional] boolean flag whether or not warn when exe is not found
=cut
sub executable{
my ($self, $exe,$warn) = @_;
if( defined $exe ) {
$self->{'_pathtoexe'} = $exe;
}
unless( defined $self->{'_pathtoexe'} ) {
my $prog_path = $self->program_path;
if( $prog_path && -e $prog_path && -x $prog_path ) {
$self->{'_pathtoexe'} = $prog_path;
} else {
my $exe;
if( ( $exe = $self->io->exists_exe($self->program_name) ) &&
-x $exe ) {
$self->{'_pathtoexe'} = $exe;
} else {
$self->warn("Cannot find executable for ".$self->program_name) if $warn;
$self->{'_pathtoexe'} = undef;
}
}
}
$self->{'_pathtoexe'};
}
=head2 program_path
Title : program_path
Usage : my $path = $factory->program_path();
Function: Builds path for executable
Returns : string representing the full path to the exe
Args : none
=cut
sub program_path {
my ($self) = @_;
my @path;
push @path, $self->program_dir if $self->program_dir;
push @path, $self->program_name.($^O =~ /mswin/i ?'.exe':'');
return Bio::Root::IO->catfile(@path);
}
=head2 program_dir
Title : program_dir
Usage : my $dir = $factory->program_dir();
Function: Abstract get method for dir of program. To be implemented
by wrapper.
Returns : string representing program directory
Args : none
=cut
sub program_dir {
my ($self) = @_;
$self->throw_not_implemented();
}
=head2 program_name
Title : program_name
Usage : my $name = $factory->program_name();
Function: Abstract get method for name of program. To be implemented
by wrapper.
Returns : string representing program name
Args : none
=cut
sub program_name {
my ($self) = @_;
$self->throw_not_implemented();
}
1;