Raw content of Bio::EnsEMBL::KillList::KillList package Bio::EnsEMBL::KillList::KillList; use strict; use warnings; use Bio::EnsEMBL::Analysis::Tools::Utilities; use Bio::EnsEMBL::KillList::AnalysisLite; use Bio::EnsEMBL::KillList::Comment; use Bio::EnsEMBL::KillList::Filter; use Bio::EnsEMBL::KillList::KillObject; use Bio::EnsEMBL::KillList::Reason; use Bio::EnsEMBL::KillList::Species; use Bio::EnsEMBL::KillList::Team; use Bio::EnsEMBL::KillList::User; use Bio::EnsEMBL::KillList::DBSQL::DBAdaptor; use Bio::EnsEMBL::Utils::Exception qw(throw warning); use Bio::EnsEMBL::Utils::Argument qw(rearrange); use vars qw (@ISA); @ISA = qw(); =head2 Arg[1] : Example : Description : Return type : Exceptions : Caller : Status : =cut sub new { my($class,@args) = @_; my $self = bless {},$class; my ($type, $db_params, $filter_params) = rearrange([qw(TYPE KILL_LIST_DB FILTER_PARAMS )],@args); if (!defined($type)) {throw " ERROR: need to set -type\n";} $self->type ( $type ); $self->db_params ( $db_params ) if ( defined $db_params ); $self->filter_params ( $filter_params ) if ( defined $filter_params ); return $self; # success - we hope! } =head2 Arg[1] : Example : Description : Return type : Exceptions : Caller : Status : =cut sub type { my $self = shift; $self->{'type'} = shift if ( @_ ); return $self->{'type'}; } =head2 Arg[1] : Example : Description : Return type : Exceptions : Caller : Status : =cut sub db_params { my ($self, $db_params) = @_; if ( !$self->{'db_params'} ) { $self->{'db_params'} = {}; } if ( $db_params ) { throw("Must pass KillList:db_params a hashref not a ".$db_params) unless(ref($db_params) eq 'HASH'); $self->{'db_params'} = $db_params; } return $self->{'db_params'}; } =head2 Arg[1] : Example : Description : Return type : Exceptions : Caller : Status : =cut sub filter_params { my ($self, $filter_params) = @_; if ( !$self->{'filter_params'} ) { $self->{'filter_params'} = {}; } if ( $filter_params ) { throw("Must pass KillList:filter_params a hashref not a ".$filter_params) unless(ref($filter_params) eq 'HASH'); $self->{'filter_params'} = $filter_params; } return $self->{'filter_params'}; } =head2 Arg[1] : Example : Description : Return type : Exceptions : Caller : Status : =cut sub read_and_check_config { my ($self, $var_hash) = @_; parse_config($self, $var_hash, $self->type); } =head2 Arg[1] : Example : Description : Return type : Exceptions : Caller : Status : =cut sub make_filter { my ($self, $hash) = @_; my %filter = %$hash; my $filter = $self->kill_list_filter->new( %filter ); return $filter; } =head2 Arg[1] : $db, the kill_list database Arg[2] : $filter_options - an array (maybe better as a hash or Filter obj) specifying how to filter the kill_list. Example : my %kill_list = %{Bio::EnsEMBL::Analysis::Tools::KillListUtils::get_kill_list($kill_list_db, $filter_options)}; Description : Return type : Kill_list hash where keys = accession and values = kill_objects Exceptions : Caller : Status : =cut sub get_kill_list { my ($self) = @_; #connect to the db my $db; if ($self->db_params) { if (!$self->db_params->dbname || !$self->db_params->dbhost || !$self->db_params->dbuser || !$self->db_params->dbport || !$self->db_params->dbpass ) { throw("Some db parameters are not set"); } $db = Bio::EnsEMBL::KillList::DBSQL::DBAdaptor->new( '-dbname' => $self->db_params->dbname, '-host' => $self->db_params->dbhost, '-user' => $self->db_params->dbuser, '-port' => $self->db_params->dbport, '-pass' => $self->db_params->dbpass, ); } else { throw("Must set db connection parameters in config"); } #get the kill_list filter my $filter_params; if($self->filter_params){ $filter_params = $self->filter_params; } else { throw("Must set filter parameters in config"); } #now get all the filter parameters out of the hash my $user_id = $filter_params->{user_id} if (exists( $filter_params->{user_id} )); my $source_species = $filter_params->{source_species} if (exists( $filter_params->{source_species} )); my $date = $filter_params->{date} if (exists( $filter_params->{date} )); my $status = $filter_params->{status} if (exists( $filter_params->{status} )); my $mol_type = $filter_params->{mol_type} if (exists( $filter_params->{mol_type} )); my $reason_ids = $filter_params->{reason_ids} if (exists( $filter_params->{reason_ids} )); my $analysis_ids = $filter_params->{analysis_ids} if (exists( $filter_params->{analysis_ids} )); my $species_ids = $filter_params->{species_ids} if (exists( $filter_params->{species_ids} )); my $external_db_ids = $filter_params->{external_db_ids} if (exists( $filter_params->{external_db_ids} )); my (@reasons, @analyses, @species, @external_db_ids); #make necessary objects my $user = $db->get_UserAdaptor->fetch_by_dbID($user_id) if ($user_id); my $source_spp = $db->get_SpeciesAdaptor->fetch_by_dbID($source_species) if ($source_species); foreach my $id (@$reason_ids) { push @reasons, $db->get_ReasonAdaptor->fetch_by_dbID($id); } foreach my $id (@$analysis_ids) { push @analyses, $db->get_AnalysisLiteAdaptor->fetch_by_dbID($id); } foreach my $id (@$species_ids) { push @species, $db->get_SpeciesAdaptor->fetch_by_dbID($id); } my $filter = Bio::EnsEMBL::KillList::Filter->new( -user => $user, -from_source_species => $source_spp, -before_date => $date, -having_status => $status, -only_mol_type => $mol_type, -reasons => \@reasons, -for_analyses => \@analyses, -for_species => \@species, -for_external_db_ids => $external_db_ids, ); # an array of kill_objects my $kill_adaptor = $db->get_KillObjectAdaptor; my $kill_objects = $kill_adaptor->fetch_KillObjects_by_Filter($filter); my %kill_object_hash; foreach my $ko (@{$kill_objects}) { $kill_object_hash{$ko->accession} = $ko; print STDERR "got ".$ko->dbID." accesssion ".$ko->accession."\n"; } return \%kill_object_hash; } =head2 Arg[1] : $db, the reference database to be updated Example : Description : Deletes any previous similar entries in the meta table and adds a new entry, with meta_key = 'kill_list' and meta_value = now(). Return type : None Exceptions : None Caller : Status : =cut sub update_meta_table { my ($db) = @_; my $sth = $db->dbc->prepare( "DELETE FROM meta ". "WHERE meta_key = 'kill_list'"); $sth->execute; $sth->finish; $sth = $db->dbc->prepare( "INSERT INTO meta ". "(meta_key, meta_value) ". "VALUES ('kill_list', now())"); $sth->execute; $sth->finish; return; } 1;