/** * @param XSDMap $XSDMap * @param XSDMap\XSDMapEntry $mapEntry * @return ClassTemplate */ public static function buildFHIRElementClassTemplate(XSDMap $XSDMap, XSDMap\XSDMapEntry $mapEntry) { $classTemplate = new ClassTemplate($mapEntry->fhirElementName, $mapEntry->className, $mapEntry->namespace, ClassTypeUtils::getComplexClassType($mapEntry->sxe)); foreach ($mapEntry->sxe->children('xs', true) as $_element) { /** @var \SimpleXMLElement $_element */ switch (strtolower($_element->getName())) { case ElementTypeEnum::ATTRIBUTE: case ElementTypeEnum::CHOICE: case ElementTypeEnum::SEQUENCE: case ElementTypeEnum::UNION: PropertyGenerator::implementProperty($XSDMap, $classTemplate, $_element); break; case ElementTypeEnum::ANNOTATION: $classTemplate->setDocumentation(XMLUtils::getDocumentation($_element)); break; case ElementTypeEnum::COMPLEX_TYPE: self::parseComplexType($XSDMap, $_element, $classTemplate); break; case ElementTypeEnum::COMPLEX_CONTENT: self::parseComplexContent($XSDMap, $_element, $classTemplate); break; case ElementTypeEnum::SIMPLE_TYPE: self::parseSimpleType($XSDMap, $_element, $classTemplate); break; case ElementTypeEnum::SIMPLE_CONTENT: self::parseSimpleContent($XSDMap, $_element, $classTemplate); break; case ElementTypeEnum::RESTRICTION: self::parseRestriction($XSDMap, $_element, $classTemplate); break; case ElementTypeEnum::EXTENSION: self::parseExtension($XSDMap, $_element, $classTemplate); break; } } self::addBaseClassProperties($classTemplate, $mapEntry); foreach ($classTemplate->getProperties() as $propertyTemplate) { MethodGenerator::implementMethodsForProperty($classTemplate, $propertyTemplate); } self::addBaseClassInterfaces($classTemplate); self::addBaseClassMethods($classTemplate); return $classTemplate; }
/** * @param XSDMap $XSDMap * @param ClassTemplate $classTemplate * @param \SimpleXMLElement $choice */ public static function implementChoiceProperty(XSDMap $XSDMap, ClassTemplate $classTemplate, \SimpleXMLElement $choice) { $attributes = $choice->attributes(); // $minOccurs = (int)$attributes['minOccurs']; $maxOccurs = $attributes['maxOccurs']; $documentation = XMLUtils::getDocumentation($choice); foreach ($choice->xpath('xs:element') as $_element) { $propertyTemplate = self::buildProperty($XSDMap, $classTemplate, $_element, $documentation, $maxOccurs); if ($propertyTemplate) { $classTemplate->addProperty($propertyTemplate); } } }