sourceRepository = $sourceRepository; } private function loadSource(): void { $this->source = $this->sourceRepository->findOneByIdOrSlug($this->requestedEntity); } /** * @throws PreconditionFailedException If the source has no id or slug */ private function validateRequestedEntity(): void { if ($this->requestedEntity->hasSlug() || $this->requestedEntity->hasId()) { return; } throw new PreconditionFailedException(get_class($this->requestedEntity).' 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\RequestManagement\Right\RequestedRightInterface::getSource() */ final public function getSource(): SourceInterface { $this->validateRequestedEntity(); $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\RequestManagement\Right\RequestedRightInterface::setRequestedEntity() */ final public function setRequestedEntity(RequestedEntityInterface $requestedSource): void { $this->requestedEntity = $requestedSource; } }