Bio::DB::Universal: move into its own distribution
[bioperl-live.git] / Bio / Annotation / TypeManager.pm
blob5b8a5ca3cd2935bafc6489ab61b59c8a2058ae78
2 # BioPerl module for Bio::Annotation::TypeManager
4 # Please direct questions and support issues to <bioperl-l@bioperl.org>
6 # Cared for by Ewan Birney <birney@ebi.ac.uk>
8 # Copyright Ewan Birney
10 # You may distribute this module under the same terms as perl itself
12 # POD documentation - main docs before the code
14 =head1 NAME
16 Bio::Annotation::TypeManager - Manages types for annotation collections
18 =head1 SYNOPSIS
20 # default type manager
22 $tm = Bio::Annotation::TypeManager->new();
24 # $key is a string or a Bio::Ontology::TermI compliant object
25 print "The type for $key is ",$tm->type_for_key($key),"\n";
27 if( !$tm->is_valid($key,$object) ) {
28 $self->throw("Invalid object for key $key");
31 =head1 DESCRIPTION
33 Manages types for annotation collections.
35 =head1 FEEDBACK
37 =head2 Mailing Lists
39 User feedback is an integral part of the evolution of this
40 and other Bioperl modules. Send your comments and suggestions preferably
41 to one of the Bioperl mailing lists.
42 Your participation is much appreciated.
44 bioperl-l@bioperl.org
46 =head2 Support
48 Please direct usage questions or support issues to the mailing list:
50 I<bioperl-l@bioperl.org>
52 rather than to the module maintainer directly. Many experienced and
53 reponsive experts will be able look at the problem and quickly
54 address it. Please include a thorough description of the problem
55 with code and data examples if at all possible.
57 =head2 Reporting Bugs
59 Report bugs to the Bioperl bug tracking system to help us keep track
60 the bugs and their resolution.
61 Bug reports can be submitted via the web:
63 https://github.com/bioperl/bioperl-live/issues
65 =head1 AUTHOR - Ewan Birney
67 Email birney@ebi.ac.uk
69 =head1 APPENDIX
71 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
73 =cut
76 # Let the code begin...
79 package Bio::Annotation::TypeManager;
80 use strict;
82 # Object preamble - inherits from Bio::Root::Root
86 use base qw(Bio::Root::Root);
87 # new() can be inherited from Bio::Root::Root
89 =head2 new
91 Title : new
92 Usage :
93 Function:
94 Example :
95 Returns :
96 Args :
99 =cut
101 sub new{
102 my ($class,@args) = @_;
104 my $self = $class->SUPER::new(@args);
106 $self->{'_type'} = {};
108 $self->_add_type_map('reference',"Bio::Annotation::Reference");
109 $self->_add_type_map('comment',"Bio::Annotation::Comment");
110 $self->_add_type_map('dblink',"Bio::Annotation::DBLink");
112 return $self;
116 =head2 type_for_key
118 Title : type_for_key
119 Usage :
120 Function:
121 Example :
122 Returns :
123 Args :
126 =cut
128 sub type_for_key{
129 my ($self,$key) = @_;
131 $key = $key->name() if ref($key) && $key->isa("Bio::Ontology::TermI");
132 return $self->{'_type'}->{$key};
136 =head2 is_valid
138 Title : is_valid
139 Usage :
140 Function:
141 Example :
142 Returns :
143 Args :
146 =cut
148 sub is_valid{
149 my ($self,$key,$object) = @_;
151 if( !defined $object || !ref $object ) {
152 $self->throw("Cannot type an object [$object]!");
155 if( !$object->isa($self->type_for_key($key)) ) {
156 return 0;
157 } else {
158 return 1;
163 =head2 _add_type_map
165 Title : _add_type_map
166 Usage :
167 Function:
168 Example :
169 Returns :
170 Args :
173 =cut
175 sub _add_type_map{
176 my ($self,$key,$type) = @_;
178 $key = $key->name() if ref($key) && $key->isa("Bio::Ontology::TermI");
179 $self->{'_type'}->{$key} = $type;