Bio::GMOD::Adaptor - Generic factory for Bio::GMOD::Adaptor::* objects


Bio-GMOD documentation Contained in the Bio-GMOD distribution.

Index


Code Index:

NAME

Top

Bio::GMOD::Adaptor - Generic factory for Bio::GMOD::Adaptor::* objects

SYNPOSIS

Top

  my $adaptor = Bio::GMOD::Adaptor->new(-mod => 'WormBase');

DESCRIPTION

Top

Bio::GMOD::Adaptor acts as a generic factor for Bio::GMOD::Adaptor::* objects. You will not interact directly with Bio::GMOD::Adaptor objects.

Bio::GMOD::Adaptor primarily serves to read in default values for common variables. These can be provided by a CGI, hardcoded in the Adaptor object, or supplied as named options to the new() constructor.

PUBLIC METHODS

Top

Bio::GMOD::Adaptor->new(@p);

Create a new Bio::GMOD::Adaptor::* object. new() reads in default values from the WormBase server. These values will be overridden by like-named key-value pairs passed in the @p array.

Defaults are stored in the object by lower case hash key corresponding to the default name. Adaptor objects are usually housed within other objects, say a Bio::GMOD::Update object. You can always can access to the adaptor object itself by calling

    my $adaptor = $gmod_object->adaptor;

And to access a variable:

    my $value = $adaptor->default_name

Variable names can be populated in one of three ways, or by mixing and matching any of these approaches. In order of precedence, they are:

1. As named arguments passed to new()
   Bio::GMOD::Update->new(-mysql_path => '/usr/local/var');

Options provided in this manner will override like-named variables defined in steps 2 or 3.

2. Via a custom CGI that returns key=value pairs

See, for example, the WormBase defaults cgi in etc/defaults.wormbase.cgi. This approach gives developers additionaly flexibility for end users -- particularly in cases where file system paths on the server-side or data model nuances may be in flux. Users need not have the newest version of the Bio::GMOD module in order to have the most up-to-date data.

The obvious drawback of this approach is that it requires users to be online.

3. Hardcoded in the Adaptor::"Your Mod" module

In reality, you may wish to provide some aspect of each of these approaches to define site-specific variables.

$adaptor->parse_params(@p);

Parse supplied parameters for new variables of those overriding system defaults. Each option will be loaded into the Bio::GMOD::Adaptor::* object with the option name as a key. A corresponding (lowercase) accessor method will also be created.

Returns an ordered list of: ftp_path : full path to the ftp site, including ftp://path/release tmp_path : full path to the temporary directory release : the WSXXX release to fetch dl_only : boolean flag whether the databases should simply be downloaded acedb_path : full path to the acedb data directory mysql_path : full path to the mysql data directory

DEFINING YOUR OWN VARIABLE NAMES

Top

You can freely define your own variables names in a Bio::GMOD::Adaptor::"Your MOD" subclass for use in, say, a Bio::GMOD::Update::"Your MOD" subclass. These variables will be AUTOLOAD'ed, becoming Bio::GMOD::Adaptor::"Your MOD" (or Bio::GMOD::Adaptor) methods as appropriate.

The following variable names are protected. Some Bio::GMOD modules utilize these variable names to set defaults.

  tmp_path      Full path to the temporary directory
  ftp_site      The FTP host from which to retrieve files
  version       The current version of the MOD of interest (may be
                   a live or development version)
  install_root  The full path to the MOD installation
  rsync_url     The URL of an rsync server, if required
  rsync_module  An rsync module name to sync to

These can always be overridden using the named parameter style of method calls.

BUGS

Top

None reported.

SEE ALSO

Top

Bio::GMOD

AUTHOR

Top

Todd W. Harris <harris@cshl.edu>.

Copyright (c) 2003-2005 Cold Spring Harbor Laboratory.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Bio-GMOD documentation Contained in the Bio-GMOD distribution.

package Bio::GMOD::Adaptor;

use strict;
use vars qw/@ISA/;
use LWP::UserAgent;
use Bio::GMOD::Util::CheckVersions;
use Bio::GMOD::Util::Rearrange;

@ISA = qw/
  Bio::GMOD
  Bio::GMOD::Util::CheckVersions
  /;
#  Bio::GMOD::StandardURLs

sub new {
  my ($self,$overrides) = @_;
  my $adaptor = bless {},$self;
  eval {"require $self"} or $self->logit(-msg => "Couldn't require the $self package: $!",-die => 1);

  # Is a defaults script available?
  # This should be converted to XML
  if ($adaptor->defaults_cgi) {
    my $ua      = LWP::UserAgent->new();
    my $version = $self->biogmod_version;
    $ua->agent("Bio::GMOD.pm/$version");
    my $request = HTTP::Request->new('GET',$adaptor->defaults_cgi);
    my $response = $ua->request($request);

    if ($response->is_success) {
      # Parse out the content and store the defaults in the object
      my $content = $response->content;
      my @lines = split("\n",$content);
      foreach (@lines) {
	next if /^\#/;  # ignore comments
	my ($key,$val) = split("=");
	$adaptor->{defaults}->{lc($key)} = $val;
      }
      $adaptor->{status} = "SUCCESS";
    } else {
      # Couldn't fetch the defaults script - maybe working offline

      # Until fully tested, let's require that you be online.
      # WiMax is coming anyways, right ;)

      $adaptor->logit(-msg => "Couldn't fetch defaults script:\n\t"
		      . $response->status_line .
		      "\n\tYou may be working offline. Defaults will be populated from adaptor object",
		      # -die=>1
		     );
    }
  }

  # Override some of the defaults if requested
  foreach my $key (keys %$overrides) {
    my $value = $overrides->{$key};
    next unless $value;
    $adaptor->{defaults}->{lc($key)} = $value;
  }

  my @defaults = $self->defaults;

  # Finally, fetch the values hardcoded in the Adaptor::*
  foreach my $key (@defaults) {
    next if defined $adaptor->{defaults}->{lc($key)};
    $key = lc ($key);
    my $hard_coded = $adaptor->$key;
    next unless $hard_coded;
    $adaptor->{defaults}->{$key} = $hard_coded;
  }
  return $adaptor;
}

# Generically accept parameters, loading them into the adaptor object.
sub parse_params {
  my ($self,@p) = @_;
  return unless @p;
  my %params = @p;
  foreach my $key (keys %params) {
    my $value = $params{$key};
    # strip of leading hypens.
    # Some may have two coming from @ARGV and command line
    $key =~ s/^\-\-{0,1}//;
    # next if defined $self->{defaults}->{lc($key)};
    $self->{defaults}->{lc($key)} = $value;
  }
}


__END__



1;