From 29d50b0af0d91ed23a5bd8673db4b718d05a6d83 Mon Sep 17 00:00:00 2001 From: Alexander Kozienko Date: Thu, 25 Apr 2019 11:04:07 +0300 Subject: [PATCH 1/4] set values in forked tokens --- src/ProcessEngine.php | 9 +++++++++ src/Transition.php | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/ProcessEngine.php b/src/ProcessEngine.php index f51c4ac..bd75e2b 100644 --- a/src/ProcessEngine.php +++ b/src/ProcessEngine.php @@ -175,6 +175,7 @@ private function doProceed(Token $token) } $first = true; + /** @var Transition $transition */ foreach ($transitions as $transition) { $this->log('Next transition: %s -> %s', $transition->getFrom() ? $transition->getFrom()->getLabel() : 'start', @@ -185,12 +186,20 @@ private function doProceed(Token $token) $first = false; $token->addTransition(TokenTransition::createFor($transition, $tokenTransition->getWeight())); + foreach ($transition->getTokenValues() as $key => $value) { + set_value($token, $key, $value); + } + $this->transition($token); } else { $newToken = $this->forkProcessToken($token); $newToken->addTransition(TokenTransition::createFor($transition, $transition->getWeight())); $newToken->getCurrentTransition()->setWeight($tokenTransition->getWeight()); + foreach ($transition->getTokenValues() as $key => $value) { + set_value($newToken, $key, $value); + } + $this->transition($newToken); } } diff --git a/src/Transition.php b/src/Transition.php index 605ddee..f5420a7 100644 --- a/src/Transition.php +++ b/src/Transition.php @@ -20,12 +20,19 @@ class Transition */ private $_process; + /** + * @var array + */ + private $tokenValues; + public function __construct() { $this->setId(Uuid::generate()); $this->setWeight(1); $this->setAsync(false); $this->setActive(true); + + $this->tokenValues = []; } /** @@ -166,4 +173,14 @@ public function getState(): string { return get_value($this, 'state'); } + + public function setTokenValues(?array $values): void + { + $this->tokenValues = $values; + } + + public function getTokenValues(): array + { + return $this->tokenValues; + } } From 394666014f9c8c9ebb3dbecb04c2a492a0e2e2e4 Mon Sep 17 00:00:00 2001 From: Alexander Kozienko Date: Fri, 26 Apr 2019 12:14:55 +0300 Subject: [PATCH 2/4] fix graph visualization --- src/Transition.php | 2 +- src/Visual/BuildDigraphScript.php | 2 +- src/Visual/VisualizeFlow.php | 17 ++++++++--------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Transition.php b/src/Transition.php index f5420a7..d4aed2e 100644 --- a/src/Transition.php +++ b/src/Transition.php @@ -174,7 +174,7 @@ public function getState(): string return get_value($this, 'state'); } - public function setTokenValues(?array $values): void + public function setTokenValues(array $values): void { $this->tokenValues = $values; } diff --git a/src/Visual/BuildDigraphScript.php b/src/Visual/BuildDigraphScript.php index ff30366..c7d2c45 100644 --- a/src/Visual/BuildDigraphScript.php +++ b/src/Visual/BuildDigraphScript.php @@ -74,7 +74,7 @@ public function build(Graph $graph): string } } -//dump($digraph->render());die; + return $digraph->render(); } } diff --git a/src/Visual/VisualizeFlow.php b/src/Visual/VisualizeFlow.php index 6d4f8e6..edf5428 100644 --- a/src/Visual/VisualizeFlow.php +++ b/src/Visual/VisualizeFlow.php @@ -157,7 +157,7 @@ private function createStartTransition(Graph $graph, Vertex $from, Transition $t $edge->setAttribute('alom.graphviz', [ 'label' => $transition->getName(), - 'id' => $transition->getId(), + 'id' => sprintf('%s->%s', $from->getId(), $to->getId()), ]); } @@ -171,13 +171,15 @@ private function createEndTransition(Graph $graph, Vertex $to, Transition $trans $edge = $from->createEdgeTo($to); } - $edge->setAttribute('graphviz.label', $transition->getName()); - $edge->setAttribute('graphviz.id', $transition->getId()); - $edge->setAttribute('pvm.transition_id', $transition->getId()); + $id = sprintf('%s->%s', $from->getId(), $to->getId()); + + $edge->setAttribute('graphviz.label', $id); + $edge->setAttribute('graphviz.id', $id); + $edge->setAttribute('pvm.transition_id', $id); $edge->setAttribute('alom.graphviz', [ 'label' => $transition->getName(), - 'id' => $transition->getId(), + 'id' => $id, ]); } @@ -189,10 +191,7 @@ private function createMiddleTransition(Graph $graph, Transition $transition) $edge = $from->createEdgeTo($to); $edge->setAttribute('pvm.transition_id', $transition->getId()); $edge->setAttribute('graphviz.id', $transition->getId()); - $edge->setAttribute( - 'graphviz.label', - $transition->getName() - ); + $edge->setAttribute('graphviz.label', $transition->getName()); $edge->setAttribute('alom.graphviz', [ 'id' => $transition->getId(), From 2f91b72486f56dd0bed3f9e569141d7c8a9e919c Mon Sep 17 00:00:00 2001 From: Alexander Kozienko Date: Fri, 26 Apr 2019 12:21:00 +0300 Subject: [PATCH 3/4] fix option --- src/Visual/VisualizeFlow.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Visual/VisualizeFlow.php b/src/Visual/VisualizeFlow.php index edf5428..31c8b3a 100644 --- a/src/Visual/VisualizeFlow.php +++ b/src/Visual/VisualizeFlow.php @@ -118,7 +118,7 @@ public function display(Graph $graph) private function createVertex(Graph $graph, Node $node) { /** @var Options $options */ - $options = get_object($node, 'visual', Options::class) ?: new Options(); + $options = get_object($node, 'option', Options::class) ?: new Options(); $vertex = $graph->createVertex($node->getId()); $vertex->setAttribute('graphviz.label', $node->getLabel() ?: $node->getId()); $vertex->setAttribute('graphviz.id', $node->getId()); From 83f7f13f4d4e41a186fde021a6526675ca22edd3 Mon Sep 17 00:00:00 2001 From: Alexander Kozienko Date: Fri, 26 Apr 2019 12:31:24 +0300 Subject: [PATCH 4/4] add event node type --- src/Visual/VisualizeFlow.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Visual/VisualizeFlow.php b/src/Visual/VisualizeFlow.php index 31c8b3a..7be5025 100644 --- a/src/Visual/VisualizeFlow.php +++ b/src/Visual/VisualizeFlow.php @@ -131,6 +131,9 @@ private function createVertex(Graph $graph, Node $node) case 'gateway': $shape = 'diamond'; break; + case 'event': + $shape = 'circle'; + break; default: $shape = 'box'; }