. * * 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\Core\Duplicate; use Espo\Core\InjectableFactory; use Espo\Core\Utils\Metadata; use RuntimeException; class WhereBuilderFactory { public function __construct(private InjectableFactory $injectableFactory, private Metadata $metadata) {} public function has(string $entityType): bool { return (bool) $this->getClassName($entityType); } /** * @return WhereBuilder<\Espo\ORM\Entity> * @throws RuntimeException */ public function create(string $entityType): WhereBuilder { $className = $this->getClassName($entityType); if (!$className) { throw new RuntimeException("No duplicate-where-builder for '{$entityType}'."); } return $this->injectableFactory->create($className); } /** * @return ?class-string> */ private function getClassName(string $entityType): ?string { /** @var ?class-string> */ return $this->metadata ->get(['recordDefs', $entityType, 'duplicateWhereBuilderClassName']); } }