vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php line 102

Open in your IDE?
  1. <?php
  2. /*
  3.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  4.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  5.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  6.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  7.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  8.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  9.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  10.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  11.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  12.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  13.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  14.  *
  15.  * This software consists of voluntary contributions made by many individuals
  16.  * and is licensed under the MIT license. For more information, see
  17.  * <http://www.doctrine-project.org>.
  18.  */
  19. namespace Doctrine\Common\Persistence\Mapping\Driver;
  20. use Doctrine\Common\Persistence\Mapping\ClassMetadata;
  21. use Doctrine\Common\Persistence\Mapping\MappingException;
  22. /**
  23.  * The DriverChain allows you to add multiple other mapping drivers for
  24.  * certain namespaces.
  25.  *
  26.  * @since  2.2
  27.  * @author Benjamin Eberlei <kontakt@beberlei.de>
  28.  * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
  29.  * @author Jonathan H. Wage <jonwage@gmail.com>
  30.  * @author Roman Borschel <roman@code-factory.org>
  31.  */
  32. class MappingDriverChain implements MappingDriver
  33. {
  34.     /**
  35.      * The default driver.
  36.      *
  37.      * @var MappingDriver|null
  38.      */
  39.     private $defaultDriver;
  40.     /**
  41.      * @var array
  42.      */
  43.     private $drivers = [];
  44.     /**
  45.      * Gets the default driver.
  46.      *
  47.      * @return MappingDriver|null
  48.      */
  49.     public function getDefaultDriver()
  50.     {
  51.         return $this->defaultDriver;
  52.     }
  53.     /**
  54.      * Set the default driver.
  55.      *
  56.      * @param MappingDriver $driver
  57.      *
  58.      * @return void
  59.      */
  60.     public function setDefaultDriver(MappingDriver $driver)
  61.     {
  62.         $this->defaultDriver $driver;
  63.     }
  64.     /**
  65.      * Adds a nested driver.
  66.      *
  67.      * @param MappingDriver $nestedDriver
  68.      * @param string        $namespace
  69.      *
  70.      * @return void
  71.      */
  72.     public function addDriver(MappingDriver $nestedDriver$namespace)
  73.     {
  74.         $this->drivers[$namespace] = $nestedDriver;
  75.     }
  76.     /**
  77.      * Gets the array of nested drivers.
  78.      *
  79.      * @return array $drivers
  80.      */
  81.     public function getDrivers()
  82.     {
  83.         return $this->drivers;
  84.     }
  85.     /**
  86.      * {@inheritDoc}
  87.      */
  88.     public function loadMetadataForClass($classNameClassMetadata $metadata)
  89.     {
  90.         /* @var $driver MappingDriver */
  91.         foreach ($this->drivers as $namespace => $driver) {
  92.             if (strpos($className$namespace) === 0) {
  93.                 $driver->loadMetadataForClass($className$metadata);
  94.                 return;
  95.             }
  96.         }
  97.         if (null !== $this->defaultDriver) {
  98.             $this->defaultDriver->loadMetadataForClass($className$metadata);
  99.             return;
  100.         }
  101.         throw MappingException::classNotFoundInNamespaces($classNamearray_keys($this->drivers));
  102.     }
  103.     /**
  104.      * {@inheritDoc}
  105.      */
  106.     public function getAllClassNames()
  107.     {
  108.         $classNames = [];
  109.         $driverClasses = [];
  110.         /* @var $driver MappingDriver */
  111.         foreach ($this->drivers AS $namespace => $driver) {
  112.             $oid spl_object_hash($driver);
  113.             if (!isset($driverClasses[$oid])) {
  114.                 $driverClasses[$oid] = $driver->getAllClassNames();
  115.             }
  116.             foreach ($driverClasses[$oid] AS $className) {
  117.                 if (strpos($className$namespace) === 0) {
  118.                     $classNames[$className] = true;
  119.                 }
  120.             }
  121.         }
  122.         if (null !== $this->defaultDriver) {
  123.             foreach ($this->defaultDriver->getAllClassNames() as $className) {
  124.                 $classNames[$className] = true;
  125.             }
  126.         }
  127.         return array_keys($classNames);
  128.     }
  129.     /**
  130.      * {@inheritDoc}
  131.      */
  132.     public function isTransient($className)
  133.     {
  134.         /* @var $driver MappingDriver */
  135.         foreach ($this->drivers AS $namespace => $driver) {
  136.             if (strpos($className$namespace) === 0) {
  137.                 return $driver->isTransient($className);
  138.             }
  139.         }
  140.         if ($this->defaultDriver !== null) {
  141.             return $this->defaultDriver->isTransient($className);
  142.         }
  143.         return true;
  144.     }
  145. }