package Win32::SqlServer::DTS::Package::Step::Result;

=head1 NAME

Win32::SqlServer::DTS::Package::Step::Result - a Perl class to represent a DTS Package Step execution result.

=head1 SYNOPSIS

    use Win32::SqlServer::DTS::Package::Step::Result;

=head1 DESCRIPTION

C<Win32::SqlServer::DTS::Package::Step::Result> does not exists in the regular MS SQL Server DTS 2000 API. 

=head2 EXPORT

Nothing.

=cut

use 5.008008;
use strict;
use warnings;
use base qw(Class::Accessor);
use Carp qw(confess);
use XML::Simple;
use Params::Validate qw(validate :types);
use Hash::Util qw(lock_keys);

__PACKAGE__->follow_best_practice();
__PACKAGE__->mk_ro_accessors(
    qw(exec_status step_name error_code source description));

our $VERSION = '0.01';

=head2 METHODS

=head3 new

Instantiates a new C<Win32::SqlServer::DTS::Package::Step::Result>. Expects as a parameter a hash reference with the following keys:

=over

=item *
error_code: scalar value.

=item *
source: scalar value.

=item *
description: scalar value.

=item *
step_name: scalar value.

=item *
is_success: "boolean". Accepts 0 or 1.

=item *
exec_status: scalar value.

=back

=cut

sub new {

    my $class = shift;

    validate(
        @_,
        {
            error_code  => { type => SCALAR },
            source      => { type => SCALAR },
            description => { type => SCALAR },
            step_name   => { type => SCALAR },
            is_success  => { type => SCALAR, regex => qr/[10]{1}/ },
            exec_status => { type => SCALAR }
        }
    );

    my $self = shift;

    bless $self, $class;

    lock_keys( %{$self} );

    return $self;

}

=head3 to_string

Returns the C<DTS:Package::Step::Result> as a pure text content. Useful for simple reports.

=cut

sub to_string {

    my $self = shift;

    my @attrib_names = keys( %{$self} );

	my $string;

    foreach my $attrib_name (@attrib_names) {

        $string .= "$attrib_name => $self->{$attrib_name}\n";

    }

	return $string;

}

=head3 to_xml

Returns the C<DTS:Package::Step::Result> as an XML content.

=cut

sub to_xml {

    my $self = shift;

    my $xs = XML::Simple->new();

    return $xs->XMLout($self);

}

=head3 is_success

Returns true if the step was executed successfully.

=cut

sub is_success {

    my $self = shift;

    return $self->{is_success};

}

1;

__END__

=head1 SEE ALSO

=over

=item *
C<Win32::SqlServer::DTS::Package::Step> documentation.

=back

=head1 AUTHOR

Alceu Rodrigues de Freitas Junior, E<lt>arfreitas@cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2008 by Alceu Rodrigues de Freitas Junior

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.

=cut
