private function getClassElement(KalturaTypeReflector $typeReflector) { $properties = $typeReflector->getProperties(); $classElement = $this->_doc->createElement("class"); $classElement->setAttribute("name", $typeReflector->getType()); $parentTypeReflector = $typeReflector->getParentTypeReflector(); if ($typeReflector->isAbstract()) { $classElement->setAttribute("abstract", true); } if ($parentTypeReflector) { $parentType = $parentTypeReflector->getType(); $classElement->setAttribute("base", $parentType); } $plugin = $this->extractPluginNameFromPackage($typeReflector->getPackage()); if ($plugin) { $classElement->setAttribute("plugin", $plugin); } $description = $typeReflector->getDescription(); $description = $this->fixDescription($description); $classElement->setAttribute("description", $description); $properties = $typeReflector->getCurrentProperties(); foreach ($properties as $property) { /* @var $property KalturaPropertyInfo */ if ($property->isServerOnly()) { continue; } $propType = $property->getType(); $propName = $property->getName(); $propertyElement = $this->_doc->createElement("property"); $propertyElement->setAttribute("name", $propName); if ($property->isAssociativeArray()) { $propertyElement->setAttribute("type", "map"); $propertyElement->setAttribute("arrayType", $property->getArrayType()); } else { if ($property->isArray()) { $propertyElement->setAttribute("type", "array"); $propertyElement->setAttribute("arrayType", $property->getArrayType()); } else { if ($property->isEnum()) { $propertyElement->setAttribute("type", "int"); $propertyElement->setAttribute("enumType", $property->getType()); } else { if ($property->isStringEnum()) { $propertyElement->setAttribute("type", "string"); $propertyElement->setAttribute("enumType", $property->getType()); } else { if ($propType == 'KalturaObject') { $propertyElement->setAttribute("type", 'KalturaObjectBase'); } else { $propertyElement->setAttribute("type", $propType); } } } } } $propertyElement->setAttribute("readOnly", $property->isReadOnly() ? "1" : "0"); $propertyElement->setAttribute("insertOnly", $property->isInsertOnly() ? "1" : "0"); $description = $property->getDescription(); $description = $this->fixDescription($description); $propertyElement->setAttribute("description", $description); $classElement->appendChild($propertyElement); } return $classElement; }
private function getTypeDependencies(KalturaTypeReflector $typeReflector) { $result = array(); $parentTypeReflector = $typeReflector->getParentTypeReflector(); if ($parentTypeReflector) { $result[$parentTypeReflector->getType()] = $parentTypeReflector; } $properties = $typeReflector->getProperties(); foreach ($properties as $property) { $subTypeReflector = $property->getTypeReflector(); if ($subTypeReflector) { $result[$subTypeReflector->getType()] = $subTypeReflector; } } if ($typeReflector->isArray() && !$typeReflector->isAbstract()) { $arrayTypeReflector = KalturaTypeReflectorCacher::get($typeReflector->getArrayType()); if ($arrayTypeReflector) { $result[$arrayTypeReflector->getType()] = $arrayTypeReflector; } } return $result; }
private function getClassElement(KalturaTypeReflector $typeReflector) { $properties = $typeReflector->getProperties(); $classElement = $this->_doc->createElement("class"); $classElement->setAttribute("name", $typeReflector->getType()); $parentTypeReflector = $typeReflector->getParentTypeReflector(); if ($typeReflector->isAbstract()) { $classElement->setAttribute("abstract", true); } if ($parentTypeReflector) { $parentType = $parentTypeReflector->getType(); $classElement->setAttribute("base", $parentType); } $package = $typeReflector->getPackage(); if (is_string($package)) { $packages = explode('.', $package, 2); if (count($packages) == 2 && $packages[0] == 'plugins') { $classElement->setAttribute("plugin", $packages[1]); } } $properties = $typeReflector->getCurrentProperties(); foreach ($properties as $property) { $propType = $property->getType(); $propName = $property->getName(); $propertyElement = $this->_doc->createElement("property"); $propertyElement->setAttribute("name", $propName); if ($property->isArray()) { $propertyElement->setAttribute("type", "array"); $propertyElement->setAttribute("arrayType", $property->getArrayType()); } else { if ($property->isEnum()) { $propertyElement->setAttribute("type", "int"); $propertyElement->setAttribute("enumType", $property->getType()); } else { if ($property->isStringEnum()) { $propertyElement->setAttribute("type", "string"); $propertyElement->setAttribute("enumType", $property->getType()); } else { $propertyElement->setAttribute("type", $propType); } } } $propertyElement->setAttribute("readOnly", $property->isReadOnly() ? "1" : "0"); $propertyElement->setAttribute("insertOnly", $property->isInsertOnly() ? "1" : "0"); $description = $property->getDescription(); $description = $this->fixDescription($description); $propertyElement->setAttribute("description", $description); $classElement->appendChild($propertyElement); } return $classElement; }
protected function writeType(KalturaTypeReflector $typeReflector) { $type = $typeReflector->getType(); if ($typeReflector->isEnum()) { $contants = $typeReflector->getConstants(); $this->echoLine("class {$type}"); $this->echoLine("{"); foreach ($contants as $contant) { $name = $contant->getName(); $value = $contant->getDefaultValue(); $this->echoLine("\tconst {$name} = {$value};"); } $this->echoLine("}"); $this->echoLine(); } else { if (!$typeReflector->isArray()) { // class definition $properties = $typeReflector->getProperties(); $this->echoLine("class {$type} extends KalturaObjectBase"); $this->echoLine("{"); // class properties foreach ($properties as $property) { $propType = $property->getType(); $propName = $property->getName(); $this->echoLine("\t/**"); $description = str_replace("\n", "\n\t * ", $property->getDescription()); // to format multiline descriptions $this->echoLine("\t * " . $description); $this->echoLine("\t *"); $this->echoLine("\t * @var {$propType}"); if ($property->isReadOnly()) { $this->echoLine("\t * @readonly"); } if ($property->isInsertOnly()) { $this->echoLine("\t * @insertonly"); } $this->echoLine("\t */"); $propertyLine = "public \${$propName}"; if ($property->isSimpleType() || $property->isEnum()) { $propertyLine .= " = null"; } $this->echoLine("\t{$propertyLine};"); $this->echoLine(""); } $this->echoLine(); $this->echoLine("\tpublic function toParams()"); $this->echoLine("\t{"); $this->echoLine("\t\t\$kparams = array();"); foreach ($properties as $property) { $propType = $property->getType(); $propName = $property->getName(); if ($property->isSimpleType() || $property->isEnum()) { $this->echoLine("\t\t\$this->addIfNotNull(\$kparams, \"{$propName}\", \$this->{$propName});"); } else { continue; // ignore sub objects and arrays } } $this->echoLine("\t\treturn \$kparams;"); $this->echoLine("\t}"); // close class $this->echoLine("}"); $this->echoLine(); } } }
private function loadTypesRecursive(KalturaTypeReflector $typeReflector) { $parentTypeReflector = $typeReflector->getParentTypeReflector(); if ($parentTypeReflector) { $parentType = $parentTypeReflector->getType(); $this->loadTypesRecursive($parentTypeReflector); } $properties = $typeReflector->getProperties(); foreach ($properties as $property) { $subTypeReflector = $property->getTypeReflector(); if ($subTypeReflector) { $this->loadTypesRecursive($subTypeReflector); } } if ($typeReflector->isArray()) { $arrayTypeReflector = KalturaTypeReflectorCacher::get($typeReflector->getArrayType()); if ($arrayTypeReflector) { $this->loadTypesRecursive($arrayTypeReflector); } } $this->addType($typeReflector); }