/**
  * @param TransitionInterface $sourceTransition
  *
  * @throws \InvalidArgumentException
  *
  * @return \Metabor\Statemachine\Transition
  */
 protected function createTransition(TransitionInterface $sourceTransition)
 {
     $targetStateName = $sourceTransition->getTargetState()->getName();
     $targetState = $this->findOrCreateState($targetStateName);
     $this->mergeMetadata($sourceTransition->getTargetState(), $targetState);
     $eventName = $sourceTransition->getEventName();
     if ($sourceTransition->getConditionName()) {
         if ($sourceTransition instanceof Transition) {
             $condition = $sourceTransition->getCondition();
         } else {
             throw new \InvalidArgumentException('Overwrite this method to implement a different type!');
         }
     } else {
         $condition = null;
     }
     return new Transition($targetState, $eventName, $condition);
 }
 /**
  * @param TransitionInterface $sourceTransition
  * @return ConditionInterface
  */
 protected function createCondition(TransitionInterface $sourceTransition)
 {
     if ($sourceTransition->getConditionName()) {
         if ($sourceTransition instanceof Transition) {
             $condition = $sourceTransition->getCondition();
         } else {
             throw new \InvalidArgumentException('Overwrite this method to implement a different type!');
         }
     } else {
         $condition = null;
     }
     return $condition;
 }