コード例 #1
0
 /**
  * {@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));
 }
コード例 #2
0
ファイル: GraphvizDumper.php プロジェクト: yceruto/symfony
 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;
 }
コード例 #3
0
 /**
  * {@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));
 }
コード例 #4
0
ファイル: ScalarMarkingStore.php プロジェクト: unexge/symfony
 /**
  * {@inheritdoc}
  */
 public function setMarking($subject, Marking $marking)
 {
     $this->propertyAccessor->setValue($subject, $this->property, key($marking->getPlaces()));
 }
コード例 #5
0
ファイル: MarkingTest.php プロジェクト: ayoah/symfony
 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());
 }
コード例 #6
0
ファイル: Workflow.php プロジェクト: yceruto/symfony
 /**
  * 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;
         }
     }
 }
コード例 #7
0
ファイル: Workflow.php プロジェクト: ayoah/symfony
 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);
         }
     }
 }