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 )