protected function mergeState(StateInterface $sourceState)
{
$name = $sourceState->getName();
$targetState = $this->findOrCreateState($name);
$this->mergeMetadata($sourceState, $targetState);
/* @var $transition TransitionInterface */
foreach ($sourceState->getTransitions() as $sourceTransition) {
$targetTransition = $this->createTransition($sourceTransition);
$this->addTransition($targetState, $targetTransition);
}
foreach ($sourceState->getEventNames() as $eventName) {
$sourceEvent = $sourceState->getEvent($eventName);
$targetEvent = $targetState->getEvent($eventName);
$this->mergeMetadata($sourceEvent, $targetEvent);
foreach ($sourceEvent->getObservers() as $observer) {
$targetEvent->attach($observer);
}
}
}