/** * XSD-Choice elements are handled via private variables/constants * * @param PiBX_AST_Tree $tree * @return array The choice constants as strings */ public static function createChoiceConstantsFor(PiBX_AST_Tree $tree) { $childCount = $tree->countChildren(); $name = strtoupper($tree->getName()); $names = array(); for ($i = 0; $i < $childCount; ++$i) { $child = $tree->get($i); $childName = strtoupper($child->getName()); $names[] = $name . '_' . $childName . '_CHOICE'; } return $names; }
/** * Converts the given parameter $object into its XML representation corresponding * to its AST. * * @param object $object The object to marshal * @param PiBX_AST_Tree $ast object's AST * @return void */ private function marshalObject($object, PiBX_AST_Tree $ast) { $astName = $ast->getName(); $lastNode = $this->currentDomNode; if ($astName != '') { // for every named element, a new node in the resulting xml-tree is created $this->currentDomNode = $this->dom->createElement($astName); $this->parentDomNode->appendChild($this->currentDomNode); } else { // "anonymous" elements are just chained down. No new node has to be created $this->currentDomNode = $this->parentDomNode; } if ($ast instanceof PiBX_AST_Type) { $this->marshalType($object, $ast); } elseif ($ast instanceof PiBX_AST_Collection) { $this->marshalCollection($object, $ast); } elseif ($ast instanceof PiBX_AST_Structure) { $this->marshalStructure($object, $ast); } elseif ($ast instanceof PiBX_AST_TypeAttribute) { $this->marshalTypeAttribute($object, $ast); } elseif ($ast instanceof PiBX_AST_StructureElement) { $this->marshalStructureElement($object, $ast); } elseif (is_string($object) || $ast instanceof PiBX_AST_CollectionItem) { $newNode = $this->dom->createTextNode($object); $this->currentDomNode->appendChild($newNode); } else { throw new RuntimeException('Currently not supported: ' . get_class($ast)); } }
public function visitTypeAttributeEnter(PiBX_AST_Tree $tree) { if ($tree->countChildren() == 0) { // base type attribute $attributeName = PiBX_Binding_Names::getAttributeName($tree->getName()); $methodName = PiBX_Binding_Names::getCamelCasedName($tree->getName()); $this->currentClassAttributes .= "\tprivate \$" . $attributeName . ";\n"; $type = $tree->getType(); $methods = "\tpublic function set" . $methodName . "("; if (!PiBX_ParseTree_BaseType::isBaseType($type)) { // complexTypes (i.e. classes) have to be type-hinted // in the method signature. $expectedType = PiBX_Binding_Names::createClassnameFor($type); $methods .= $expectedType . ' '; } $methods .= "\$" . $attributeName . ") {\n"; if ($this->doTypeChecks) { $methods .= $this->typeChecks->getTypeCheckFor($tree->getType(), $attributeName); } $methods .= "\t\t\$this->" . $attributeName . " = \$" . $attributeName . ";\n" . "\t}\n" . "\tpublic function get" . $methodName . "() {\n" . "\t\treturn \$this->" . $attributeName . ";\n" . "\t}\n"; $this->currentClassMethods .= $methods; return false; } else { return true; } }
public function visitTypeAttributeEnter(PiBX_AST_Tree $tree) { if ($tree->countChildren() == 0) { if (PiBX_ParseTree_BaseType::isBaseType($tree->getType())) { $this->xml .= '<value style="' . $tree->getStyle() . '"'; $this->xml .= ' name="' . $tree->getName() . '"'; $getter = PiBX_Binding_Names::createGetterNameFor($tree); $setter = PiBX_Binding_Names::createSetterNameFor($tree); $this->xml .= ' get-method="' . $getter . '"'; $this->xml .= ' set-method="' . $setter . '"'; $this->xml .= '/>'; } else { $this->xml .= '<structure map-as="' . $tree->getType() . '"'; $getter = PiBX_Binding_Names::createGetterNameFor($tree); $setter = PiBX_Binding_Names::createSetterNameFor($tree); $this->xml .= ' get-method="' . $getter . '"'; $this->xml .= ' set-method="' . $setter . '"'; $this->xml .= ' name="' . $tree->getName() . '"'; $this->xml .= '/>'; } return false; } else { return true; } }