annotate variant_effect_predictor/Bio/Factory/ObjectFactory.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: ObjectFactory.pm,v 1.1.2.1 2003/03/27 10:07:56 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Factory::ObjectFactory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Hilmar Lapp <hlapp at gmx.net>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Hilmar Lapp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 # (c) Hilmar Lapp, hlapp at gmx.net, 2003.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2003.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 # You may distribute this module under the same terms as perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 # Refer to the Perl Artistic License (see the license accompanying this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 # software package, or see http://www.perl.com/language/misc/Artistic.html)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 # for the terms under which you may use, modify, and redistribute this module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 Bio::Factory::ObjectFactory - Instantiates a new Bio::Root::RootI (or derived class) through a factory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 use Bio::Factory::ObjectFactory;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 my $factory = new Bio::Factory::ObjectFactory(-type => 'Bio::Ontology::GOterm');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 my $term = $factory->create_object(-name => 'peroxisome',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 -ontology => 'Gene Factory',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 -identifier => 'GO:0005777');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 This object will build L<Bio::Root::RootI> objects generically.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 =head1 AUTHOR - Hilmar Lapp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Email hlapp at gmx.net
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 This is mostly copy-and-paste with subsequent adaptation from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 Bio::Seq::SeqFactory by Jason Stajich. Most credits should in fact go
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 to him.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Internal methods are usually preceded with a _
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::Factory::ObjectFactory;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 use strict;
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 use Bio::Factory::ObjectFactoryI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 @ISA = qw(Bio::Root::Root Bio::Factory::ObjectFactoryI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Usage : my $obj = new Bio::Factory::ObjectFactory();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Function: Builds a new Bio::Factory::ObjectFactory object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Returns : Bio::Factory::ObjectFactory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Args : -type => string, name of a L<Bio::Root::RootI> derived class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 There is no default.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 -interface => string, name of the interface or class any type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 specified needs to at least implement.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 The default is Bio::Root::RootI.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my ($type,$interface) = $self->_rearrange([qw(TYPE INTERFACE)], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 $self->{'_loaded_types'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 $self->interface($interface || "Bio::Root::RootI");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $self->type($type) if $type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 =head2 create_object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Title : create_object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Usage : my $seq = $factory->create_object(<named parameters>);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 Function: Instantiates a new object of the previously set type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 This object allows us to genericize the instantiation of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 You must have provided -type at instantiation, or have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 called type($mytype) before you can call this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Returns : an object of the type returned by type()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 The return type is configurable using new(-type =>"..."),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 or by calling $self->type("My::Fancy::Class").
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Args : Initialization parameters specific to the type of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 object we want. Check the POD of the class you set as type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 sub create_object {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $type = $self->type(); # type has already been loaded upon set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 return $type->new(-verbose => $self->verbose, @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =head2 type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Title : type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Usage : $obj->type($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Function: Get/set the type of object to be created.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 This may be changed at any time during the lifetime of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 factory.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Returns : value of type (a string)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Args : newvalue (optional, a string)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 sub type{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 if(@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 if($type && (! $self->{'_loaded_types'}->{$type})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $self->_load_module($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 if( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $self->throw("module for '$type' failed to load: ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $@);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my $o = bless {},$type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 if(!$self->_validate_type($o)) { # this may throw an exception
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $self->throw("'$type' is not valid for factory ".ref($self));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $self->{'_loaded_types'}->{$type} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 return $self->{'type'} = $type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 return $self->{'type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 =head2 interface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Title : interface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Usage : $obj->interface($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Function: Get/set the interface or base class that supplied types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 must at least implement (inherit from).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Returns : value of interface (a scalar)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Args : on set, new value (a scalar or undef, optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 sub interface{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my $interface = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 if($interface) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 return $self->{'interface'} = $interface;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 return $self->{'interface'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 =head2 _validate_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Title : _validate_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Function: Called to let derived factories validate the type set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 via type().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 The default implementation here checks whether the supplied
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 object skeleton implements the interface set via -interface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 upon factory instantiation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 Returns : TRUE if the type is to be considered valid, and FALSE otherwise.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 Instead of returning FALSE this method may also just throw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 an informative exception.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Args : A hash reference blessed into the specified type, allowing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 queries like isa().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 sub _validate_type{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 my ($self,$obj) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 if(! $obj->isa($self->interface())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 $self->throw("invalid type: '".ref($obj).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 "' does not implement '".$self->interface()."'");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 #####################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 # aliases for naming consistency or other reasons #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 #####################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 *create = \&create_object;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 1;