Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Component/Plugin/PluginManagerBase.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Component/Plugin/PluginManagerBase.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,95 @@ +<?php + +namespace Drupal\Component\Plugin; + +use Drupal\Component\Plugin\Discovery\DiscoveryTrait; +use Drupal\Component\Plugin\Exception\PluginNotFoundException; + +/** + * Base class for plugin managers. + */ +abstract class PluginManagerBase implements PluginManagerInterface { + + use DiscoveryTrait; + + /** + * The object that discovers plugins managed by this manager. + * + * @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface + */ + protected $discovery; + + /** + * The object that instantiates plugins managed by this manager. + * + * @var \Drupal\Component\Plugin\Factory\FactoryInterface + */ + protected $factory; + + /** + * The object that returns the preconfigured plugin instance appropriate for a particular runtime condition. + * + * @var \Drupal\Component\Plugin\Mapper\MapperInterface + */ + protected $mapper; + + /** + * Gets the plugin discovery. + * + * @return \Drupal\Component\Plugin\Discovery\DiscoveryInterface + */ + protected function getDiscovery() { + return $this->discovery; + } + + /** + * Gets the plugin factory. + * + * @return \Drupal\Component\Plugin\Factory\FactoryInterface + */ + protected function getFactory() { + return $this->factory; + } + + /** + * {@inheritdoc} + */ + public function getDefinition($plugin_id, $exception_on_invalid = TRUE) { + return $this->getDiscovery()->getDefinition($plugin_id, $exception_on_invalid); + } + + /** + * {@inheritdoc} + */ + public function getDefinitions() { + return $this->getDiscovery()->getDefinitions(); + } + + /** + * {@inheritdoc} + */ + public function createInstance($plugin_id, array $configuration = []) { + // If this PluginManager has fallback capabilities catch + // PluginNotFoundExceptions. + if ($this instanceof FallbackPluginManagerInterface) { + try { + return $this->getFactory()->createInstance($plugin_id, $configuration); + } + catch (PluginNotFoundException $e) { + $fallback_id = $this->getFallbackPluginId($plugin_id, $configuration); + return $this->getFactory()->createInstance($fallback_id, $configuration); + } + } + else { + return $this->getFactory()->createInstance($plugin_id, $configuration); + } + } + + /** + * {@inheritdoc} + */ + public function getInstance(array $options) { + return $this->mapper->getInstance($options); + } + +}