getFrontendTypeEnum()->getClass(); return (null !== $className && $this->adapters->has($className)) ? $this->adapters->get($className) : null; } /** * @param bool $checkInstalled * @return mixed[] */ public function listFrontendAdapters(bool $checkInstalled = false): array { return $this->listAdaptersFromEnum(FrontendAdapters::cases(), $checkInstalled); } public function getBackendAdapter(Entity\Station $station): ?Liquidsoap { $className = $station->getBackendTypeEnum()->getClass(); return (null !== $className && $this->adapters->has($className)) ? $this->adapters->get($className) : null; } /** * @param bool $checkInstalled * @return mixed[] */ public function listBackendAdapters(bool $checkInstalled = false): array { return $this->listAdaptersFromEnum(BackendAdapters::cases(), $checkInstalled); } public function getRemoteAdapter(Entity\Station $station, Entity\StationRemote $remote): Remote\AbstractRemote { $class_name = $remote->getTypeEnum()->getClass(); if ($this->adapters->has($class_name)) { return $this->adapters->get($class_name); } throw new NotFoundException('Adapter not found: ' . $class_name); } /** * @return mixed[] */ public function listRemoteAdapters(): array { return $this->listAdaptersFromEnum(RemoteAdapters::cases()); } /** * @param array $cases * @param bool $checkInstalled * @return mixed[] */ protected function listAdaptersFromEnum(array $cases, bool $checkInstalled = false): array { $adapters = []; foreach ($cases as $adapter) { $adapters[$adapter->getValue()] = [ 'enum' => $adapter, 'name' => $adapter->getName(), 'class' => $adapter->getClass(), ]; } if ($checkInstalled) { return array_filter( $adapters, function ($adapter_info) { if (null === $adapter_info['class']) { return true; } /** @var AbstractLocalAdapter $adapter */ $adapter = $this->adapters->get($adapter_info['class']); return $adapter->isInstalled(); } ); } return $adapters; } }