annotate variant_effect_predictor/Bio/Biblio/BiblioBase.pm @ 1:d6778b5d8382 draft default tip

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