Chris@0: discovery; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the plugin factory. Chris@0: * Chris@0: * @return \Drupal\Component\Plugin\Factory\FactoryInterface Chris@0: */ Chris@0: protected function getFactory() { Chris@0: return $this->factory; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDefinition($plugin_id, $exception_on_invalid = TRUE) { Chris@0: return $this->getDiscovery()->getDefinition($plugin_id, $exception_on_invalid); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDefinitions() { Chris@0: return $this->getDiscovery()->getDefinitions(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function createInstance($plugin_id, array $configuration = []) { Chris@0: // If this PluginManager has fallback capabilities catch Chris@0: // PluginNotFoundExceptions. Chris@0: if ($this instanceof FallbackPluginManagerInterface) { Chris@0: try { Chris@0: return $this->getFactory()->createInstance($plugin_id, $configuration); Chris@0: } Chris@0: catch (PluginNotFoundException $e) { Chris@17: return $this->handlePluginNotFound($plugin_id, $configuration); Chris@0: } Chris@0: } Chris@0: else { Chris@0: return $this->getFactory()->createInstance($plugin_id, $configuration); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@17: * Allows plugin managers to specify custom behavior if a plugin is not found. Chris@17: * Chris@17: * @param string $plugin_id Chris@17: * The ID of the missing requested plugin. Chris@17: * @param array $configuration Chris@17: * An array of configuration relevant to the plugin instance. Chris@17: * Chris@17: * @return object Chris@17: * A fallback plugin instance. Chris@17: */ Chris@17: protected function handlePluginNotFound($plugin_id, array $configuration) { Chris@17: $fallback_id = $this->getFallbackPluginId($plugin_id, $configuration); Chris@17: return $this->getFactory()->createInstance($fallback_id, $configuration); Chris@17: } Chris@17: Chris@17: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getInstance(array $options) { Chris@17: if (!$this->mapper) { Chris@17: throw new \BadMethodCallException(sprintf('%s does not support this method unless %s::$mapper is set.', static::class, static::class)); Chris@17: } Chris@0: return $this->mapper->getInstance($options); Chris@0: } Chris@0: Chris@0: }