/**
  * @inheritDoc
  */
 public function load($id)
 {
     try {
         $feed = $this->eventStore->openStreamFeed($id);
     } catch (StreamNotFoundException $e) {
         throw new EventStreamNotFoundException($e->getMessage());
     }
     if ($feed->hasLink(LinkRelation::LAST())) {
         $feed = $this->eventStore->navigateStreamFeed($feed, LinkRelation::LAST());
     } else {
         $feed = $this->eventStore->navigateStreamFeed($feed, LinkRelation::FIRST());
     }
     $rel = LinkRelation::PREVIOUS();
     $messages = [];
     $i = 0;
     while ($feed !== null) {
         foreach ($this->sortEntries($feed->getEntries()) as $entry) {
             $event = $this->eventStore->readEvent($entry->getEventUrl());
             $data = $event->getData();
             $recordedOn = DateTime::fromString($data['broadway_recorded_on']);
             unset($data['broadway_recorded_on']);
             $messages[] = new DomainMessage($id, $event->getVersion(), new Metadata($event->getMetadata() ?: []), call_user_func([$event->getType(), 'deserialize'], $data), $recordedOn);
         }
         $feed = $this->eventStore->navigateStreamFeed($feed, $rel);
     }
     return new DomainEventStream($messages);
 }
 /**
  * @todo lazy loading
  *
  * @param string $eventStream
  * @return DomainEvent[]
  * @throws EventStreamNotFoundException
  */
 public function load($eventStream)
 {
     try {
         $feed = $this->eventStore->openStreamFeed($eventStream, EntryEmbedMode::RICH());
     } catch (StreamNotFoundException $e) {
         throw new EventStreamNotFoundException($e->getMessage(), 1427104251);
     }
     if ($feed->hasLink(LinkRelation::LAST())) {
         $feed = $this->eventStore->navigateStreamFeed($feed, LinkRelation::LAST());
     } else {
         $feed = $this->eventStore->navigateStreamFeed($feed, LinkRelation::FIRST());
     }
     $rel = LinkRelation::PREVIOUS();
     $domainEvents = [];
     while ($feed !== NULL) {
         /** @var Entry[] $entries */
         $entries = array_reverse($feed->getEntries());
         foreach ($entries as $entry) {
             $event = $this->eventStore->readEvent($entry->getEventUrl());
             if ($event === NULL) {
                 continue;
             }
             $domainEvent = $this->eventTranslator->fromEvent($event, $entry->getType());
             $domainEvent->version = $entry->getVersion();
             $domainEvents[] = $domainEvent;
         }
         $feed = $this->eventStore->navigateStreamFeed($feed, $rel);
     }
     return $domainEvents;
 }
 public static function backward(EventStoreInterface $eventStore, $streamName)
 {
     return new self($eventStore, $streamName, LinkRelation::FIRST(), LinkRelation::NEXT(), function (array $array) {
         return $array;
     });
 }
 /**
  * @test
  */
 public function navigate_stream_using_missing_link_returns_null()
 {
     $streamName = $this->prepareTestStream(1);
     $head = $this->es->openStreamFeed($streamName);
     $next = $this->es->navigateStreamFeed($head, LinkRelation::NEXT());
     $this->assertNull($next);
 }
 public static function relationProvider()
 {
     return [[LinkRelation::FIRST()], [LinkRelation::LAST()]];
 }