/** * * @param WS_Model_Xml_Entity $e * @throws InvalidArgumentException On properties with dublicate names. */ public function addEntity(WS_Model_Xml_Entity $e) { if ($this->hasEntity($e->getName())) { throw new InvalidArgumentException("Entity with name '{$e->getName()}' allready added to the model!"); } $this->entities[$e->getName()] = $e; }
protected function parseEntity(SimpleXMLElement $xml) { $this->expectTag('entity', $xml); $attributes = $xml->attributes(); if (!isset($attributes['name'])) { throw new Exception("Does not have expected attribute name in entity tag!"); } $entity = new WS_Model_Xml_Entity($attributes['name']); foreach ($xml as $node) { $entity->addProperty($this->parseProperty($node)); } return $entity; }
/** * Generates the models base class constructor. * * The base class constructor provides an array with all property names to its * parent constructor (@see WS_Model_AbstractBase). * * @param WS_Model_Xml_Entity $entity The entity holds the properties with their names. * * @return WS_Model_Template_Method */ protected function generateBaseClassConstructor(WS_Model_Xml_Entity $entity) { $methodTpl = $this->generateMethod('__construct', WS_Model_Template_Abstract::MODIFIER_PUBLIC); $argument = $this->tplFactory->createArgumentTemplate(); $argument->setName('data'); $argument->setDefault('null'); $methodTpl->addArgument($argument); $body = 'parent::__construct(array('; if ($entity->countProperties()) { $body .= PHP_EOL; $index = 0; foreach ($entity->getProperties() as $property) { /* @var $property WS_Model_Xml_Property */ if ($index > 0) { $body .= ',' . PHP_EOL; } $body .= WS_Model_Template_Abstract::getIndentation(3); $body .= "'{$property->getName()}'"; $index++; } $body .= PHP_EOL . WS_Model_Template_Abstract::getIndentation(2); } $body .= '), $data);'; $methodTpl->setBody($body); return $methodTpl; }