# Copyright (c) 2001-2012 NetApp, Inc., All Rights Reserved # Any use, modification, or distribution is prohibited # without prior written consent from NetApp, Inc. # ## @summary Abstract base class for SysManager CS modules ## @author dl-nacl-dev@netapp.com ## @status shared ## @pod here =head1 NAME NACL::CS::ComponentState::SysManager =head1 SYNOPSIS use base 'NACL::CS::ComponentState::SysManager'; =head1 DESCRIPTION NACL::CS::ComponentState::SysManager is an abstract base class for all SysManager Component state libraries. It is derived from L and it provides SysManager specific component base class methods. The implementation and documentation of provided functionality is present in L. =head1 ATTRIBUTES Same as those of L (command interfaces are constrained to be sub-classes of C.) =cut package NACL::CS::ComponentState::SysManager; use strict; use warnings; use base 'NACL::CS::ComponentState'; use NATE::Log qw(log_global); my $Log = log_global(); my $may_enter = $Log->may_enter(); my $may_exit = $Log->may_exit(); use NATE::Exceptions::Argument qw(:try); use Params::Validate qw(validate_with HASHREF ARRAYREF); use Class::MethodMaker [ scalar => [ { -type => 'NACL::C::SysManager::SMClient' }, 'command_interface', ], ]; =head2 _check_for_required_filter_fields $pkg->_check_for_required_filter_fields( filter => $filter, required_fields => [ qw(field1 field2) ] ); This method checks the filter for all fields that are mandatory. =over =item Options =over =item C<< filter => $filter >> (Required) The filter hash-reference. =item C<< required_fields => [ $field1, $field2 ] >> (Required) An array-reference of fields that are mandatory. =back =back =cut sub _check_for_required_filter_fields { $Log->enter() if $may_enter; my ( $pkg, @args ) = @_; my %opts = validate_with( params => \@args, spec => { filter => { type => HASHREF }, required_fields => { type => ARRAYREF } } ); my @required_fields = @{ $opts{required_fields} }; foreach my $field (@required_fields) { if ( !defined $opts{filter}->{$field} ) { my $error; if ( @required_fields == 1 ) { $error = "'$required_fields[0]' needs "; } else { my $last = pop @required_fields; my @fields; foreach my $req_field (@required_fields) { push @fields, "'$req_field'"; } $error = join ', ', @fields; $error .= " and '$last' need "; } $error .= "to be provided in the filter for $pkg->fetch to work"; $Log->exit() if $may_exit; NATE::Exceptions::Argument->throw($error); } } $Log->exit() if $may_exit; } 1;