package Bio::Das::AGPServer::Config; =head1 AUTHOR Tony Cox . Copyright (c) 2003 The Sanger Institute This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See DISCLAIMER.txt for disclaimers of warranty. =cut use strict; use vars qw($AUTOLOAD $DEBUG %OPT); use Sys::Hostname; use Getopt::Long; $Bio::Das::AGPServer::Config::DEBUG = 1; $Bio::Das::AGPServer::Config::VERSION = "1.0"; sub new { my ($class, @args) = @_; my $o = bless {}, $class; $o->init(@args); return $o; } ################################################################# ## Init the options object ################################################################# sub init { my $self = shift; my %args = @_; foreach my $k (keys %args){ print STDERR "Setting $k = $args{$k}\n" if ($Bio::Das::AGPServer::Config::DEBUG); $self->$k($args{$k}); } my ($dsn,$dsnversion,$agpfile,$agpdir,$tmpdir,$backend,$port,$password,$username,$dbhost,$dbname,$dbport,$usage); my $result = GetOptions( 'dsn:s' => \$dsn, # req 'dsnversion:i' => \$dsnversion, # req 'agpfile:s' => \$agpfile, # req 'agpdir:s' => \$agpdir, 'tmpdir:s' => \$tmpdir, 'port:i' => \$port, 'backend:s' => \$backend, 'dbhost:s' => \$dbhost, 'dbname:s' => \$dbname, 'username:s' => \$username, 'password:s' => \$password, 'dbport:i' => \$dbport, 'help|h|?' => \$usage, ); if ($usage){ $self->usage(); exit; } die "Cannot parse command line options: $result\n" unless ($result); $self->die("You must provide a data source name using the '--dsn' option") unless $dsn; $tmpdir ||= '/tmp'; $backend ||= 'CSV'; $port ||= 9999; if(lc($backend) eq 'mysql'){ $self->die("You must provide a mysql server name using the '--dbhost' option") unless $dbhost; $self->die("You must provide a username using the '--username' option") unless $username; $self->die("You must provide a password using the '--password' option") unless $password; $dbport ||= 3306; } unless ($agpfile || $agpdir){ $self->die("You must provide an AGP filename or directory containing an AGP file\nusing the '--agpfile or '--agpdir' options"); } my $tablename = "tmp_agp_" . $dsn; if ((lc($backend) eq 'csv') && (-e "$tmpdir/$tablename")){ $dbname = $dsn . "_AGP"; print STDERR "Removing temporary file: $tmpdir/$tablename\n" if ($Bio::Das::AGPServer::Config::DEBUG); unlink("$tmpdir/$tablename"); } $self->dsn($dsn); $self->dsnversion($dsnversion); $self->agpfile($agpfile); $self->agpdir($agpdir); $self->tmpdir($tmpdir); $self->backend($backend); $self->port($port); $self->tablename($tablename); $self->hostname(Sys::Hostname::hostname()); $self->dbname($dbname); $self->dbhost($dbhost); $self->dbport($dbport); $self->username($username); $self->password($password); #my $caps = join '; ',qw( error-segment/1.0 unknown-segment/1.0 unknown-feature/1.0 # feature-by-id/1.0 group-by-id/1.0 component/1.0 supercomponent/1.0 # dna/1.0 features/1.0 stylesheet/1.0 types/1.0 # entry_points/1.0 dsn/1.0 sequence/1.0 # ); my $caps = join '; ',qw( features/1.0 entry_points/1.0 dsn/1.0 feature-by-id/1.0 stylesheet/1.0 ); $self->das_capabilities($caps); $self->das_version('DAS/1.50'); } ###################################################################### sub usage { my ($self) = @_; print <, Sanger Institute. Establishes a minimal DAS reference server driven from an AGP file. Capable of serving assembly information, entry_points, DSN info, features across a segment and features by ID. All other DAS commands are not yet supported.By default the server will use a simple CSV textfile for storing the data. While this is adequate for small AGP files if better performance is needed then use the Mysql backend. Usage: ./agpserver --dsn Name for this DAS datasource --dsnversion DSN version number (default = 1) --agpdir <./dirname> Directory holding AGP file(s) or --agpfile Single AGP file --port DAS server port (default = 9999) --tmpdir Temporary directory (default = /tmp) [ --backend mysql Use a mysql backend --dbhost Mysql server hostname --dbname Mysql database name --username Mysql username (needs write access) --password Mysql password --dbport Mysql server port (default = 3306) ] eg: ./agpserver --dsn test --agpdir ./TEST --port 3000 --backend mysql --dbhost mysql.myserver.org --dbport 3307 --dbname agptest --username fred --password pants END } ###################################################################### sub die { my ($self,$error) = @_; die qq($error\n); } ###################################################################### sub AUTOLOAD { my $self = shift; my $var = $AUTOLOAD; my $arg = shift; local $^W = 0; $var =~ s/.*:://; if(defined $arg){ $self->{$var} = $arg; } return $self->{$var}; } ###################################################################### 1;