2015-08-17 17:00:26 -07:00
< ? php
namespace Drupal\migrate\Plugin ;
use Drupal\Component\Plugin\Factory\DefaultFactory ;
use Drupal\Core\Cache\CacheBackendInterface ;
use Drupal\Core\Extension\ModuleHandlerInterface ;
use Drupal\Core\Plugin\DefaultPluginManager ;
/**
* Manages migrate plugins .
*
* @ see hook_migrate_info_alter ()
* @ see \Drupal\migrate\Annotation\MigrateSource
* @ see \Drupal\migrate\Plugin\MigrateSourceInterface
* @ see \Drupal\migrate\Plugin\migrate\source\SourcePluginBase
* @ see \Drupal\migrate\Annotation\MigrateProcessPlugin
* @ see \Drupal\migrate\Plugin\MigrateProcessInterface
* @ see \Drupal\migrate\Plugin\migrate\process\ProcessPluginBase
* @ see plugin_api
*
* @ ingroup migration
*/
class MigratePluginManager extends DefaultPluginManager {
/**
* Constructs a MigratePluginManager object .
*
* @ param string $type
* The type of the plugin : row , source , process , destination , entity_field ,
2016-01-06 16:31:26 -08:00
* id_map .
2015-08-17 17:00:26 -07:00
* @ param \Traversable $namespaces
* An object that implements \Traversable which contains the root paths
* keyed by the corresponding namespace to look for plugin implementations .
* @ param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
* Cache backend instance to use .
* @ param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler to invoke the alter hook with .
* @ param string $annotation
2016-01-06 16:31:26 -08:00
* ( optional ) The annotation class name . Defaults to
* 'Drupal\Component\Annotation\PluginID' .
2015-08-17 17:00:26 -07:00
*/
public function __construct ( $type , \Traversable $namespaces , CacheBackendInterface $cache_backend , ModuleHandlerInterface $module_handler , $annotation = 'Drupal\Component\Annotation\PluginID' ) {
$plugin_interface = isset ( $plugin_interface_map [ $type ]) ? $plugin_interface_map [ $type ] : NULL ;
parent :: __construct ( " Plugin/migrate/ $type " , $namespaces , $module_handler , $plugin_interface , $annotation );
$this -> alterInfo ( 'migrate_' . $type . '_info' );
$this -> setCacheBackend ( $cache_backend , 'migrate_plugins_' . $type );
}
/**
* { @ inheritdoc }
*
* A specific createInstance method is necessary to pass the migration on .
*/
public function createInstance ( $plugin_id , array $configuration = array (), MigrationInterface $migration = NULL ) {
$plugin_definition = $this -> getDefinition ( $plugin_id );
$plugin_class = DefaultFactory :: getPluginClass ( $plugin_id , $plugin_definition );
// If the plugin provides a factory method, pass the container to it.
if ( is_subclass_of ( $plugin_class , 'Drupal\Core\Plugin\ContainerFactoryPluginInterface' )) {
$plugin = $plugin_class :: create ( \Drupal :: getContainer (), $configuration , $plugin_id , $plugin_definition , $migration );
}
else {
$plugin = new $plugin_class ( $configuration , $plugin_id , $plugin_definition , $migration );
}
return $plugin ;
}
}