maint: restructure to use Dist::Zilla
[bioperl-live.git] / lib / Bio / Annotation / SimpleValue.pm
blob53e3b0ec65520eb87ad16057a95dfb4ba4562982
2 # BioPerl module for Bio::Annotation::SimpleValue
4 # Please direct questions and support issues to <bioperl-l@bioperl.org>
6 # Cared for by bioperl <bioperl-l@bioperl.org>
8 # Copyright bioperl
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::SimpleValue - A simple scalar
18 =head1 SYNOPSIS
20 use Bio::Annotation::SimpleValue;
21 use Bio::Annotation::Collection;
23 my $col = Bio::Annotation::Collection->new();
24 my $sv = Bio::Annotation::SimpleValue->new(-value => 'someval');
25 $col->add_Annotation('tagname', $sv);
27 =head1 DESCRIPTION
29 Scalar value annotation object
31 =head1 FEEDBACK
33 =head2 Mailing Lists
35 User feedback is an integral part of the evolution of this and other
36 Bioperl modules. Send your comments and suggestions preferably to one
37 of the Bioperl mailing lists. Your participation is much appreciated.
39 bioperl-l@bioperl.org - General discussion
40 http://bioperl.org/wiki/Mailing_lists - About the mailing lists
42 =head2 Support
44 Please direct usage questions or support issues to the mailing list:
46 I<bioperl-l@bioperl.org>
48 rather than to the module maintainer directly. Many experienced and
49 reponsive experts will be able look at the problem and quickly
50 address it. Please include a thorough description of the problem
51 with code and data examples if at all possible.
53 =head2 Reporting Bugs
55 Report bugs to the Bioperl bug tracking system to help us keep track
56 the bugs and their resolution. Bug reports can be submitted via
57 the web:
59 https://github.com/bioperl/bioperl-live/issues
61 =head1 AUTHOR - Ewan Birney
63 Email birney@ebi.ac.uk
65 =head1 APPENDIX
67 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
69 =cut
72 # Let the code begin...
75 package Bio::Annotation::SimpleValue;
76 use strict;
78 # Object preamble - inherits from Bio::Root::Root
80 #use Bio::Ontology::TermI;
82 use base qw(Bio::Root::Root Bio::AnnotationI);
84 =head2 new
86 Title : new
87 Usage : my $sv = Bio::Annotation::SimpleValue->new();
88 Function: Instantiate a new SimpleValue object
89 Returns : Bio::Annotation::SimpleValue object
90 Args : -value => $value to initialize the object data field [optional]
91 -tagname => $tag to initialize the tagname [optional]
92 -tag_term => ontology term representation of the tag [optional]
94 =cut
96 sub new{
97 my ($class,@args) = @_;
99 my $self = $class->SUPER::new(@args);
101 my ($value,$tag,$term) =
102 $self->_rearrange([qw(VALUE TAGNAME TAG_TERM)], @args);
104 # set the term first
105 defined $term && $self->tag_term($term);
106 defined $value && $self->value($value);
107 defined $tag && $self->tagname($tag);
109 return $self;
113 =head1 AnnotationI implementing functions
115 =cut
117 =head2 as_text
119 Title : as_text
120 Usage : my $text = $obj->as_text
121 Function: return the string "Value: $v" where $v is the value
122 Returns : string
123 Args : none
126 =cut
128 sub as_text{
129 my ($self) = @_;
131 return "Value: ".$self->value;
134 =head2 display_text
136 Title : display_text
137 Usage : my $str = $ann->display_text();
138 Function: returns a string. Unlike as_text(), this method returns a string
139 formatted as would be expected for te specific implementation.
141 One can pass a callback as an argument which allows custom text
142 generation; the callback is passed the current instance and any text
143 returned
144 Example :
145 Returns : a string
146 Args : [optional] callback
148 =cut
151 my $DEFAULT_CB = sub { $_[0]->value};
153 sub display_text {
154 my ($self, $cb) = @_;
155 $cb ||= $DEFAULT_CB;
156 $self->throw("Callback must be a code reference") if ref $cb ne 'CODE';
157 return $cb->($self);
162 =head2 hash_tree
164 Title : hash_tree
165 Usage : my $hashtree = $value->hash_tree
166 Function: For supporting the AnnotationI interface just returns the value
167 as a hashref with the key 'value' pointing to the value
168 Returns : hashrf
169 Args : none
172 =cut
174 sub hash_tree{
175 my $self = shift;
177 my $h = {};
178 $h->{'value'} = $self->value;
179 return $h;
182 =head2 tagname
184 Title : tagname
185 Usage : $obj->tagname($newval)
186 Function: Get/set the tagname for this annotation value.
188 Setting this is optional. If set, it obviates the need to
189 provide a tag to AnnotationCollection when adding this
190 object.
192 Example :
193 Returns : value of tagname (a scalar)
194 Args : new value (a scalar, optional)
197 =cut
199 sub tagname{
200 my $self = shift;
202 # check for presence of an ontology term
203 if($self->{'_tag_term'}) {
204 # keep a copy in case the term is removed later
205 $self->{'tagname'} = $_[0] if @_;
206 # delegate to the ontology term object
207 return $self->tag_term->name(@_);
209 return $self->{'tagname'} = shift if @_;
210 return $self->{'tagname'};
214 =head1 Specific accessors for SimpleValue
216 =cut
218 =head2 value
220 Title : value
221 Usage : $obj->value($newval)
222 Function: Get/Set the value for simplevalue
223 Returns : value of value
224 Args : newvalue (optional)
227 =cut
229 sub value{
230 my ($self,$value) = @_;
232 if( defined $value) {
233 $self->{'value'} = $value;
235 return $self->{'value'};
238 =head2 tag_term
240 Title : tag_term
241 Usage : $obj->tag_term($newval)
242 Function: Get/set the L<Bio::Ontology::TermI> object representing
243 the tag name.
245 This is so you can specifically relate the tag of this
246 annotation to an entry in an ontology. You may want to do
247 this to associate an identifier with the tag, or a
248 particular category, such that you can better match the tag
249 against a controlled vocabulary.
251 This accessor will return undef if it has never been set
252 before in order to allow this annotation to stay
253 light-weight if an ontology term representation of the tag
254 is not needed. Once it is set to a valid value, tagname()
255 will actually delegate to the name() of this term.
257 Example :
258 Returns : a L<Bio::Ontology::TermI> compliant object, or undef
259 Args : on set, new value (a L<Bio::Ontology::TermI> compliant
260 object or undef, optional)
263 =cut
265 sub tag_term{
266 my $self = shift;
268 return $self->{'_tag_term'} = shift if @_;
269 return $self->{'_tag_term'};