Doctrine\ODM\CouchDB\Mapping\Driver\XmlDriver::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\CouchDB\Mapping\ClassMetadata */
        try {
            $xmlRoot = $this->getElement($className);
        } catch (DoctrineMappingException $e) {
            // Convert Exception type for consistency with other drivers
            throw new MappingException($e->getMessage(), $e->getCode(), $e);
        }
        if (!$xmlRoot) {
            return;
        }
        if ($xmlRoot->getName() == 'document') {
            $class->setCustomRepositoryClass(isset($xmlRoot['repository-class']) ? (string) $xmlRoot['repository-class'] : null);
            if (isset($xmlRoot['indexed']) && $xmlRoot['indexed'] == true) {
                $class->indexed = true;
            }
            if (isset($xmlRoot['inheritance-root']) && $xmlRoot['inheritance-root']) {
                $class->markInheritanceRoot();
            }
        } else {
            if ($xmlRoot->getName() == "embedded-document") {
                $class->isEmbeddedDocument = true;
                if (isset($xmlRoot['inheritance-root']) && $xmlRoot['inheritance-root']) {
                    $class->markInheritanceRoot();
                }
            } else {
                if ($xmlRoot->getName() == "mapped-superclass") {
                    $class->isMappedSuperclass = true;
                } else {
                    throw MappingException::classIsNotAValidDocument($className);
                }
            }
        }
        // Evaluate <field ...> mappings
        if (isset($xmlRoot->field)) {
            foreach ($xmlRoot->field as $fieldMapping) {
                $class->mapField(array('fieldName' => (string) $fieldMapping['name'], 'jsonName' => isset($fieldMapping['json-name']) ? (string) $fieldMapping['json-name'] : null, 'indexed' => isset($fieldMapping['index']) ? (bool) $fieldMapping['index'] : false, 'type' => isset($fieldMapping['type']) ? (string) $fieldMapping['type'] : null, 'isVersionField' => isset($fieldMapping['version']) ? true : null));
            }
        }
        // Evaluate <id ..> mappings
        foreach ($xmlRoot->id as $idElement) {
            $class->mapField(array('fieldName' => (string) $idElement['name'], 'indexed' => isset($idElement['index']) ? (bool) $idElement['index'] : false, 'type' => isset($idElement['type']) ? (string) $idElement['type'] : null, 'id' => true, 'strategy' => isset($idElement['strategy']) ? (string) $idElement['strategy'] : null));
        }
        // Evaluate <version ..> mappings
        foreach ($xmlRoot->version as $versionElement) {
            $class->mapField(array('fieldName' => (string) $versionElement['name'], 'type' => 'string', 'isVersionField' => true, 'jsonName' => '_rev'));
        }
        // Evaluate <many-to-one ..> mappings
        if (isset($xmlRoot->{"reference-one"})) {
            foreach ($xmlRoot->{"reference-one"} as $referenceOneElement) {
                $class->mapManyToOne(array('cascade' => isset($referenceOneElement->cascade) ? $this->getCascadeMode($referenceOneElement->cascade) : 0, 'targetDocument' => (string) $referenceOneElement['target-document'], 'fieldName' => (string) $referenceOneElement['field'], 'jsonName' => isset($referenceOneElement['json-name']) ? (string) $referenceOneElement['json-name'] : null, 'indexed' => isset($referenceOneElement['index']) ? (bool) $referenceOneElement['index'] : false));
            }
        }
        // Evaluate <many-to-one ..> mappings
        if (isset($xmlRoot->{"reference-many"})) {
            foreach ($xmlRoot->{"reference-many"} as $referenceManyElement) {
                $class->mapManyToMany(array('cascade' => isset($referenceManyElement->cascade) ? $this->getCascadeMode($referenceManyElement->cascade) : 0, 'targetDocument' => (string) $referenceManyElement['target-document'], 'fieldName' => (string) $referenceManyElement['field'], 'jsonName' => isset($referenceManyElement['json-name']) ? (string) $referenceManyElement['json-name'] : null, 'mappedBy' => isset($referenceManyElement['mapped-by']) ? (string) $referenceManyElement['mapped-by'] : null));
            }
        }
        // Evaluate <attachments ..> mapping
        if (isset($xmlRoot->{"attachments"})) {
            $class->mapAttachments((string) $xmlRoot->{"attachments"}[0]['field']);
        }
        // Evaluate <embed-one />
        if (isset($xmlRoot->{'embed-one'})) {
            foreach ($xmlRoot->{'embed-one'} as $embedOneElement) {
                $class->mapEmbedded(array('targetDocument' => (string) $embedOneElement['target-document'], 'fieldName' => (string) $embedOneElement['field'], 'jsonName' => isset($embedOneElement['json-name']) ? (string) $embedOneElement['json-name'] : null, 'embedded' => 'one'));
            }
        }
        // Evaluate <embed-many />
        if (isset($xmlRoot->{'embed-many'})) {
            foreach ($xmlRoot->{'embed-many'} as $embedManyElement) {
                $class->mapEmbedded(array('targetDocument' => (string) $embedManyElement['target-document'], 'fieldName' => (string) $embedManyElement['field'], 'jsonName' => isset($embedManyElement['json-name']) ? (string) $embedManyElement['json-name'] : null, 'embedded' => 'many'));
            }
        }
    }