. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\ORM\Defs; use Espo\ORM\Metadata; use RuntimeException; class DefsData { /** @var array */ private array $cache = []; public function __construct(private Metadata $metadata) {} public function clearCache(): void { $this->cache = []; } /** * @return string[] */ public function getEntityTypeList(): array { return $this->metadata->getEntityTypeList(); } public function hasEntity(string $name): bool { $this->cacheEntity($name); return !is_null($this->cache[$name]); } public function getEntity(string $name): EntityDefs { $this->cacheEntity($name); if (!$this->hasEntity($name)) { throw new RuntimeException("Entity type '{$name}' does not exist."); } /** @var EntityDefs */ return $this->cache[$name]; } private function cacheEntity(string $name): void { if (array_key_exists($name, $this->cache)) { return; } $this->cache[$name] = $this->loadEntity($name); } private function loadEntity(string $name): ?EntityDefs { $raw = $this->metadata->get($name) ?? null; if (!$raw) { return null; } return EntityDefs::fromRaw($raw, $name); } }