/**
* {@inheritDoc}
*/
protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
{
/* @var $class \Doctrine\OXM\Mapping\ClassMetadata */
/* @var $parent \Doctrine\OXM\Mapping\ClassMetadata */
if ($parent) {
$class->setIdGeneratorType($parent->generatorType);
$this->addInheritedFields($class, $parent);
$class->setXmlNamespaces($parent->xmlNamespaces);
$class->setIdentifier($parent->identifier);
$class->setLifecycleCallbacks($parent->lifecycleCallbacks);
$class->setChangeTrackingPolicy($parent->changeTrackingPolicy);
$class->parent = $parent->getName();
}
// Invoke driver
try {
$this->driver->loadMetadataForClass($class->getName(), $class);
} catch (ReflectionException $e) {
throw MappingException::reflectionFailure($class->getName(), $e);
}
$xmlNamespace = empty($class->xmlNamespaces) ? '' : $class->xmlNamespaces[0]['url'];
foreach ($class->xmlNamespaces as $namespaceData) {
if (empty($namespaceData['prefix'])) {
$xmlNamespace = $namespaceData['url'];
}
}
$xmlName = $class->getXmlName();
// Ignore duplicate binding issues -- at least for now
/*
if ( $this->isEntity($class) && array_key_exists($xmlName, $this->xmlToClassMap) && array_key_exists($xmlNamespace, $this->xmlToClassMap[$xmlName])) {
if ($this->xmlToClassMap[$xmlName][$xmlNamespace] == $class->getName() || $this->xmlToClassMap[$xmlName][$xmlNamespace] == '\\' . $class->getName()) {
// Ignore
} else {
throw MappingException::duplicateXmlNameBinding($class->getName(), $class->getXmlName());
}
}
*/
// The previous test should be sufficent for us to just assume that the namespace/alternative is fine
if (!empty($parent)) {
$this->alternativeClassMap[$parent->getName()][$xmlNamespace] = $class->getName();
}
if (!$class->isMappedSuperclass) {
$this->xmlToClassMap[$xmlName][$xmlNamespace] = $class->getName();
}
if ($parent && !$parent->isMappedSuperclass) {
if ($parent->generatorType) {
$class->setIdGeneratorType($parent->generatorType);
}
if ($parent->idGenerator) {
$class->setIdGenerator($parent->idGenerator);
}
} else {
$this->completeIdGeneratorMapping($class);
}
$class->setParentClasses($nonSuperclassParents);
// Todo - ensure that root elements have an ID mapped
if ($this->evm->hasListeners(Events::loadClassMetadata)) {
$eventArgs = new LoadClassMetadataEventArgs($class, $this);
$this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs);
}
}