/**
* @param StreamName $streamName
* @param null|int $minVersion
* @throws Exception\StreamNotFoundException
* @return Stream
*/
public function load(StreamName $streamName, $minVersion = null)
{
$argv = ['streamName' => $streamName, 'minVersion' => $minVersion];
$event = $this->actionEventEmitter->getNewActionEvent(__FUNCTION__ . '.pre', $this, $argv);
$this->getActionEventEmitter()->dispatch($event);
if ($event->propagationIsStopped()) {
$stream = $event->getParam('stream', false);
if ($stream instanceof Stream && $stream->streamName()->toString() == $streamName->toString()) {
return $stream;
}
throw new StreamNotFoundException(sprintf('A stream with name %s could not be found', $streamName->toString()));
}
$streamName = $event->getParam('streamName');
$minVersion = $event->getParam('minVersion');
$stream = $this->adapter->load($streamName, $minVersion);
if (!$stream) {
throw new StreamNotFoundException(sprintf('A stream with name %s could not be found', $streamName->toString()));
}
$event->setName(__FUNCTION__ . '.post');
$event->setParam('stream', $stream);
$this->getActionEventEmitter()->dispatch($event);
if ($event->propagationIsStopped()) {
throw new StreamNotFoundException(sprintf('A stream with name %s could not be found', $streamName->toString()));
}
return $event->getParam('stream');
}