annotate variant_effect_predictor/Bio/Biblio/BiblioBase.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: BiblioBase.pm,v 1.9 2002/10/22 07:45:11 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Biblio::BiblioBase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Martin Senger <senger@ebi.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # For copyright and disclaimer see below.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 Bio::Biblio::BiblioBase - An abstract base for other biblio classes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 # do not instantiate this class directly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 It is a base class where all other biblio data storage classes inherit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 from. It does not reflect any real-world object, it exists only for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 convenience, in order to have a place for shared code.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 =head2 new()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 The I<new()> class method constructs a new biblio storage object. It
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 accepts list of named arguments - the same names as attribute names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 prefixed with a minus sign. Available attribute names are listed in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 the documentation of the individual biblio storage objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head2 Accessors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 All attribute names can be used as method names. When used without any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 parameter the method returns current value of the attribute (or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 undef), when used with a value the method sets the attribute to this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 value and also returns it back. The set method also checks if the type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 of the new value is correct.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 =head2 Custom classes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 If there is a need for new attributes, create your own class which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 usually inherits from I<Bio::Biblio::Ref>. For new types of providers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 and journals, let your class inherit directly from this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 I<Bio::Biblio::BiblioBase> class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Martin Senger (senger@ebi.ac.uk)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =head1 COPYRIGHT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Copyright (c) 2002 European Bioinformatics Institute. All Rights Reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 This module is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 it under the same terms as Perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 =head1 DISCLAIMER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 This software is provided "as is" without warranty of any kind.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 package Bio::Biblio::BiblioBase;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 use vars qw(@ISA $AUTOLOAD);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 # these methods should not be called here;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 # they should be implemented by a subclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 sub _accessible { shift->throw_not_implemented(); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 sub _attr_type { shift->throw_not_implemented(); }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 # deal with 'set_' and 'get_' methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 sub AUTOLOAD {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 my ($self, $newval) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 if ($AUTOLOAD =~ /.*::(\w+)/ && $self->_accessible ("_$1")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 my $attr_name = "_$1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $attr_type = $self->_attr_type ($attr_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my $ref_sub =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my ($this, $new_value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 return $this->{$attr_name} unless defined $new_value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 # here we continue with 'set' method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my ($newval_type) = ref ($new_value) || 'string';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my ($expected_type) = $attr_type || 'string';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 # $this->throw ("In method $AUTOLOAD, trying to set a value of type '$newval_type' but '$expected_type' is expected.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 $this->throw ($this->_wrong_type_msg ($newval_type, $expected_type, $AUTOLOAD))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 unless ($newval_type eq $expected_type) or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 UNIVERSAL::isa ($new_value, $expected_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $this->{$attr_name} = $new_value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 return $new_value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 no strict 'refs';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 *{$AUTOLOAD} = $ref_sub;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 use strict 'refs';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 return $ref_sub->($self, $newval);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $self->throw ("No such method: $AUTOLOAD");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 my ($caller, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my $class = ref ($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 # create and bless a new instance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 my ($self) = $class->SUPER::new (@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 # make a hashtable from @args
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my %param = @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 @param { map { lc $_ } keys %param } = values %param; # lowercase keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 # set all @args into this object with 'set' values;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 # change '-key' into '_key', and making keys lowercase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $new_key;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 foreach my $key (keys %param) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 ($new_key = $key) =~ s/-/_/og; # change it everywhere, why not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my $method = lc (substr ($new_key, 1)); # omitting the first '_'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 no strict 'refs';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 $method->($self, $param { $key });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # done
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 # set methods test whether incoming value is of a correct type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 # here we return message explaining it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 sub _wrong_type_msg {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my ($self, $given_type, $expected_type, $method) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my $msg = 'In method ';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 if (defined $method) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $msg .= $method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $msg .= (caller(1))[3];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 return ("$msg: Trying to set a value of type '$given_type' but '$expected_type' is expected.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 # probably just for debugging
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 # TBD: to decide...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 sub print_me {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 require Data::Dumper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 return Data::Dumper->Dump ( [$self], ['Citation']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 __END__