vendor/metamodels/core/src/Factory.php line 143

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of MetaModels/core.
  4.  *
  5.  * (c) 2012-2019 The MetaModels team.
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  *
  10.  * This project is provided in good faith and hope to be usable by anyone.
  11.  *
  12.  * @package    MetaModels/core
  13.  * @author     Christian Schiffler <c.schiffler@cyberspectrum.de>
  14.  * @author     David Maack <david.maack@arcor.de>
  15.  * @author     Sven Baumann <baumann.sv@gmail.com>
  16.  * @copyright  2012-2019 The MetaModels team.
  17.  * @license    https://github.com/MetaModels/core/blob/master/LICENSE LGPL-3.0-or-later
  18.  * @filesource
  19.  */
  20. namespace MetaModels;
  21. use MetaModels\Events\CollectMetaModelTableNamesEvent;
  22. use MetaModels\Events\CreateMetaModelEvent;
  23. use MetaModels\Events\GetMetaModelNameFromIdEvent;
  24. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  25. /**
  26.  * This is the MetaModel factory interface.
  27.  *
  28.  * To create a MetaModel instance, call @link{MetaModelFactory::getMetaModel()}
  29.  */
  30. class Factory implements IFactory
  31. {
  32.     /**
  33.      * The event dispatcher.
  34.      *
  35.      * @var EventDispatcherInterface
  36.      */
  37.     private $dispatcher;
  38.     /**
  39.      * The service container.
  40.      *
  41.      * @var IMetaModelsServiceContainer
  42.      */
  43.     private $serviceContainer;
  44.     /**
  45.      * The already translated MetaModel names.
  46.      *
  47.      * @var string[]
  48.      */
  49.     private $lookupMap = array();
  50.     /**
  51.      * Create a new instance.
  52.      *
  53.      * @param EventDispatcherInterface $dispatcher The event dispatcher.
  54.      */
  55.     public function __construct(EventDispatcherInterface $dispatcher)
  56.     {
  57.         $this->dispatcher $dispatcher;
  58.     }
  59.     /**
  60.      * Set the service container.
  61.      *
  62.      * @param IMetaModelsServiceContainer $serviceContainer The service container to use.
  63.      *
  64.      * @return Factory
  65.      *
  66.      * @deprecated The service container will get removed, use the symfony service container instead.
  67.      */
  68.     public function setServiceContainer(IMetaModelsServiceContainer $serviceContainer$deprecationNotice true)
  69.     {
  70.         if ($deprecationNotice) {
  71.             // @codingStandardsIgnoreStart
  72.             @trigger_error(
  73.                 '"' .__METHOD__ '" is deprecated and will get removed.',
  74.                 E_USER_DEPRECATED
  75.             );
  76.             // @codingStandardsIgnoreEnd
  77.         }
  78.         $this->serviceContainer $serviceContainer;
  79.         return $this;
  80.     }
  81.     /**
  82.      * Retrieve the service container.
  83.      *
  84.      * @return IMetaModelsServiceContainer
  85.      *
  86.      * @deprecated The service container will get removed, use the symfony service container instead.
  87.      */
  88.     public function getServiceContainer()
  89.     {
  90.         // @codingStandardsIgnoreStart
  91.         @trigger_error(
  92.             '"' .__METHOD__ '" is deprecated - use the services from the service container.',
  93.             E_USER_DEPRECATED
  94.         );
  95.         // @codingStandardsIgnoreEnd
  96.         return $this->serviceContainer;
  97.     }
  98.     /**
  99.      * {@inheritdoc}
  100.      */
  101.     public function translateIdToMetaModelName($metaModelId)
  102.     {
  103.         if (!isset($this->lookupMap[$metaModelId])) {
  104.             $event = new GetMetaModelNameFromIdEvent($metaModelId);
  105.             $this->dispatcher->dispatch($event::NAME$event);
  106.             $this->lookupMap[$metaModelId] = $event->getMetaModelName();
  107.         }
  108.         return $this->lookupMap[$metaModelId];
  109.     }
  110.     /**
  111.      * {@inheritdoc}
  112.      */
  113.     public function getMetaModel($metaModelName)
  114.     {
  115.         $event = new CreateMetaModelEvent($this$metaModelName);
  116.         $this->dispatcher->dispatch($event::NAME$event);
  117.         $metaModel $event->getMetaModel();
  118.         return $metaModel;
  119.     }
  120.     /**
  121.      * {@inheritdoc}
  122.      */
  123.     public function collectNames()
  124.     {
  125.         $event = new CollectMetaModelTableNamesEvent($this);
  126.         $this->dispatcher->dispatch($event::NAME$event);
  127.         return $event->getMetaModelNames();
  128.     }
  129. }