Raw content of BioMart::RootI # # You may distribute this module under the same terms as perl itself # # POD documentation - main docs before the code =head1 NAME =head1 SYNOPSIS =head1 DESCRIPTION =head1 AUTHOR - Arek Kasprzyk, Syed Haider, Damian Smedley =head1 CONTACT This module is part of the BioMart project http://www.biomart.org Questions can be posted to the mart-dev mailing list: mart-dev@ebi.ac.uk =head1 METHODS =cut package BioMart::RootI; use strict; use warnings; use Time::localtime; use Carp; # Interface methods =head2 new Usage : my $object = BioMart::RootI_ImplementingObject->new(%params); my $copy = $object->new; my $copy2 = BioMart::RootI_ImplementingObject->new($object); Description : All RootI implementing objects can take a hash of parameters, check the existence and validity of these parameters, and return a new instance. Also acts as a Copy Constructor for implementations which support this functionality (see init below). Returntype : $object reference Exceptions : Missing or invalid required parameters. Implementation specific Exceptions. Caller : caller =cut sub new { # interface my $proto = shift; my $class = ref $proto || $proto; my $self = { '_hashCode' => undef, '_hashDirty' => 1, }; bless $self, $class; if (ref $proto) { $self->init($proto); } else { if ($self->can('_new')) { $self->_new(@_); } else { $self->unimplemented_method(); } } return $self; } =head2 init Usage : my $obj = $oldObj->new; my $obj = BioMart::RootImp->new($oldObj); Description : RootI Implementations with an _init method can return newly instantiated copies of themselves. See perlpod for new above. Returntype : newly instantiated copy of an existing object. Exceptions : implentation specific Caller : caller =cut sub init { # Interface my $self = shift; if ($self->can('_init')) { return $self->_init(@_); } $self->unimplemented_method(); } sub equals { # Interface my $self = shift; if ($self->can('_equals')) { return $self->_equals(@_); } $self->unimplemented_method(); } sub hashCode { # Interface my $self = shift; if (defined $self->{'_hashCode'} && $self->{'_hashDirty'} == 0) { return $self->{'_hashCode'}; } my $hashCode; if ($self->can('_hashCode')) { $hashCode = $self->_hashCode(@_); } else { $self->unimplemented_method(); } $self->{'_hashCode'} = $hashCode; $self->{'_hashDirty'} = 0; return $hashCode; } sub toString { # Interface my $self = shift; if ($self->can('_toString')) { return $self->_toString(@_); } $self->unimplemented_method(); } # utility methods available to all implementations sub unimplemented_method { my $self = shift; my $subroutine = [ caller 1 ]->[3]; $subroutine =~ s/^.*:://; BioMart::Exception->throw(sprintf("Unimplemented method '%s::%s'", ref $self || $self, $subroutine)); } 1;