/**
  * @inheritdoc
  */
 public function loadMetadataForClass($className, ClassMetadata $metadata)
 {
     $className = ltrim($className, '\\');
     if (!in_array($className, $this->entityClasses, true)) {
         throw new \InvalidArgumentException(sprintf('Class "%s" is not within the allowed set of entities.', $className));
     }
     $this->wrapped->loadMetadataForClass($className, $metadata);
 }
 /**
  * {@inheritdoc}
  */
 public function loadMetadataForClass($className, ClassMetadata $class)
 {
     if (strpos($className, self::NAME_SPACE) === 0) {
         $this->builtinDriver->loadMetadataForClass($className, $class);
         return;
     }
     $this->wrappedDriver->loadMetadataForClass($className, $class);
 }
 /**
  * {@inheritDoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound)
 {
     try {
         $this->driver->loadMetadataForClass($class->getName(), $class);
     } catch (Exception $e) {
         throw $e;
     }
 }
 /**
  * Actually load the metadata from the underlying metadata
  *
  * @param ClassMetadataInterface|ClassMetadata $class
  * @param ClassMetadataInterface|ClassMetadata $parent
  * @param bool $rootEntityFound
  * @param array $nonSuperclassParents
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     //Manipulates $classMetadata;
     $this->driver->loadMetadataForClass($class->getName(), $class);
     if ($this->evm->hasListeners(Events::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this->sm);
         $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs);
     }
 }
 /**
  * Loads the metadata of the specified class
  *
  * @param string $nameName The name of the class for which the metadata
  *                         should be loaded.
  *
  * @return ClassMetadata
  */
 protected function loadMetadata($className)
 {
     if (false === isset($this->loadedMetadata[$className])) {
         if (null === ($class = $this->driver->loadMetadataForClass($className))) {
             // FIXXME Improve this
             throw new \Exception("Can't load metadata for {$className}");
         }
         $this->completeMetadata($class);
         $this->loadedMetadata[$className] = $class;
     }
     return $this->loadedMetadata[$className];
 }
 /**
  * {@inheritDoc}
  */
 public function loadMetadataForClass($className, ClassMetadata $metadata)
 {
     /* @var $driver MappingDriver */
     foreach ($this->drivers as $namespace => $driver) {
         if (strpos($className, $namespace) === 0) {
             $driver->loadMetadataForClass($className, $metadata);
             return;
         }
     }
     if (null !== $this->defaultDriver) {
         $this->defaultDriver->loadMetadataForClass($className, $metadata);
         return;
     }
     throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers));
 }
 /**
  * {@inheritDoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     /* @var $class ClassMetadata */
     /* @var $parent ClassMetadata */
     if ($parent) {
         $class->setInheritanceType($parent->inheritanceType);
         $class->setDiscriminatorColumn($parent->discriminatorColumn);
         $class->setIdGeneratorType($parent->generatorType);
         $this->addInheritedFields($class, $parent);
         $this->addInheritedRelations($class, $parent);
         $this->addInheritedEmbeddedClasses($class, $parent);
         $class->setIdentifier($parent->identifier);
         $class->setVersioned($parent->isVersioned);
         $class->setVersionField($parent->versionField);
         $class->setDiscriminatorMap($parent->discriminatorMap);
         $class->setLifecycleCallbacks($parent->lifecycleCallbacks);
         $class->setChangeTrackingPolicy($parent->changeTrackingPolicy);
         if (!empty($parent->customGeneratorDefinition)) {
             $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition);
         }
         if ($parent->isMappedSuperclass) {
             $class->setCustomRepositoryClass($parent->customRepositoryClassName);
         }
     }
     // Invoke driver
     try {
         $this->driver->loadMetadataForClass($class->getName(), $class);
     } catch (ReflectionException $e) {
         throw MappingException::reflectionFailure($class->getName(), $e);
     }
     // If this class has a parent the id generator strategy is inherited.
     // However this is only true if the hierarchy of parents contains the root entity,
     // if it consists of mapped superclasses these don't necessarily include the id field.
     if ($parent && $rootEntityFound) {
         if ($parent->isIdGeneratorSequence()) {
             $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition);
         } else {
             if ($parent->isIdGeneratorTable()) {
                 $class->tableGeneratorDefinition = $parent->tableGeneratorDefinition;
             }
         }
         if ($parent->generatorType) {
             $class->setIdGeneratorType($parent->generatorType);
         }
         if ($parent->idGenerator) {
             $class->setIdGenerator($parent->idGenerator);
         }
     } else {
         $this->completeIdGeneratorMapping($class);
     }
     if (!$class->isMappedSuperclass) {
         foreach ($class->embeddedClasses as $property => $embeddableClass) {
             if (isset($embeddableClass['inherited'])) {
                 continue;
             }
             if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) {
                 throw MappingException::infiniteEmbeddableNesting($class->name, $property);
             }
             $this->embeddablesActiveNesting[$class->name] = true;
             $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']);
             if ($embeddableMetadata->isEmbeddedClass) {
                 $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property);
             }
             $class->inlineEmbeddable($property, $embeddableMetadata);
             unset($this->embeddablesActiveNesting[$class->name]);
         }
     }
     if ($parent && $parent->isInheritanceTypeSingleTable()) {
         $class->setPrimaryTable($parent->table);
     }
     if ($parent && $parent->cache) {
         $class->cache = $parent->cache;
     }
     if ($parent && $parent->containsForeignIdentifier) {
         $class->containsForeignIdentifier = true;
     }
     if ($parent && !empty($parent->namedQueries)) {
         $this->addInheritedNamedQueries($class, $parent);
     }
     if ($parent && !empty($parent->namedNativeQueries)) {
         $this->addInheritedNamedNativeQueries($class, $parent);
     }
     if ($parent && !empty($parent->sqlResultSetMappings)) {
         $this->addInheritedSqlResultSetMappings($class, $parent);
     }
     if ($parent && !empty($parent->entityListeners) && empty($class->entityListeners)) {
         $class->entityListeners = $parent->entityListeners;
     }
     $class->setParentClasses($nonSuperclassParents);
     if ($class->isRootEntity() && !$class->isInheritanceTypeNone() && !$class->discriminatorMap) {
         $this->addDefaultDiscriminatorMap($class);
     }
     if ($this->evm->hasListeners(Events::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this->em);
         $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs);
     }
     $this->validateRuntimeMetadata($class, $parent);
 }
 /**
  * Loads the metadata for the specified class into the provided container.
  *
  * @param string $className
  * @param ClassMetadata $metadata
  */
 public function loadMetadataForClass($className, ClassMetadata $metadata)
 {
     $this->innerDriver->loadMetadataForClass($className, $metadata);
 }
 /**
  * {@inheritdoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     $this->driver->loadMetadataForClass($class->getName(), $class);
 }