/** * * @param \DOMDocument $doc * @return \blaze\persistence\meta\ClassDescriptor */ private function parseDom(\DOMDocument $doc, \blaze\lang\String $name) { if ($doc->documentElement->localName != 'persistence-mapping') { throw new \blaze\lang\Exception($name . ': The first element must be of the type persistence-mapping'); } $xmlNode = $doc->documentElement->firstChild; if ($xmlNode->localName != 'class') { throw new \blaze\lang\Exception($name . ': First element must be of the typ class'); } $class = new \blaze\persistence\meta\ClassDescriptor(); $table = new \blaze\persistence\meta\TableDescriptor(); $class->setName($xmlNode->getAttribute('name')); $class->setPackage($xmlNode->getAttribute('package')); $table->setName($xmlNode->getAttribute('table')); $table->setSchema($xmlNode->getAttribute('schema')); $class->setTableDescriptor($table); foreach ($xmlNode->childNodes as $node) { switch ($node->localName) { case 'id': $class->addIdentifier($this->parseId($node)); break; case 'property': $class->addSingleField($this->parseField($node)); break; case 'many-to-one': $class->addSingleField($this->parseManyToOne($node)); break; case 'one-to-one': // $class->addOneToOneRelation($this->parseOneToOne($node)); break; case 'set': $class->addCollectionField($this->parseCollection($node)); break; default: //Exception break; } } return $class; }