Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/Utils/ConfigRegistry.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/Utils/ConfigRegistry.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,337 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +=head1 NAME + +Bio::EnsEMBL::Utils::ConfigRegistry; + +=head1 SYNOPSIS + + + Bio::EnsEMBL::Utils::ConfigRegistry->load_core($dba); + + +=head1 DESCRIPTION + +The ConfigRegistry will "Register" a set of adaptors based on the type +of database that is being loaded. + +=head1 METHODS + +=cut + +package Bio::EnsEMBL::Utils::ConfigRegistry; + +use strict; +use warnings; + +use Bio::EnsEMBL::Registry; +my $reg = "Bio::EnsEMBL::Registry"; +use Bio::EnsEMBL::Utils::Argument qw(rearrange); +use Bio::EnsEMBL::DBSQL::DBConnection; +use Bio::EnsEMBL::DBSQL::DBAdaptor; + +use Bio::EnsEMBL::Utils::Exception qw(warning throw deprecate stack_trace_dump); + + + +sub gen_load { + my ($dba) = @_; + my $config_sub; + + # At some point we hope to set the group in the DBadaptor, hence this + # long check etc. should be simpler. + + if ( $dba->isa('Bio::EnsEMBL::Compara::DBSQL::DBAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('compara'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_compara; + } elsif ( $dba->isa('Bio::EnsEMBL::Lite::DBAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('lite'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_lite; + } elsif ( $dba->isa('Bio::EnsEMBL::External::BlastAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('blast'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_blast; + } elsif ( $dba->isa('Bio::EnsEMBL::ExternalData::SNPSQL::DBAdaptor') ) + { + if ( !defined( $dba->group() ) ) { + $dba->group('SNP'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_SNP; + } elsif ( $dba->isa('Bio::EnsEMBL::Pipeline::DBSQL::DBAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('pipeline'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_pipeline; + } elsif ( $dba->isa('Bio::EnsEMBL::Hive::DBSQL::DBAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('hive'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_hive; + } elsif ( + $dba->isa('Bio::EnsEMBL::ExternalData::Haplotype::DBAdaptor') ) + { + if ( !defined( $dba->group() ) ) { + $dba->group('haplotype'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_haplotype; + } elsif ( $dba->isa('Bio::EnsEMBL::Variation::DBSQL::DBAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('variation'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_variation; + } elsif ( $dba->isa('Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('funcgen'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_funcgen; + } elsif ( $dba->isa('Bio::Ensembl::DBSQL::OntologyTermAdaptor') ) { + if ( !defined( $dba->group() ) ) { + $dba->group('ontology'); + } + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_ontology; + } elsif ( $dba->isa('Bio::EnsEMBL::DBSQL::DBAdaptor') ) { + #vega uses the core DBAdaptor so test if vega is in the dbname + if ( !defined( $dba->group() ) ) { + $dba->group('core'); + } + + if ( $dba->group eq "estgene" ) { + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_estgene; + } elsif ( $dba->group eq "otherfeatures" ) { + $config_sub = + \&Bio::EnsEMBL::Utils::ConfigRegistry::load_otherfeatures; + } elsif ( $dba->group eq 'vega' || $dba->group eq 'vega_update' ) { + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_vega; + } else { + $config_sub = \&Bio::EnsEMBL::Utils::ConfigRegistry::load_core; + } + + } else { + # none standard DBA adaptor + if ( !defined( $dba->group() ) ) { + $dba->group('none_standard'); + } + $config_sub = + \&Bio::EnsEMBL::Utils::ConfigRegistry::load_and_attach_dnadb_to_core; + # throw("Unknown DBAdaptor type $dba\n"); + } + + # return if the connection and species, group are the same + + if ( defined( $dba->species ) ) { + my $db_reg = $reg->get_DBAdaptor( $dba->species, $dba->group, 1 ); + if ( defined($db_reg) ) { + if ( $dba->dbc->equals( $db_reg->dbc ) ) { return $db_reg } + else { + my $msg = + sprintf( 'WARN: Species (%s) and group (%s) ' + . 'same for two seperate databases', + $dba->species(), $dba->group() ); + + warn "${msg}\nModify species name for one of these\n"; + $dba->species( + find_unique_species( $dba->species, $dba->group ) ); + } + } + } else { # no species + + my @db_reg = + @{ $reg->get_all_DBAdaptors_by_connection( $dba->dbc ) }; + + foreach my $db_adaptor (@db_reg) { + if ( $db_adaptor->group eq $dba->group ) { + # found same db connection and group + return $db_adaptor; + } + } + + $dba->species( find_unique_species( "DEFAULT", $dba->group ) ); + if ( $dba->species ne "DEFAULT" ) { + warn "WARN: For multiple species " + . "use species attribute in DBAdaptor->new()\n"; + } + } + + Bio::EnsEMBL::Registry->add_DBAdaptor( $dba->species(), $dba->group(), + $dba ); + + #call the loading subroutine. (add the adaptors to the DBAdaptor) + &{$config_sub}($dba); + + return $dba; +} ## end sub gen_load + + + +sub find_unique_species { + my ( $species, $group ) = @_; + + $reg->add_alias( $species, $species ); + + my $i = 0; + my $free = 0; + + while ( !$free ) { + if ( $i == 0 ) { + if ( !defined( $reg->get_DBAdaptor( $species, $group ) ) ) { + $free = 1; + $i = ""; + } else { + $i = 1; + } + } else { + # set needed self alias + $reg->add_alias( $species . $i, $species . $i ); + + if ( !defined( $reg->get_DBAdaptor( $species . $i, $group ) ) ) { + $free = 1; + } else { + $i++; + } + } + } + + $species .= $i; + return ($species); +} ## end sub find_unique_species + + + +sub load_adaptors { + my ($dba) = @_; + + my %pairs = %{ $dba->get_available_adaptors() }; + + while ( my ( $key, $value ) = each(%pairs) ) { + Bio::EnsEMBL::Registry->add_adaptor( $dba->species(), $dba->group(), + $key, $value ); + } +} + +sub load_and_attach_dnadb_to_core { + my ($dba) = @_; + + load_adaptors($dba); + $reg->add_DNAAdaptor( $dba->species(), $dba->group(), $dba->species(), + 'core' ); +} + + +=head2 load_core + Arg [1] : DBAdaptor with DBConnection already attached + Returntype : DBAdaptor + Exceptions : none +=cut +sub load_core { load_adaptors(@_) } + + +# +# 1) core. no need to add dnadb +# 2) not core add dnadb +# 3) +# + +=head2 load_compara + Arg [1] : DBAdaptor with DBConnection already attached + Returntype : DBAdaptor + Exceptions : none +=cut +sub load_compara { load_adaptors(@_) } + +=head2 load_hive + Arg [1] : DBAdaptor with DBConnection already attached + Returntype : DBAdaptor + Exceptions : none +=cut +sub load_hive { load_adaptors(@_) } + +=head2 load_pipeline + Arg [1] : DBAdaptor with DBConnection already attached + Returntype : DBAdaptor + Exceptions : none +=cut +sub load_pipeline { load_adaptors(@_) } + +=head2 load_SNP + Arg [1] : DBAdaptor with DBConnection already attached + Returntype : DBAdaptor + Exceptions : none +=cut +sub load_SNP { load_adaptors(@_) } + +sub load_haplotype { load_adaptors(@_) } + +sub load_ontology { load_adaptors(@_) } + + +# these that need to attach to the core to get the sequence data + +sub load_estgene { load_and_attach_dnadb_to_core(@_) } + +sub load_variation { load_and_attach_dnadb_to_core(@_) } + +sub load_funcgen { load_and_attach_dnadb_to_core(@_) } + +=head2 load_otherfeatures + Arg [1] : DBAdaptor with DBConnection alredy attached + Returntype : DBAdaptor + Exceptions : none + +=cut +sub load_otherfeatures { load_and_attach_dnadb_to_core(@_) } + +=head2 load_vega + Arg [1] : DBAdaptor with DBConnection already attached + Returntype : DBAdaptor + Exceptions : none +=cut +sub load_vega { load_and_attach_dnadb_to_core(@_) } + + +sub add_alias { + my ( $class, @args ) = @_; + + my ( $species, $aliases ) = rearrange( [qw(SPECIES ALIAS)], @args ); + + # Make sure it exists itself + Bio::EnsEMBL::Registry->add_alias( $species, $species ); + + if ( defined($aliases) ) { + foreach my $ali (@$aliases) { + Bio::EnsEMBL::Registry->add_alias( $species, $ali ); + } + } +} + +# +# overwrite/load new types. Done this way to enable no changes to CVS for +# external users. External users should add there own "GROUPS" in the file +# User_defined_load. +# + +eval{ require Bio::EnsEMBL::Utils::User_defined_load }; + +1;