/**
* @param StreamName $streamName
* @param array $metadata
* @param null|int $minVersion
* @return Iterator
*/
public function loadEventsByMetadataFrom(StreamName $streamName, array $metadata, $minVersion = null)
{
$argv = ['streamName' => $streamName, 'metadata' => $metadata, 'minVersion' => $minVersion];
$event = $this->actionEventEmitter->getNewActionEvent(__FUNCTION__ . '.pre', $this, $argv);
$this->getActionEventEmitter()->dispatch($event);
if ($event->propagationIsStopped()) {
return $event->getParam('streamEvents', new ArrayIterator([]));
}
$streamName = $event->getParam('streamName');
$metadata = $event->getParam('metadata');
$minVersion = $event->getParam('minVersion');
$events = $this->adapter->loadEvents($streamName, $metadata, $minVersion);
$event->setName(__FUNCTION__ . '.post');
$event->setParam('streamEvents', $events);
$this->getActionEventEmitter()->dispatch($event);
if ($event->propagationIsStopped()) {
return new ArrayIterator([]);
}
return $event->getParam('streamEvents');
}