/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $workflow = $this->getContainer()->get('workflow.' . $input->getArgument('name')); $definition = $this->getProperty($workflow, 'definition'); $dumper = new GraphvizDumper(); $marking = new Marking(); foreach ($input->getArgument('marking') as $place) { $marking->mark($place); } $output->writeln($dumper->dump($definition, $marking)); }
private function findPlaces(Definition $definition, Marking $marking = null) { $places = array(); foreach ($definition->getPlaces() as $place) { $attributes = array(); if ($place === $definition->getInitialPlace()) { $attributes['style'] = 'filled'; } if ($marking && $marking->has($place)) { $attributes['color'] = '#FF0000'; $attributes['shape'] = 'doublecircle'; } $places[$place] = array('attributes' => $attributes); } return $places; }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $container = $this->getContainer(); $serviceId = $input->getArgument('name'); if ($container->has('workflow.' . $serviceId)) { $workflow = $container->get('workflow.' . $serviceId); } elseif ($container->has('state_machine.' . $serviceId)) { $workflow = $container->get('state_machine.' . $serviceId); } else { throw new \InvalidArgumentException(sprintf('No service found for "workflow.%1$s" nor "state_machine.%1$s".', $serviceId)); } $dumper = new GraphvizDumper(); $marking = new Marking(); foreach ($input->getArgument('marking') as $place) { $marking->mark($place); } $output->writeln($dumper->dump($workflow->getDefinition(), $marking)); }
/** * {@inheritdoc} */ public function setMarking($subject, Marking $marking) { $this->propertyAccessor->setValue($subject, $this->property, key($marking->getPlaces())); }
public function testMarking() { $marking = new Marking(array('a' => 1)); $this->assertTrue($marking->has('a')); $this->assertFalse($marking->has('b')); $this->assertSame(array('a' => 1), $marking->getPlaces()); $marking->mark('b'); $this->assertTrue($marking->has('a')); $this->assertTrue($marking->has('b')); $this->assertSame(array('a' => 1, 'b' => 1), $marking->getPlaces()); $marking->unmark('a'); $this->assertFalse($marking->has('a')); $this->assertTrue($marking->has('b')); $this->assertSame(array('b' => 1), $marking->getPlaces()); $marking->unmark('b'); $this->assertFalse($marking->has('a')); $this->assertFalse($marking->has('b')); $this->assertSame(array(), $marking->getPlaces()); }
/** * Return the first Transition in $transitions that is valid for the * $subject and $marking. null is returned when you cannot do any Transition * in $transitions on the $subject. * * @param object $subject * @param Marking $marking * @param Transition[] $transitions * * @return Transition|null */ private function getTransitionForSubject($subject, Marking $marking, array $transitions) { foreach ($transitions as $transition) { foreach ($transition->getFroms() as $place) { if (!$marking->has($place)) { continue 2; } } if (true !== $this->guardTransition($subject, $marking, $transition)) { return $transition; } } }
private function enter($subject, Transition $transition, Marking $marking) { if (null !== $this->dispatcher) { $event = new Event($subject, $marking, $transition); $this->dispatcher->dispatch('workflow.enter', $event); $this->dispatcher->dispatch(sprintf('workflow.%s.enter', $this->name), $event); } foreach ($transition->getTos() as $place) { $marking->mark($place); if (null !== $this->dispatcher) { $this->dispatcher->dispatch(sprintf('workflow.%s.enter.%s', $this->name, $place), $event); } } }