ProviderUsingHandlerBase.php in Geocoder 8.2
File
src/ProviderUsingHandlerBase.php
View source
<?php
namespace Drupal\geocoder;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
abstract class ProviderUsingHandlerBase extends ProviderBase {
protected $handler;
public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, CacheBackendInterface $cache_backend) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $config_factory, $cache_backend);
if (empty($plugin_definition['handler'])) {
throw new InvalidPluginDefinitionException($plugin_id, "Plugin '{$plugin_id}' should define an handler.");
}
}
protected function doGeocode($source) {
return $this
->getHandler()
->geocode($source);
}
protected function doReverse($latitude, $longitude) {
return $this
->getHandler()
->reverse($latitude, $longitude);
}
protected function getHandler() {
if (!isset($this->handler)) {
$definition = $this
->getPluginDefinition();
$reflection_class = new \ReflectionClass($definition['handler']);
$this->handler = $reflection_class
->newInstanceArgs($this
->getArguments());
}
return $this->handler;
}
protected function getArguments() {
$arguments = [];
foreach ($this
->getPluginDefinition()['arguments'] as $key => $argument) {
if (is_string($key)) {
$config_name = $key;
$default_value = $argument;
}
else {
$config_name = $argument;
$default_value = NULL;
}
$arguments[] = isset($this->configuration[$config_name]) ? $this->configuration[$config_name] : $default_value;
}
return $arguments;
}
}