BPM-Engine

 view release on metacpan or  search on metacpan

lib/BPM/Engine/Role/HandlesIO.pm  view on Meta::CPAN

package BPM::Engine::Role::HandlesIO;
BEGIN {
    $BPM::Engine::Role::HandlesIO::VERSION   = '0.01';
    $BPM::Engine::Role::HandlesIO::AUTHORITY = 'cpan:SITETECH';
    }

use Moose::Role;
use namespace::autoclean;

before '_execute_implementation' => sub {
    my ($self, $activity, $instance) = @_;

    if ($activity->input_sets) {
        my $pi         = $instance->process_instance;
        my $artifacts  = $pi->process->package->artifacts;
        my $attributes = $pi->attributes_rs;

        my @inputs = ();
        foreach my $set (@{ $activity->input_sets }) {
            @inputs = _validate_inputset($pi, $set, $attributes, $artifacts);
            last if scalar @inputs;
            }
        die("Incomplete InputSets") unless scalar @inputs;

        $instance->update({ inputset => [@inputs] });
        }
    else {
        #warn "No InputSets";
        }
    return;
    };

after '_execute_implementation' => sub {
    my ($self, $task, $instance) = @_;
    #XXX task?
    my $activity = $instance->activity;
    if ($activity->output_sets) {
        my $pi         = $instance->process_instance;
        my $artifacts  = $pi->process->package->artifacts;
        my $attributes = $pi->attributes_rs;
        my $result     = $instance->taskresult;

        foreach my $set (@{ $activity->output_sets }) {
            _set_output($pi, $set, $attributes, $artifacts, $result);
            }
        }
    else {
        #warn "No InputSets";
        }
    return;
    };

sub _validate_inputset {
    my ($pi, $ioset, $attributes, $artifacts) = @_;

    my @inputs = ();

    foreach my $input (@{ $ioset->{Input} }, @{ $ioset->{ArtifactInput} }) {
        my ($art) = grep { $input->{ArtifactId} eq $_->{Id} } @{$artifacts};
        die("ArtifactId '" . $input->{ArtifactId} . " not specified")
            unless $art;

        if ($art->{ArtifactType} eq 'DataObject') {
            die "Useless use of empty Artifact" unless $art->{DataObject};
            die "Useless use of empty DataObject"
                unless $art->{DataObject}->{DataField};

            my @fields =



( run in 1.571 second using v1.01-cache-2.11-cpan-39bf76dae61 )