You are here

abstract class ProviderUsingHandlerBase in Geocoder 8.3

Same name and namespace in other branches
  1. 8.2 src/ProviderUsingHandlerBase.php \Drupal\geocoder\ProviderUsingHandlerBase

Provides a base class for providers using handlers.

Hierarchy

Expanded class hierarchy of ProviderUsingHandlerBase

5 files declare their use of ProviderUsingHandlerBase
File.php in modules/geocoder_field/src/Plugin/Geocoder/Provider/File.php
Geoip.php in src/Plugin/Geocoder/Provider/Geoip.php
GeoJsonFile.php in modules/geocoder_geofield/src/Plugin/Geocoder/Provider/GeoJsonFile.php
GPXFile.php in modules/geocoder_geofield/src/Plugin/Geocoder/Provider/GPXFile.php
KMLFile.php in modules/geocoder_geofield/src/Plugin/Geocoder/Provider/KMLFile.php

File

src/ProviderUsingHandlerBase.php, line 16

Namespace

Drupal\geocoder
View source
abstract class ProviderUsingHandlerBase extends ProviderBase {

  /**
   * The provider handler.
   *
   * @var \Geocoder\Provider\Provider
   */
  protected $handler;

  /**
   * The V4 Stateful handler wrapper.
   *
   * @var \Geocoder\StatefulGeocoder
   */
  protected $handlerWrapper;

  /**
   * {@inheritdoc}
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager) {

    // The ProviderBase constructor needs to be run anyway (before possible
    // exception @throw), to allow the ProviderBase process method.
    parent::__construct($configuration, $plugin_id, $plugin_definition, $config_factory, $cache_backend, $language_manager);
    if (empty($plugin_definition['handler'])) {
      throw new InvalidPluginDefinitionException($plugin_id, "Plugin '{$plugin_id}' should define a handler.");
    }
  }

  /**
   * {@inheritdoc}
   *
   * @throws \ReflectionException
   * @throws \Geocoder\Exception\Exception
   */
  protected function doGeocode($source) {

    // In case of a Geocoder Provider returning a \Geocoder\Collection.
    if ($this
      ->getHandler() instanceof Provider) {
      return $this
        ->getHandlerWrapper()
        ->geocode($source);
    }

    // In case of a GeoPHP Geometry Provider returning a \Geometry.
    if ($this
      ->getHandler() instanceof GeometryProviderInterface) {
      return $this
        ->getHandler()
        ->geocode($source);
    }
    return NULL;
  }

  /**
   * {@inheritdoc}
   *
   * @throws \ReflectionException
   * @throws \Geocoder\Exception\Exception
   */
  protected function doReverse($latitude, $longitude) {
    return $this
      ->getHandlerWrapper()
      ->reverse($latitude, $longitude);
  }

  /**
   * Returns the provider handler.
   *
   * @return \Geocoder\Provider\Provider|\Drupal\geocoder_geofield\Geocoder\Provider\GeometryProviderInterface
   *   The provider plugin.
   *
   * @throws \ReflectionException
   */
  protected function getHandler() {
    if ($this->handler === NULL) {
      $definition = $this
        ->getPluginDefinition();
      $reflection_class = new \ReflectionClass($definition['handler']);
      $this->handler = $reflection_class
        ->newInstanceArgs($this
        ->getArguments());
    }
    return $this->handler;
  }

  /**
   * Returns the V4 Stateful wrapper.
   *
   * @return \Geocoder\StatefulGeocoder
   *   The current handler wrapped in this class.
   *
   * @throws \ReflectionException
   */
  protected function getHandlerWrapper() : StatefulGeocoder {
    if ($this->handlerWrapper === NULL) {
      $this->handlerWrapper = new StatefulGeocoder($this
        ->getHandler(), $this->languageManager
        ->getCurrentLanguage()
        ->getId());
    }
    return $this->handlerWrapper;
  }

  /**
   * Builds a list of arguments to be used by the handler.
   *
   * @return array
   *   The list of arguments for handler instantiation.
   */
  protected function getArguments() : array {
    $arguments = [];
    foreach ($this
      ->getPluginDefinition()['arguments'] as $key => $argument) {

      // No default value has been passed.
      if (\is_string($key)) {
        $config_name = $key;
        $default_value = $argument;
      }
      else {
        $config_name = $argument;
        $default_value = NULL;
      }
      $arguments[] = $this->configuration[$config_name] ?? $default_value;
    }
    return $arguments;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
ProviderBase::$cacheBackend protected property The cache backend used to cache geocoding data.
ProviderBase::$configFactory protected property The config factory service.
ProviderBase::$languageManager protected property The configurable language manager.
ProviderBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 2
ProviderBase::geocode public function Geocode a source string. Overrides ProviderInterface::geocode
ProviderBase::getCacheId protected function Builds a cached id.
ProviderBase::process protected function Provides a helper callback for geocode() and reverse().
ProviderBase::reverse public function Reverse geocode latitude and longitude. Overrides ProviderInterface::reverse
ProviderUsingHandlerBase::$handler protected property The provider handler.
ProviderUsingHandlerBase::$handlerWrapper protected property The V4 Stateful handler wrapper.
ProviderUsingHandlerBase::doGeocode protected function Overrides ProviderBase::doGeocode 1
ProviderUsingHandlerBase::doReverse protected function Overrides ProviderBase::doReverse 1
ProviderUsingHandlerBase::getArguments protected function Builds a list of arguments to be used by the handler. 1
ProviderUsingHandlerBase::getHandler protected function Returns the provider handler. 1
ProviderUsingHandlerBase::getHandlerWrapper protected function Returns the V4 Stateful wrapper.
ProviderUsingHandlerBase::__construct public function Overrides ProviderBase::__construct 2
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.