package Data::Babel::Master; ################################################################################# # # Author: Nat Goodman # Created: 10-07-26 # $Id: # # Copyright 2010 Institute for Systems Biology # # This program is free software; you can redistribute it and/or modify it # under the terms of either: the GNU General Public License as published # by the Free Software Foundation; or the Artistic License. # # See http://dev.perl.org/licenses/ for more information. # ################################################################################# use strict; use Carp; use Class::AutoClass; use vars qw(@AUTO_ATTRIBUTES @OTHER_ATTRIBUTES @CLASS_ATTRIBUTES %SYNONYMS %AUTODB); use base qw(Data::Babel::Base); # babel, name, id, autodb, log, verbose - methods defined in Base # inputs, namespace, query, view are for Pipeline. # used here to generate Pipeline Steps for implicit masters # will be needed someday for redundant MapTables @AUTO_ATTRIBUTES=qw(idtype implicit history view inputs namespace query); @OTHER_ATTRIBUTES=qw(explicit degree); @CLASS_ATTRIBUTES=qw(); %SYNONYMS=(tablename=>'name'); %AUTODB= (-collection=>'Master ',-keys=>qq(name string,implicit int)); Class::AutoClass::declare; # sub tablename { # my $self=shift; # my $tablename=@_? $self->{tablename}: $self->{tablename}; # unless ($tablename) { # $tablename=$self->name; # $tablename.='_master' unless $tablename=~/_master$/; # } # $tablename; # } # must run after Babel initialized sub connect_idtype { my $self=shift; my $idtype_name=$self->name; $idtype_name=~s/_master$//; # strip _master from Master name $self->{idtype}=$self->babel->name2idtype($idtype_name) or confess 'Trying to define Master for unkown IdType '.$idtype_name; } # opposite of implicit sub explicit { my $self=shift; @_? !$self->implicit(!$_[0]): !$self->implicit; } # degree is number of MapTables containing this guy's IdType # compute degree from IdType sub degree {shift->idtype->degree} # for compatibility with MapTable. so code can call $xxx->idtypes w/o worrying sub idtypes { [shift->idtype] } # # only used in collection # sub has_query { # my $self=shift; # $self->query? 'yes': 'no'; # } 1;