/**
* {@inheritDoc}
*/
public function loadMetadataForClass($className, ClassMetadata $metadata)
{
/* @var $metadata \Doctrine\Search\Mapping\ClassMetadata */
$hierarchy = array_merge(array($className), class_parents($className));
// Look for mappings in the class heirarchy and merge
$element = array();
foreach (array_reverse($hierarchy) as $subClassName) {
try {
$element = array_merge($element, $this->getElement($subClassName));
} catch (CommonMappingException $e) {
}
}
if (empty($element)) {
throw MappingException::mappingFileNotFound($className);
}
$this->annotateClassMetadata($element, $metadata);
// Evaluate root mappings
if (isset($element['root'])) {
foreach ($element['root'] as $rootMapping) {
$metadata->mapRoot($this->rootToArray($rootMapping));
}
}
// Evaluate id
if (isset($element['id'])) {
$metadata->identifier = $element['id'];
}
// Evaluate field mappings
if (isset($element['fields'])) {
foreach ($element['fields'] as $name => $fieldMapping) {
$mapping = $this->fieldToArray($name, $fieldMapping);
$metadata->mapField($mapping);
}
}
// Evaluate parameter mappings
if (isset($element['parameters'])) {
foreach ($element['parameters'] as $name => $parameterMapping) {
$mapping = $this->parameterToArray($name, $parameterMapping);
$metadata->mapParameter($mapping);
}
}
}