annotate variant_effect_predictor/Bio/Factory/DriverFactory.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: DriverFactory.pm,v 1.10 2002/12/01 00:05:20 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Factory::DriverFactory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Jason Stajich <jason@bioperl.org> and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # Hilmar Lapp <hlapp@gmx.net>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 # Copyright Jason Stajich, Hilmar Lapp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Bio::Factory::DriverFactory - Base class for factory classes loading drivers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 #this class is not instantiable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 This a base class for factory classes that load drivers. Normally, you don't
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 instantiate this class directly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 User feedback is an integral part of the evolution of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 and other Bioperl modules. Send your comments and suggestions preferably
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 to one of the Bioperl mailing lists.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 the bugs and their resolution. Bug reports can be submitted via email
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 Email Jason Stajich E<lt>jason@bioperl.orgE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 package Bio::Factory::DriverFactory;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 use vars qw(@ISA %DRIVERS);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 %DRIVERS = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 my ($class, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 =head2 register_driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Title : register_driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Usage : $factory->register_driver("genscan", "Bio::Tools::Genscan");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Function: Registers a driver a factory class should be able to instantiate.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 This method can be called both as an instance and as a class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Args : Key of the driver (string) and the module implementing the driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 (string).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 sub register_driver {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 my %drivers = @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 foreach my $drv (keys(%drivers)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 # note that this doesn't care whether $self is the class or the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 $self->driver_table()->{$drv} = $drivers{$drv};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head2 driver_table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Title : driver_table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Usage : $table = $factory->driver_table();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Function: Returns a reference to the hash table storing associations of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 methods with drivers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 You use this table to look up registered methods (keys) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 drivers (values).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 In this implementation the table is class-specific and therefore
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 shared by all instances. You can override this in a derived class,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 but note that this method can be called both as an instance and a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 class method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 This will be the table used by the object internally. You should
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 definitely know what you're doing if you modify the table's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 contents. Modifications are shared by _all_ instances, those present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 and those yet to be created.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Returns : A reference to a hash table.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub driver_table {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 return \%DRIVERS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =head2 get_driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Title : get_driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Usage : $module = $factory->get_driver("genscan");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Function: Returns the module implementing a driver registered under the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 given key.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Returns : A string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Args : Key of the driver (string).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 sub get_driver {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my ($self, $key) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 if(exists($self->driver_table()->{$key})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 return $self->driver_table()->{$key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 =head2 _load_module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Title : _load_module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Usage : $self->_load_module("Bio::Tools::Genscan");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Function: Loads up (like use) a module at run time on demand.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Returns : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 sub _load_module {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my ($self, $name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my ($module, $load, $m);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $module = "_<$name.pm";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 return 1 if $main::{$module};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $load = "$name.pm";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 my $io = new Bio::Root::IO();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 # catfile comes from IO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $load = $io->catfile((split(/::/,$load)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 require $load;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 if ( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $self->throw("$load: $name cannot be found: ".$@);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 1;