Doctrine\ODM\PHPCR\Mapping\Driver\YamlDriver::loadMetadataForClass PHP Method

loadMetadataForClass() public method

public loadMetadataForClass ( $className, Doctrine\Common\Persistence\Mapping\ClassMetadata $class )
$class Doctrine\Common\Persistence\Mapping\ClassMetadata
    public function loadMetadataForClass($className, ClassMetadata $class)
    {
        /** @var $class \Doctrine\ODM\PHPCR\Mapping\ClassMetadata */
        try {
            $element = $this->getElement($className);
        } catch (DoctrineMappingException $e) {
            // Convert Exception type for consistency with other drivers
            throw new MappingException($e->getMessage(), $e->getCode(), $e);
        }
        if (!$element) {
            return;
        }
        $element['type'] = isset($element['type']) ? $element['type'] : 'document';
        if (isset($element['repositoryClass'])) {
            $class->setCustomRepositoryClassName($element['repositoryClass']);
        }
        if (isset($element['translator'])) {
            $class->setTranslator($element['translator']);
        }
        if (isset($element['versionable']) && $element['versionable']) {
            $class->setVersioned($element['versionable']);
        }
        if (isset($element['referenceable']) && $element['referenceable']) {
            $class->setReferenceable($element['referenceable']);
        }
        if (isset($element['uniqueNodeType']) && $element['uniqueNodeType']) {
            $class->setUniqueNodeType($element['uniqueNodeType']);
        }
        if (isset($element['mixins'])) {
            $mixins = array();
            foreach ($element['mixins'] as $mixin) {
                $mixins[] = $mixin;
            }
            $class->setMixins($mixins);
        }
        if (isset($element['inheritMixins'])) {
            $class->setInheritMixins($element['inheritMixins']);
        }
        if (isset($element['nodeType'])) {
            $class->setNodeType($element['nodeType']);
        }
        if ($element['type'] === 'mappedSuperclass') {
            $class->isMappedSuperclass = true;
        }
        if (isset($element['fields'])) {
            foreach ($element['fields'] as $fieldName => $mapping) {
                if (is_string($mapping)) {
                    $type = $mapping;
                    $mapping = array();
                    $mapping['type'] = $type;
                }
                if (!isset($mapping['fieldName'])) {
                    $mapping['fieldName'] = $fieldName;
                }
                $class->mapField($mapping);
            }
        }
        if (isset($element['uuid'])) {
            $mapping = array('fieldName' => $element['uuid'], 'uuid' => true);
            $class->mapField($mapping);
        }
        if (isset($element['id'])) {
            if (is_array($element['id'])) {
                if (!isset($element['id']['fieldName'])) {
                    throw new MappingException("Missing fieldName property for id field");
                }
                $fieldName = $element['id']['fieldName'];
            } else {
                $fieldName = $element['id'];
            }
            $mapping = array('fieldName' => $fieldName, 'id' => true);
            if (isset($element['id']['generator']['strategy'])) {
                $mapping['strategy'] = $element['id']['generator']['strategy'];
            }
            $class->mapId($mapping);
        }
        if (isset($element['node'])) {
            $class->mapNode(array('fieldName' => $element['node']));
        }
        if (isset($element['nodename'])) {
            $class->mapNodename(array('fieldName' => $element['nodename']));
        }
        if (isset($element['parentdocument'])) {
            $mapping = array('fieldName' => $element['parentdocument'], 'cascade' => isset($element['cascade']) ? $this->getCascadeMode($element['cascade']) : 0);
            $class->mapParentDocument($mapping);
        }
        if (isset($element['child'])) {
            foreach ($element['child'] as $fieldName => $mapping) {
                if (is_string($mapping)) {
                    $name = $mapping;
                    $mapping = array();
                    $mapping['nodeName'] = $name;
                }
                if (!isset($mapping['fieldName'])) {
                    $mapping['fieldName'] = $fieldName;
                }
                $mapping['cascade'] = isset($mapping['cascade']) ? $this->getCascadeMode($mapping['cascade']) : 0;
                $class->mapChild($mapping);
            }
        }
        if (isset($element['children'])) {
            foreach ($element['children'] as $fieldName => $mapping) {
                // TODO should we really support this syntax?
                if (is_string($mapping)) {
                    $filter = $mapping;
                    $mapping = array();
                    $mapping['filter'] = $filter;
                }
                if (!isset($mapping['fieldName'])) {
                    $mapping['fieldName'] = $fieldName;
                }
                if (!isset($mapping['filter'])) {
                    $mapping['filter'] = null;
                } elseif (is_string($mapping['filter'])) {
                    $mapping['filter'] = (array) $mapping['filter'];
                }
                if (!isset($mapping['fetchDepth'])) {
                    $mapping['fetchDepth'] = -1;
                }
                if (!isset($mapping['ignoreUntranslated'])) {
                    $mapping['ignoreUntranslated'] = false;
                }
                $mapping['cascade'] = isset($mapping['cascade']) ? $this->getCascadeMode($mapping['cascade']) : 0;
                $class->mapChildren($mapping);
            }
        }
        if (isset($element['referenceOne'])) {
            foreach ($element['referenceOne'] as $fieldName => $reference) {
                $this->addMappingFromReference($class, $fieldName, $reference, 'one');
            }
        }
        if (isset($element['referenceMany'])) {
            foreach ($element['referenceMany'] as $fieldName => $reference) {
                $this->addMappingFromReference($class, $fieldName, $reference, 'many');
            }
        }
        if (isset($element['locale'])) {
            $class->mapLocale(array('fieldName' => $element['locale']));
        }
        if (isset($element['depth'])) {
            $class->mapDepth(array('fieldName' => $element['depth']));
        }
        if (isset($element['mixedReferrers'])) {
            foreach ($element['mixedReferrers'] as $name => $attributes) {
                $mapping = array('fieldName' => $name, 'referenceType' => isset($attributes['referenceType']) ? $attributes['referenceType'] : null);
                $class->mapMixedReferrers($mapping);
            }
        }
        if (isset($element['referrers'])) {
            foreach ($element['referrers'] as $name => $attributes) {
                if (!isset($attributes['referencedBy'])) {
                    throw new MappingException("{$className} is missing the referencedBy attribute for the referrer field {$name}");
                }
                if (!isset($attributes['referringDocument'])) {
                    throw new MappingException("{$className} is missing the referringDocument attribute for the referrer field {$name}");
                }
                $mapping = array('fieldName' => $name, 'referencedBy' => $attributes['referencedBy'], 'referringDocument' => $attributes['referringDocument'], 'cascade' => isset($attributes['cascade']) ? $this->getCascadeMode($attributes['cascade']) : 0);
                $class->mapReferrers($mapping);
            }
        }
        if (isset($element['versionName'])) {
            $class->mapVersionName(array('fieldName' => $element['versionName']));
        }
        if (isset($element['versionCreated'])) {
            $class->mapVersionCreated(array('fieldName' => $element['versionCreated']));
        }
        if (isset($element['lifecycleCallbacks'])) {
            foreach ($element['lifecycleCallbacks'] as $type => $methods) {
                foreach ($methods as $method) {
                    $class->addLifecycleCallback($method, constant('Doctrine\\ODM\\PHPCR\\Event::' . $type));
                }
            }
        }
        if (isset($element['child_classes'])) {
            $class->setChildClasses($element['child_classes']);
        }
        if (isset($element['is_leaf'])) {
            $class->setIsLeaf($element['is_leaf']);
        }
        $class->validateClassMapping();
    }