Raw content of BioMart::Configuration::AttributeList # $Id: AttributeList.pm,v 1.4 2008/04/09 12:52:33 syed Exp $ # # BioMart module for BioMart::Configuration::AttributeList # # You may distribute this module under the same terms as perl itself # POD documentation - main docs before the code =head1 NAME BioMart::Configuration::AttributeList =head1 SYNOPSIS Stores an array of attribute objects, in order. =head1 DESCRIPTION Stores an array of attribute objects. Used to handle the behaviour of exportables in the system. When linking two Datasets together, the BioMart::QueryRunner object will add the BioMart::AttributeList object exported from the Exporting Dataset to the Query targeted to the Exporting Dataset. =head1 AUTHOR - Arek Kasprzyk, Syed Haider, Richard Holland, Darin London, 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::Configuration::AttributeList; use strict; use warnings; use Digest::MD5; use base qw(BioMart::Configuration::Attribute); use constant LINKNAME => "linkName"; use constant LINKVERSION => "linkVersion"; use constant ATTRIBUTESTRING => "attribute_string"; use constant ORDERBYSTRING => "orderby_string"; use constant TYPE => "type"; use constant TITLES => [ LINKNAME, LINKVERSION, ATTRIBUTESTRING, ORDERBYSTRING, TYPE ]; =head2 _new Usage : minimal: my $alist = BioMart::AttributeList->new(); with name and dataSetName my $alist = BioMart::AttributeList->new( 'name' => $name, 'dataSetName' => $subName ); To be used as a Link Exportable (note orderby_string is optional): my $alist = BioMart::AttributeList->new( 'name' => $name, 'dataSetName' => $subName, 'linkName' => $linkName, 'attribute_string' => $attribute_string, 'orderby_string' => $orderby_string ); Description: creates a new AttributeList object capable of storing an array of Attribute objects Returntype : BioMart::Configuration::AttributeList Exceptions : none Caller : caller =cut sub _new { my ($self, @param) = @_; $self->SUPER::_new(@param); $self->addParams(TITLES, @param); $self->attr('attributes', []); $self->attr('orderby_attributes', []); $self->attr('default', 0); } =head2 linkName Usage : my $linkName = $alist->linkName; $alist->linkName($newLinkName); Description : get/set the linkName of this BioMart::AttributeList object. Returntype : scalar $linkName Exceptions : none Caller : caller =cut sub linkName { my ($self, $name) = @_; if ($name) { $self->setParam(LINKNAME, $name); } return $self->getParam(LINKNAME); } =head2 linkVersion Usage : my $linkVersion = $alist->linkVersion; $alist->linkVersion($newLinkVersion); Description : get/set the linkVersion of this BioMart::AttributeList object. Returntype : scalar $linkVersion Exceptions : none Caller : caller =cut sub linkVersion { my ($self, $name) = @_; if ($name) { $self->setParam(LINKVERSION, $name); } return $self->getParam(LINKVERSION); } =head2 attributeString Usage : my $attributeString = $alist->attributeString; $alist->attributeString($newAttString); Description : get/set the attributeString of this BioMart::AttributeList object. Returntype : scalar $attributeString Exceptions : none Caller : caller =cut sub attributeString { my ($self, $name) = @_; if ($name) { $self->setParam(ATTRIBUTESTRING, $name); } return $self->getParam(ATTRIBUTESTRING); } =head2 orderByString Usage : my $orderByString = $alist->orderByString; $alist->orderByString($newOrderByString); Description : get/set the orderByString of this BioMart::AttributeList object. Returntype : scalar $orderByString (a comma separated list of BioMart::Configuration::Attribute names) Exceptions : none Caller : caller =cut sub orderByString { my ($self, $name) = @_; if ($name) { $self->setParam(ORDERBYSTRING, $name); } return $self->getParam(ORDERBYSTRING); } =head2 type Usage : $exp->type(); Description : get/set for the exportable type object. Returntype : string Exceptions : none Caller : caller =cut sub type { my ($self, $name) = @_; if ($name) { $self->setParam(TYPE, $name); } return $self->getParam(TYPE); } =head2 addAttribute Usage : $alist->addAttribute($att); Description: adds a BioMart::Attribute object to the AttributeList, maintaining the order of addition. Returntype : none Exceptions : none Caller : caller =cut sub addAttribute { my ($self, $attribute) = @_; my $attributes = $self->get('attributes'); push @{$attributes}, $attribute; $self->set('attributes', $attributes); } =head2 getAllAttributes Usage : my $atts = $alist->getAllAttributes; Description : get all Attributes added to this AttributeList. Primarily used by BioMart::ResultTable to support getFieldByName and getIndexByName, but may also be used by DatasetI objects which override or ignore the default toSQL method. Returntype : array_ref of BioMart::Attribute objects Exceptions : none Caller : BioMart::ResultTable, and BioMart::DatasetI implementatiions. =cut sub getAllAttributes { my $self = shift; return $self->get('attributes'); } sub getAttributeByName { my ($self,$name) = @_; my $attribute; my $attributes = $self->get('attributes'); foreach (@$attributes){ if ($_->name eq $name){ $attribute = $_; last; } } return $attribute; } =head2 addOrderByAttribute Usage : $alist->addSortByAttribute($att); Description: adds a BioMart::Attribute object to the AttributeList sortBy list, maintaining the order of addition. Returntype : none Exceptions : none Caller : caller =cut sub addOrderByAttribute { my ($self, $attribute) = @_; my $attributes = $self->get('orderby_attributes'); push @{$attributes}, $attribute; $self->set('orderby_attributes', $attributes); } =head2 toSQL Usage : my $sql = $alist->toSQL; Description: returns a SQL stub for all the attributes stored in the AttributeList Returntype : string Exceptions : none Caller : caller =cut sub toSQL { # gets each attribute, inserts ',' in between my $self = shift; my $sql; my $attributes = $self->get('attributes'); foreach my $attribute (@$attributes){ $sql .= ' '.$attribute->toSQL().','; } chop $sql; return $sql; } =head2 toOrderBySQL Usage : my $sql = $alist->toOrderBySQL; Description: returns a SQL stub for all the attributes stored in the AttributeList sortBy list. Returntype : string Exceptions : none Caller : caller =cut sub toOrderBySQL { # gets each attribute, inserts ',' in between my $self = shift; my $sql; my $attributes = $self->get('orderby_attributes'); foreach my $attribute (@$attributes){ $sql .= ' '.$attribute->toSQL().','; } chop $sql; return $sql; } =head2 setDefault Usage : $alist->setDefault; Description: sets this AttributeList as the default Returntype : none Exceptions : none Caller : caller =cut sub setDefault { my $self = shift; $self->set('default',1); } =head2 unSetDefault Usage : $alist->unSetDefault; Description: this BioMart::AttributeList will no longer be the default. Returntype : none Exceptions : none Caller : caller =cut sub unSetDefault { my $self = shift; $self->set('default',0); } =head2 defaultList Usage : no arguments Description: returns 1 if this AttributeList is the default, otherwise 0 Returntype : 0,1 Exceptions : none Caller : caller =cut sub defaultList { my $self = shift; return $self->get('default'); } sub _hashCode { my $self = shift; my $digest = Digest::MD5->new; $digest->add($self->name) if ($self->name); $digest->add($self->linkName) if ($self->linkName); $digest->add($self->dataSetName) if ($self->dataSetName); my $atts = $self->get('attributes'); foreach my $att (@{$atts}) { $digest->add($att->hashCode); } $digest->add($self->defaultList); return $digest->hexdigest; } 1;