/** * @param ClassTemplate $classTemplate * @param XSDMap\XSDMapEntry $mapEntry */ public static function addBaseClassProperties(ClassTemplate $classTemplate, XSDMap\XSDMapEntry $mapEntry) { // Add the source element name to each class... $property = new BasePropertyTemplate(new PHPScopeEnum(PHPScopeEnum::_PRIVATE), true, false); $property->setDefaultValue($mapEntry->fhirElementName); $property->setName('_fhirElementName'); $property->setPHPType('string'); $property->setPrimitive(true); $classTemplate->addProperty($property); }
/** * @param XSDMap $XSDMap * @param ClassTemplate $classTemplate * @param \SimpleXMLElement $element * @param string $documentation * @param string $maxOccurs * @return BasePropertyTemplate|null */ public static function buildProperty(XSDMap $XSDMap, ClassTemplate $classTemplate, \SimpleXMLElement $element, $documentation = null, $maxOccurs = null) { $propertyTemplate = new BasePropertyTemplate(); $attributes = $element->attributes(); if (null === $documentation) { $propertyTemplate->setDocumentation(XMLUtils::getDocumentation($element)); } if (null === $maxOccurs && isset($attributes['maxOccurs'])) { $maxOccurs = (string) $attributes['maxOccurs']; } if (null !== $maxOccurs && '' !== $maxOccurs) { $propertyTemplate->setCollection(self::determineIfCollection($maxOccurs)); } $name = (string) $attributes['name']; $type = (string) $attributes['type']; $ref = (string) $attributes['ref']; if ('' === $name) { if ('' === $ref) { trigger_error(sprintf('Encountered property on FHIR object "%s" with no "name" or "ref" attribute, cannot create property for it. Property definition: "%s"', $classTemplate->getElementName(), $element->saveXML())); return null; } if (0 === strpos($ref, 'xhtml')) { $propertyTemplate->setName(substr($ref, 6)); $propertyTemplate->setFHIRElementType('html'); $propertyTemplate->setHTML(true); $propertyTemplate->setPHPType('string'); return $propertyTemplate; } $name = $ref; $type = $ref; } $propertyTemplate->setName($name); $propertyTemplate->setFHIRElementType($type); // TODO: Implement proper primitive types if (false !== strpos($type, '-primitive')) { $propertyTemplate->setPrimitive(true); $propertyTemplate->setPHPType('string'); } else { if (false !== strpos($type, '-list')) { $propertyTemplate->setList(true); $propertyTemplate->setPHPType('string'); } else { if (0 === strpos($type, 'xs:')) { $propertyTemplate->setPHPType($XSDMap->getClassUseStatementForFHIRElementName(substr($type, 3))); } else { $propertyTemplate->setPHPType($XSDMap->getClassUseStatementForFHIRElementName($type)); } } } return $propertyTemplate; }