Ejemplo n.º 1
0
 /**
  * @param string $file
  * @param XSDMap $xsdMap
  * @param string $outputNS
  */
 public static function parseClassesFromXSD($file, XSDMap $xsdMap, $outputNS)
 {
     $sxe = self::constructSXEWithFilePath($file);
     foreach ($sxe->children('xs', true) as $child) {
         /** @var \SimpleXMLElement $child */
         $attributes = $child->attributes();
         $fhirElementName = (string) $attributes['name'];
         if ('' === $fhirElementName) {
             continue;
         }
         if (ElementTypeEnum::COMPLEX_TYPE === strtolower($child->getName())) {
             $type = ClassTypeUtils::getComplexClassType($child);
             $xsdMap[$fhirElementName] = new XSDMap\XSDMapEntry($child, $fhirElementName, NSUtils::generateRootNamespace($outputNS, NSUtils::getComplexTypeNamespace($fhirElementName, $type)), NameUtils::getComplexTypeClassName($fhirElementName));
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @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;
 }