#!/usr/local/ensembl/bin/perl


=head1 NAME

run_GeneBuild_RunnableDB

=head1 SYNOPSIS
 
  test_RunnableDB

=head1 DESCRIPTION


=head1 OPTIONS

    -dbhost    host name for database (gets put as host= in locator)

    -dbport    For RDBs, what port to connect to (port= in locator)

    -dbname    For RDBs, what name to connect to (dbname= in locator)

    -dbuser    For RDBs, what username to connect as (dbuser= in locator)

    -dbpass    For RDBs, what password to use (dbpass= in locator)

    -input_id  The input id for the RunnableDB

    -runnable  The name of the runnable module we want to run

    -analysis  The number of the analysisprocess we want to run
=cut


use strict;
use Getopt::Long;


use Bio::EnsEMBL::Pipeline::Config::GeneBuild::Databases qw (
					                     GB_DBHOST
					                     GB_DBNAME
					                     GB_DBUSER
					                     GB_DBPASS
					                     GB_DBPORT
                                                            );

use Bio::EnsEMBL::Pipeline::Config::GeneBuild::Scripts  qw  (
					                     GB_LENGTH_RUNNABLES
                                                            );
use Bio::EnsEMBL::DBSQL::DBAdaptor;
use Bio::EnsEMBL::DBLoader;
my $dbtype = 'mysql';
my $host   = $GB_DBHOST;
my $port   = undef;
my $dbname = $GB_DBNAME;
my $dbuser = $GB_DBUSER;
my $dbpass = $GB_DBPASS;
my $dbport = $GB_DBPORT;

my $runnable;
my $input_id;
my $analysis_logic_name;
my $write  = 0;
my $check  = 0;
my $params;
my $pepfile;

&GetOptions( 
	     'input_id:s'  => \$input_id,
	     'runnable:s'  => \$runnable,
	     'analysis:s'  => \$analysis_logic_name,
             'write'       => \$write,
             'check'       => \$check,
             'parameters:s'=> \$params,
	     );

$| = 1;

die "No runnable entered" unless defined ($runnable);
(my $file = $runnable) =~ s/::/\//g;
require "$file.pm";

if ($check) {
   exit(0);
}

print STDERR "args: $host : $dbuser : $dbpass : $dbname : $input_id\n";

my $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
    -host             => $host,
    -user             => $dbuser,
    -dbname           => $dbname,
    -pass             => $dbpass,
    -port             => $dbport,
    -perlonlyfeatures => 0,
);

die "No input id entered" unless defined ($input_id);

my $analysis = $db->get_AnalysisAdaptor->fetch_by_logic_name($analysis_logic_name);

my %hparams;
# eg -parameters param1=value1,param2=value2
if(defined $params){
  foreach my $p(split /,/, $params){
    my @sp = split /=/, $p;
    $sp[0] = '-' . $sp[0];
    $hparams{$sp[0]} =  $sp[1];
  }
}

my $runobj = "$runnable"->new(-db    => $db,
			      -input_id => $input_id,
			      -analysis => $analysis,
			      %hparams,
			     );

$runobj->fetch_input;
$runobj->run;

 
my @out = $runobj->output;

if ($write) {
  $runobj->write_output;
}

