Raw content of BioMart::Configuration::Attribute # $Id: Attribute.pm,v 1.4 2008/04/09 12:52:33 syed Exp $ # # BioMart module for BioMart::Configuration::Attribute # # You may distribute this module under the same terms as perl itself # POD documentation - main docs before the code =head1 NAME BioMart::Configuration::Attribute =head1 SYNOPSIS Represents an attribute in a BioMart query =head1 DESCRIPTION Attribute objects model the concept of a BioMart attribute ie a column in a mart ResultTable that can be requested as part of a mart query. =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::Attribute; use strict; use warnings; use Digest::MD5; use Data::Dumper; use base qw(BioMart::Root); use constant NAME => "name"; use constant DISPLAYNAME => "displayName"; use constant DESCRIPTION => "description"; use constant IMAGEURL => "imageURL"; use constant TABLE => "table"; use constant RELATIONALATTRIBUTE => "relational_attribute"; use constant DATASETNAME => "dataSetName"; use constant INTERFACE => "interface"; use constant KEY => "key"; use constant WIDTH => "width"; use constant LINK => "link"; use constant DATASETLINK => "datasetLink"; use constant DEFAULT => "default"; use constant POINTEDFROMDATASET => "pointedFromDataset"; use constant POINTEDFROMATTRIBUTE => "pointedFromAttribute"; use constant POINTEDFROMINTERFACE => "pointedFromInterface"; use constant DEPENDSON => "dependsOn"; use constant DEPENDSONTYPE => "dependsOnType"; use constant ATTRIBUTES => "attributes"; use constant TITLES => [ NAME, DISPLAYNAME, DESCRIPTION, IMAGEURL, TABLE, RELATIONALATTRIBUTE, DATASETNAME, INTERFACE, KEY, WIDTH, LINK, DATASETLINK, DEFAULT, POINTEDFROMDATASET, POINTEDFROMINTERFACE , POINTEDFROMATTRIBUTE , DEPENDSON, DEPENDSONTYPE, ATTRIBUTES ]; =head2 _new Usage : minimal (use setters for name, displayName, etc: my $att = BioMart::Configuration::Attribute->new; fully configured: my $att = BioMart::Configuration::Attribute->new( 'name' => $name, 'displayName' => $dname, 'table' => $table, 'relational_attribute' => $rattribute, 'dataSetName' => $subname ); Description: creates a new Attribute object. Returntype : BioMart::Configuration::Attribute Exceptions : insufficient arguments Caller : general =cut sub _new { my ($self, @param) = @_; $self->SUPER::_new(@param); $self->addParams(TITLES, @param); $self->attr('dependency', []); } #non interface Methods =head2 name Usage : my $attName = $att->name; $att->name($newName); Description: get/set for internal name Returntype : scalar $name Exceptions : none Caller : general =cut sub name { my ($self, $value) = @_; if ($value){ $self->setParam(NAME, $value); } return $self->getParam(NAME); } =head2 imageURL Usage : Arg [1] - (optional) string $imageURL Description: get/set for imageURL, a relative URL. This is only used by MartView. Returntype : string Exceptions : none Caller : general =cut sub imageURL { # stores display name my ($self, $value) = @_; if ($value){ $self->setParam(IMAGEURL, $value); } return $self->getParam(IMAGEURL); } =head2 attributes Usage : Arg [1] - (optional) string $attributes Description: get/set for attributes. Returntype : string Exceptions : none Caller : general =cut sub attributes { # stores display name my ($self, $value) = @_; if ($value){ $self->setParam(ATTRIBUTES, $value); } return $self->getParam(ATTRIBUTES); } =head2 displayName Usage : Arg [1] - (optional) string $display_name Description: get/set for display name Returntype : string Exceptions : none Caller : general =cut sub displayName { my ($self, $value) = @_; if ($value){ $self->setParam(DISPLAYNAME, $value); } return $self->getParam(DISPLAYNAME); } =head2 description Usage : Arg [1] - (optional) string $description Description: get/set for description Returntype : string Exceptions : none Caller : general =cut sub description { # stores description my ($self, $value) = @_; if ($value){ $self->setParam(DESCRIPTION, $value); } return $self->getParam(DESCRIPTION); } =head2 dataSetName Usage : my $subName = $att->dataSetName; $att->dataSetName->($newName); Description: get/set for the name of the dataSet which hosts this attribute. Returntype : scalar $name Exceptions : none Caller : general =cut sub dataSetName { my ($self, $value) = @_; if ($value){ $self->setParam(DATASETNAME, $value); } return $self->getParam(DATASETNAME); } =head2 interface Usage : my $interface = $att->interface; $att->interface->($newName); Description: get/set for the name of the interface which hosts this attribute. Returntype : scalar $name Exceptions : none Caller : general =cut sub interface { my ($self, $value) = @_; if ($value){ $self->setParam(INTERFACE, $value); } return $self->getParam(INTERFACE); } =head2 table Usage : Arg [1] - (optional) string $table Description: get/set for table Returntype : string Exceptions : none Caller : general =cut sub table { my ($self, $value) = @_; if ($value){ $self->setParam(TABLE, $value); } return $self->getParam(TABLE); } =head2 relationalAttribute Usage : Arg [1] - (optional) string $relational_attribute Description: get/set for relational attribute Returntype : string Exceptions : none Caller : general =cut sub relationalAttribute { my ($self, $value) = @_; if ($value){ $self->setParam(RELATIONALATTRIBUTE, $value); } return $self->getParam(RELATIONALATTRIBUTE); } =head2 key Usage : Arg [1] - (optional) string $key for table joining Description: get/set for key Returntype : string Exceptions : none Caller : general =cut sub key { my ($self, $value) = @_; if ($value){ $self->setParam(KEY, $value); } return $self->getParam(KEY); } =head2 width Usage : Arg [1] - (optional) string $width for table joining Description: get/set for width Returntype : string Exceptions : none Caller : general =cut sub width { my ($self, $value) = @_; if ($value){ $self->setParam(WIDTH, $value); } return $self->getParam(WIDTH); } =head2 link Usage : Arg [1] - (optional) string $link for URL display Description: get/set for linkURL Returntype : string Exceptions : none Caller : general =cut sub link { my ($self, $value) = @_; if ($value){ $self->setParam(LINK, $value); } return $self->getParam(LINK); } =head2 datasetLink Usage : Arg [1] - (optional) string $datasetLink Description: get/set for datasetLink Returntype : string Exceptions : none Caller : general =cut sub datasetLink { my ($self, $value) = @_; if ($value){ $self->setParam(DATASETLINK, $value); } return $self->getParam(DATASETLINK); } =head2 default Usage : Arg [1] - (optional) string $default Description: get/set for default atribute(s) for a dataset Returntype : string Exceptions : none Caller : general =cut sub default { my ($self, $value) = @_; if ($value){ $self->setParam(DEFAULT, $value); } return $self->getParam(DEFAULT); } =head2 pointedFromAttribute Usage : Arg [1] - (optional) string $pointedFromDataset Description: get/set for pointedFromDataset atribute(s) for a dataset Returntype : string Exceptions : none Caller : general =cut sub pointedFromAttribute { my ($self, $value) = @_; if ($value){ $self->setParam(POINTEDFROMATTRIBUTE, $value); } return $self->getParam(POINTEDFROMATTRIBUTE); } =head2 pointedFromDataset Usage : Arg [1] - (optional) string $pointedFromDataset Description: get/set for pointedFromDataset atribute(s) for a dataset Returntype : string Exceptions : none Caller : general =cut sub pointedFromDataset { my ($self, $value) = @_; if ($value){ $self->setParam(POINTEDFROMDATASET, $value); } return $self->getParam(POINTEDFROMDATASET); } =head2 pointedFromInterface Usage : Arg [1] - (optional) string $pointedFromInterface Description: get/set for pointedFromInterface atribute(s) for a dataset Returntype : string Exceptions : none Caller : general =cut sub pointedFromInterface { my ($self, $value) = @_; if ($value){ $self->setParam(POINTEDFROMINTERFACE, $value); } return $self->getParam(POINTEDFROMINTERFACE); } =head2 dependsOn Usage : Arg [1] - (optional) string $dependsOn delimited by commas Description: get/set for dependsOn atribute(s) for a dataset Returntype : string Exceptions : none Caller : general =cut sub dependsOn { my ($self, $value) = @_; if ($value){ $self->setParam(DEPENDSON, $value); } return $self->getParam(DEPENDSON); } =head2 dependsOnType Usage : Arg [1] - (optional) string $dependsOnType Description: get/set for dependsOnType - all or any are acceptable. Returntype : string Exceptions : none Caller : general =cut sub dependsOnType { my ($self, $value) = @_; if ($value){ $self->setParam(DEPENDSONTYPE, $value); } return $self->getParam(DEPENDSONTYPE); } =head2 addDependency Usage : usage Description: Description Returntype : Exceptions : none Caller : caller =cut sub addDependency { my ($self, $resolvedDependency) = @_; push @{$self->get('dependency')}, $resolvedDependency; } =head2 dependencies Usage : usage Description: Description Returntype : Exceptions : none Caller : caller =cut sub dependencies { my $self = shift; return $self->get('dependency'); } =head2 toSQL Usage : no arguments Description: returns the SQL stub for the attribute (ie) table.column Returntype : string Exceptions : none Caller : general =cut sub toSQL { my $self = shift; return $self->getParam(TABLE).'.'.$self->getParam(RELATIONALATTRIBUTE); } sub _hashCode { my $self = shift; my $digest = Digest::MD5->new; # Get uninitialized value in subroutine entry warnings whenever one of # the below params has been set from an XML::Simple hash ie dataSetName # is always OK # investigate keyAttrs setting in XMLIn $digest->add($self->name) if ($self->name); $digest->add($self->displayName) if ($self->displayName); $digest->add($self->dataSetName) if ($self->dataSetName); $digest->add($self->table) if ($self->table); $digest->add($self->relationalAttribute) if ($self->relationalAttribute); $digest->add($self->key) if ($self->key); return $digest->hexdigest; } 1;