From 94ae7c0505f1e2bf6915e1d28ae71b6a20bc686d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Pineau?= Date: Tue, 30 Apr 2019 16:24:14 +0200 Subject: [PATCH] [Workflow] Fixed dumping when many transition with same name exist --- .../Workflow/Dumper/GraphvizDumper.php | 25 +++-- .../Tests/Dumper/GraphvizDumperTest.php | 104 +++++++++--------- 2 files changed, 68 insertions(+), 61 deletions(-) diff --git a/src/Symfony/Component/Workflow/Dumper/GraphvizDumper.php b/src/Symfony/Component/Workflow/Dumper/GraphvizDumper.php index 88a6888ad953c..1ed0617b355cc 100644 --- a/src/Symfony/Component/Workflow/Dumper/GraphvizDumper.php +++ b/src/Symfony/Component/Workflow/Dumper/GraphvizDumper.php @@ -120,8 +120,8 @@ protected function addTransitions(array $transitions) { $code = ''; - foreach ($transitions as $place) { - $code .= sprintf(" transition_%s [label=\"%s\", shape=box%s];\n", $this->dotize($place['name']), $place['name'], $this->addAttributes($place['attributes'])); + foreach ($transitions as $k => $place) { + $code .= sprintf(" transition_%s [label=\"%s\", shape=box%s];\n", $k, $place['name'], $this->addAttributes($place['attributes'])); } return $code; @@ -134,12 +134,13 @@ protected function findEdges(Definition $definition) { $dotEdges = []; - foreach ($definition->getTransitions() as $transition) { + foreach ($definition->getTransitions() as $k => $transition) { foreach ($transition->getFroms() as $from) { $dotEdges[] = [ 'from' => $from, 'to' => $transition->getName(), 'direction' => 'from', + 'transition_number' => $k, ]; } foreach ($transition->getTos() as $to) { @@ -147,6 +148,7 @@ protected function findEdges(Definition $definition) 'from' => $transition->getName(), 'to' => $to, 'direction' => 'to', + 'transition_number' => $k, ]; } } @@ -162,12 +164,17 @@ protected function addEdges(array $edges) $code = ''; foreach ($edges as $edge) { - $code .= sprintf(" %s_%s -> %s_%s [style=\"solid\"];\n", - 'from' === $edge['direction'] ? 'place' : 'transition', - $this->dotize($edge['from']), - 'from' === $edge['direction'] ? 'transition' : 'place', - $this->dotize($edge['to']) - ); + if ('from' === $edge['direction']) { + $code .= sprintf(" place_%s -> transition_%s [style=\"solid\"];\n", + $this->dotize($edge['from']), + $this->dotize($edge['transition_number']) + ); + } else { + $code .= sprintf(" transition_%s -> place_%s [style=\"solid\"];\n", + $this->dotize($edge['transition_number']), + $this->dotize($edge['to']) + ); + } } return $code; diff --git a/src/Symfony/Component/Workflow/Tests/Dumper/GraphvizDumperTest.php b/src/Symfony/Component/Workflow/Tests/Dumper/GraphvizDumperTest.php index a5d9087ff533e..116f8000775b1 100644 --- a/src/Symfony/Component/Workflow/Tests/Dumper/GraphvizDumperTest.php +++ b/src/Symfony/Component/Workflow/Tests/Dumper/GraphvizDumperTest.php @@ -73,26 +73,26 @@ public function createComplexWorkflowDefinitionDumpWithMarking() place_e [label="e", shape=circle]; place_f [label="f", shape=circle]; place_g [label="g", shape=circle]; - transition_t1 [label="t1", shape=box, shape="box", regular="1"]; - transition_t2 [label="t2", shape=box, shape="box", regular="1"]; - transition_t3 [label="t3", shape=box, shape="box", regular="1"]; - transition_t4 [label="t4", shape=box, shape="box", regular="1"]; - transition_t5 [label="t5", shape=box, shape="box", regular="1"]; - transition_t6 [label="t6", shape=box, shape="box", regular="1"]; - place_a -> transition_t1 [style="solid"]; - transition_t1 -> place_b [style="solid"]; - transition_t1 -> place_c [style="solid"]; - place_b -> transition_t2 [style="solid"]; - place_c -> transition_t2 [style="solid"]; - transition_t2 -> place_d [style="solid"]; - place_d -> transition_t3 [style="solid"]; - transition_t3 -> place_e [style="solid"]; - place_d -> transition_t4 [style="solid"]; - transition_t4 -> place_f [style="solid"]; - place_e -> transition_t5 [style="solid"]; - transition_t5 -> place_g [style="solid"]; - place_f -> transition_t6 [style="solid"]; - transition_t6 -> place_g [style="solid"]; + transition_0 [label="t1", shape=box, shape="box", regular="1"]; + transition_1 [label="t2", shape=box, shape="box", regular="1"]; + transition_2 [label="t3", shape=box, shape="box", regular="1"]; + transition_3 [label="t4", shape=box, shape="box", regular="1"]; + transition_4 [label="t5", shape=box, shape="box", regular="1"]; + transition_5 [label="t6", shape=box, shape="box", regular="1"]; + place_a -> transition_0 [style="solid"]; + transition_0 -> place_b [style="solid"]; + transition_0 -> place_c [style="solid"]; + place_b -> transition_1 [style="solid"]; + place_c -> transition_1 [style="solid"]; + transition_1 -> place_d [style="solid"]; + place_d -> transition_2 [style="solid"]; + transition_2 -> place_e [style="solid"]; + place_d -> transition_3 [style="solid"]; + transition_3 -> place_f [style="solid"]; + place_e -> transition_4 [style="solid"]; + transition_4 -> place_g [style="solid"]; + place_f -> transition_5 [style="solid"]; + transition_5 -> place_g [style="solid"]; } '; } @@ -107,12 +107,12 @@ public function createSimpleWorkflowDumpWithMarking() place_a [label="a", shape=circle, style="filled"]; place_b [label="b", shape=circle]; place_c [label="c", shape=circle, color="#FF0000", shape="doublecircle"]; - transition_t1 [label="t1", shape=box, shape="box", regular="1"]; - transition_t2 [label="t2", shape=box, shape="box", regular="1"]; - place_a -> transition_t1 [style="solid"]; - transition_t1 -> place_b [style="solid"]; - place_b -> transition_t2 [style="solid"]; - transition_t2 -> place_c [style="solid"]; + transition_0 [label="t1", shape=box, shape="box", regular="1"]; + transition_1 [label="t2", shape=box, shape="box", regular="1"]; + place_a -> transition_0 [style="solid"]; + transition_0 -> place_b [style="solid"]; + place_b -> transition_1 [style="solid"]; + transition_1 -> place_c [style="solid"]; } '; } @@ -131,26 +131,26 @@ public function provideComplexWorkflowDumpWithoutMarking() place_e [label="e", shape=circle]; place_f [label="f", shape=circle]; place_g [label="g", shape=circle]; - transition_t1 [label="t1", shape=box, shape="box", regular="1"]; - transition_t2 [label="t2", shape=box, shape="box", regular="1"]; - transition_t3 [label="t3", shape=box, shape="box", regular="1"]; - transition_t4 [label="t4", shape=box, shape="box", regular="1"]; - transition_t5 [label="t5", shape=box, shape="box", regular="1"]; - transition_t6 [label="t6", shape=box, shape="box", regular="1"]; - place_a -> transition_t1 [style="solid"]; - transition_t1 -> place_b [style="solid"]; - transition_t1 -> place_c [style="solid"]; - place_b -> transition_t2 [style="solid"]; - place_c -> transition_t2 [style="solid"]; - transition_t2 -> place_d [style="solid"]; - place_d -> transition_t3 [style="solid"]; - transition_t3 -> place_e [style="solid"]; - place_d -> transition_t4 [style="solid"]; - transition_t4 -> place_f [style="solid"]; - place_e -> transition_t5 [style="solid"]; - transition_t5 -> place_g [style="solid"]; - place_f -> transition_t6 [style="solid"]; - transition_t6 -> place_g [style="solid"]; + transition_0 [label="t1", shape=box, shape="box", regular="1"]; + transition_1 [label="t2", shape=box, shape="box", regular="1"]; + transition_2 [label="t3", shape=box, shape="box", regular="1"]; + transition_3 [label="t4", shape=box, shape="box", regular="1"]; + transition_4 [label="t5", shape=box, shape="box", regular="1"]; + transition_5 [label="t6", shape=box, shape="box", regular="1"]; + place_a -> transition_0 [style="solid"]; + transition_0 -> place_b [style="solid"]; + transition_0 -> place_c [style="solid"]; + place_b -> transition_1 [style="solid"]; + place_c -> transition_1 [style="solid"]; + transition_1 -> place_d [style="solid"]; + place_d -> transition_2 [style="solid"]; + transition_2 -> place_e [style="solid"]; + place_d -> transition_3 [style="solid"]; + transition_3 -> place_f [style="solid"]; + place_e -> transition_4 [style="solid"]; + transition_4 -> place_g [style="solid"]; + place_f -> transition_5 [style="solid"]; + transition_5 -> place_g [style="solid"]; } '; } @@ -165,12 +165,12 @@ public function provideSimpleWorkflowDumpWithoutMarking() place_a [label="a", shape=circle, style="filled"]; place_b [label="b", shape=circle]; place_c [label="c", shape=circle]; - transition_t1 [label="t1", shape=box, shape="box", regular="1"]; - transition_t2 [label="t2", shape=box, shape="box", regular="1"]; - place_a -> transition_t1 [style="solid"]; - transition_t1 -> place_b [style="solid"]; - place_b -> transition_t2 [style="solid"]; - transition_t2 -> place_c [style="solid"]; + transition_0 [label="t1", shape=box, shape="box", regular="1"]; + transition_1 [label="t2", shape=box, shape="box", regular="1"]; + place_a -> transition_0 [style="solid"]; + transition_0 -> place_b [style="solid"]; + place_b -> transition_1 [style="solid"]; + transition_1 -> place_c [style="solid"]; } '; }