pattern_library-8.x-2.x-dev/src/PatternLibraryFactory.php
src/PatternLibraryFactory.php
<?php
namespace Drupal\pattern_library;
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Component\Plugin\Factory\DefaultFactory;
use Drupal\Core\TypedData\TypedDataInterface;
/**
* Define the pattern library factory.
*/
class PatternLibraryFactory extends DefaultFactory {
/**
* {@inheritdoc}
*/
public function createInstance($plugin_id, array $configuration = []) {
$plugin_definition = $this->discovery->getDefinition($plugin_id);
$plugin_typed_data = $this->getPatternLibraryTypedData($plugin_definition);
/** @var \Symfony\Component\Validator\ConstraintViolation $violation */
foreach ($plugin_typed_data->validate() as $violation) {
throw new InvalidPluginDefinitionException(
$plugin_id, $violation->getMessage()
);
}
$configuration['typed_data'] = $plugin_typed_data;
$plugin_class = static::getPluginClass(
$plugin_id, $plugin_definition, $this->interface
);
if (is_subclass_of($plugin_class, 'Drupal\Core\Plugin\ContainerFactoryPluginInterface')) {
return $plugin_class::create(
\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition
);
}
return new $plugin_class($configuration, $plugin_id, $plugin_definition);
}
/**
* Get pattern library typed data.
*
* @param array $value
* The pattern library plugin definition value.
*
* @return TypedDataInterface
* The pattern library type data.
*/
protected function getPatternLibraryTypedData(array $value) {
/** @var \Drupal\Core\TypedData\DataDefinitionInterface $data_definition */
$data_definition = $this
->typedDataManager()
->createDataDefinition('pattern_library');
return $this->typedDataManager()
->create($data_definition, $value);
}
/**
* Get the typed data manager.
*
* @return \Drupal\Core\TypedData\TypedDataManagerInterface
* The typed data manager.
*/
protected function typedDataManager() {
return \Drupal::service('typed_data_manager');
}
}
