Raw content of BioMart::Configuration::BooleanFilter # $Id: BooleanFilter.pm,v 1.3 2008/04/09 12:52:33 syed Exp $ # # BioMart module for BioMart::Configuration::BooleanFilter # # You may distribute this module under the same terms as perl itself # POD documentation - main docs before the code =head1 NAME BioMart::Configuration::BooleanFilter =head1 SYNOPSIS Object responsible for boolean included/excluded filters =head1 DESCRIPTION Object responsible for boolean included/excluded filters =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::Configuration::BooleanFilter; # inherits from FilterBase, overrides toSQL use strict; use warnings; use Digest::MD5; use base qw(BioMart::Configuration::BaseFilter); =head2 _new Usage : no arguments Description: creates a new BooleanFilter object which can contain a single Attribue object and a flag for excluded vs included Returntype : BioMart::Configuration::BooleanFilter Exceptions : none Caller : general =cut sub _new { my ($self, @param) = @_; $self->SUPER::_new(@param); $self->attr('attribute',undef); $self->attr('excluded',0); $self->attr('number_flag',0); } sub _init { my ($self, @param) = @_; $self->SUPER::_init(@param); my $proto = shift @param; $self->attr('attribute', $proto->attribute); $self->attr('excluded', 0); $self->attr('number_flag',0); } =head2 attribute Usage : Arg[1] - (optional) BioMart::Configuration::Attribute object Description: get/set method for the Attribute object for this BooleanFilter Returntype : BioMart::Configuration::Attribute object Exceptions : none Caller : caller =cut sub attribute { # stores attribute my ($self, $attribute) = @_; if ($attribute){ $self->set('attribute', $attribute); } return $self->get('attribute'); } =head2 table Usage : Description: returns the table name associated with this filter; Returntype : String table name Exceptions : none Caller : caller =cut sub table { my $self = shift; my $attribute = $self->get('attribute'); return $attribute->table; } =head2 setExcluded Usage : no arguments Description: sets this BooleanFilter as an exclude rather than include filter Returntype : none Exceptions : none Caller : caller =cut sub setExcluded { my ($self, $val) = @_; if (defined($val)) { $self->set('excluded',$val); } else { $self->set('excluded',1); } } =head2 getExcluded Usage : no arguments Description: gets this BooleanFilter as an exclude rather than include filter Returntype : none Exceptions : none Caller : caller =cut sub getExcluded { my $self = shift; return $self->get('excluded'); } =head2 setIncluded Usage : no arguments Description: sets this BooleanFilter as an include rather than exclude filter Returntype : none Exceptions : none Caller : caller =cut sub setIncluded { my $self = shift; $self->set('excluded',0); } =head2 setNumberFlag Usage : $filt->setNumberFlag; Description: set the number flag for 1,0, null type filters Returntype : none Exceptions : none Caller : caller =cut sub setNumberFlag { my $self = shift; $self->set('number_flag',1); } =head2 getNumberFlag Usage : $filt->getNumberFlag; Description: geet the number flag for 1,0, null type filters Returntype : none Exceptions : none Caller : caller =cut sub getNumberFlag { my $self = shift; return $self->get('number_flag'); } sub _toSQL { my $self = shift; my $attribute = $self->attribute(); my $condition = $self->get('number_flag') ? ' > 0' : ' IS NOT NULL'; if ($self->get('excluded')){ $condition = $self->get('number_flag') ? ' = 0' : ' IS NULL'; } return $attribute->toSQL().$condition; } sub _hashCode { my $self = shift; my $digest = Digest::MD5->new; $digest->add($self->SUPER::_hashCode); $digest->add($self->table) if ($self->table); $digest->add($self->get('excluded')); $digest->add($self->attribute()->hashCode); return $digest->hexdigest; } 1;