#!/usr/local/bin/perl -w

=head1 NAME

test_Runnable

=head1 SYNOPSIS
 
  test_Runnable

=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

=cut

use strict;
use Getopt::Long;

use Bio::EnsEMBL::DBSQL::DBAdaptor;
use Bio::EnsEMBL::DBLoader;
#use Bio::EnsEMBL::Pipeline::RunnableDB::Vert_Est2Genome;
use Bio::EnsEMBL::Pipeline::RunnableDB::Est2Genome;
use vars qw(@ISA);

use Data::Dumper;

@ISA = qw(Bio::Root::Object);

my $dbtype = 'mysql';
my $host   = 'localhost';
my $port   = '3306';
my $dbname = 'pipeline_test';
my $dbuser = 'root';
my $pass   = '';
my $runnable;
my $input_id;

&GetOptions( 
	     'dbhost:s'  => \$host,
	     'dbport:n'  => \$port,
	     'dbname:s'  => \$dbname,
	     'dbuser:s'  => \$dbuser,
	     'pass:s'    => \$pass,
	     'input_id:s'  => \$input_id,
	     'runnable:s' => \$runnable,
	     );

$| = 1;

my $module  = "Bio::EnsEMBL::DBSQL::DBAdaptor";

my $locator = make_locator_string($dbtype,$module,$host,$port,$dbname,$dbuser,$pass);

my $db      = new Bio::EnsEMBL::DBLoader($locator) 
                or warn ("Bio::EnsEMBL::DBloader failed: $!\n");

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

my $runobj = "$runnable"->new(-dbobj => $db,
    		      -input_id => $input_id,
	    	     );
$runobj->fetch_input;
$runobj->run;

my @out = $runobj->output;
my $gfffile = $input_id . ".gff";
print "GFFfile is $gfffile\n";
open (GFF,">$gfffile");
foreach my $out (@out) {
    print (GFF $out->gffstring . "\n") if ($out);
}
close(GFF);


sub make_locator_string {
    my ($type,$module,$host,$port,$dbname,$dbuser,$dbpass) = @_;
    return "$module/host=$host;port=$port;dbname=$dbname;user=$dbuser;pass=$dbpass";

}

