sourceRepository = $sourceRepository; } private function loadSource(): void { $this->source = $this->sourceRepository->findOneByIdOrSlug($this->requestedSource); } /** * @throws PreconditionFailedException If the source has no id or slug */ private function validateRequestedSource(): void { if ($this->requestedSource->hasSlug() || $this->requestedSource->hasId()) { return; } throw new PreconditionFailedException(get_class($this->requestedSource).' needs to have a defined attribut id or slug!'); } /** * Uses some kind of Lazy loading. * * @see https://en.wikipedia.org/wiki/Lazy_loading * {@inheritdoc} * @see \App\Domain\RightManagement\RightRequestManagement\RequestedRightInterface::getSource() */ final public function getSource(): SourceInterface { $this->validateRequestedSource(); $this->loadSource(); $this->validateLoad(); return $this->source; } private function validateLoad(): void { if ($this->source) { return; } throw new NotSetException('The Requested Source couldn\'t be found!'); } /** * {@inheritdoc} * * @see \App\Domain\RightManagement\RightRequestManagement\RequestedRightInterface::setRequestedSource() */ final public function setRequestedSource(RequestedSourceInterface $requestedSource) { $this->requestedSource = $requestedSource; } }