Ejemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function execute(Execution $execution)
 {
     $execution->setActive(false);
     $numberExecutions = count($execution->getProcessModel()->findIncomingTransitions($execution->getNode()->getId()));
     // Collect recycled executions, initialize with current execution:
     $recycle = [$execution->getTransition()->getId() => $execution];
     foreach ($execution->findInactiveConcurrentExecutions($execution->getNode()) as $concurrent) {
         // Collect at most 1 execution per incoming transition.
         $transId = $concurrent->getTransition()->getId();
         if (empty($recycle[$transId]) || $concurrent->getTimestamp() < $recycle[$transId]->getTimestamp()) {
             $recycle[$transId] = $concurrent;
         }
     }
     if (count($recycle) !== $numberExecutions) {
         return;
     }
     return $execution->takeAll(NULL, $recycle);
 }