123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- <?php
- class XMLAttribute
- {
- private $id;
- private $name;
- private $type;
- private $valueType;
- private $rules;
- private $options;
- private $values;
- public function checkAttributeValueType($attributeValueType)
- {
- $valueTypeArr = array(
- "text" => "文本类型",
- "boolean" => "boolean类型",
- "numeric" => "数据类型",
- "enum" => "枚举型",
- "object" => "对象型"
- );
- if (empty($attributeValueType)) return false;
- // foreach ($valueTypeArr as $key => $value){
- // if($attributeValueType === $key) return true;
- // }
- if (array_key_exists($attributeValueType, $valueTypeArr)) return true;
- return false;
- }
- /**
- * @throws Exception
- */
- public function toElement($dom, $parent)
- {
- $this->checkAttribute();
- if ("single" === $this->type || "multi" === $this->type) {
- $attributeElm = $this->appendAttributeValues($dom, $parent, $this);
- $this->appendRulesElement($dom, $attributeElm, $this->rules, $this->id);
- $this->appendOptionsElement($dom, $attributeElm, $this->options, $this->id);
- } elseif ("complex" === $this->type) {
- $attributeElm = $dom->createElement("attribute");
- $attributeElm->setAttribute("id", $this->id);
- $attributeElm->setAttribute("type", $this->type);
- if ($this->name != "" && !is_null($this->name)) {
- $attributeElm->setAttribute("name", $this->name);
- }
- if ($this->checkAttributeValueType($this->valueType)) {
- $attributeElm->setAttribute("valueType", $this->valueType);
- }
- $attributesElm = $dom->createElement("attributes");
- if (is_array($this->values)) {
- foreach ($this->values as $attribute) {
- if ($attribute instanceof XMLAttribute) {
- $attributeElmTmp = $this->appendAttributeValues($dom, $attributesElm, $attribute);
- $this->appendRulesElement($dom, $attributeElmTmp, $attribute->rules, $attribute->id);
- $this->appendOptionsElement($dom, $attributeElmTmp, $attribute->options, $attribute->id);
- }
- }
- } elseif (!empty($this->values)) {//complex类型的values必须是数组 或 空
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
- }
- $attributeElm->appendChild($attributesElm);
- $this->appendRulesElement($dom, $attributeElm, $this->rules, $this->id);
- $parent->appendChild($attributeElm);
- } elseif ("multiComplex" === $this->type) {
- $attributeElm = $dom->createElement("attribute");
- $attributeElm->setAttribute("id", $this->id);
- if ($this->name != "" && !is_null($this->name)) {
- $attributeElm->setAttribute("name", $this->name);
- }
- $attributeElm->setAttribute("type", $this->type);
- $attributeElm->setAttribute("valueType", "object");
- if (is_array($this->values)) {
- foreach ($this->values as $complexAttribute) {
- if ($complexAttribute instanceof XMLAttribute) {
- $attributesElm = $dom->createElement("attributes");
- if (is_array($complexAttribute->getValues())) {
- foreach ($complexAttribute->getValues() as $attribute) {
- if ($attribute instanceof XMLAttribute) {
- if (!$this->checkAttributeValueType($attribute->getValueType())) {
- throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性valueType不正确!");
- }
- $attributeElmTmp = $this->appendAttributeValues($dom, $attributesElm, $attribute);
- $this->appendRulesElement($dom, $attributeElmTmp, $attribute->rules, $attribute->id);
- $this->appendOptionsElement($dom, $attributeElmTmp, $attribute->options, $attribute->id);
- }
- }
- } elseif (!empty($complexAttribute->getValues())) {//complex类型的values必须是数组 或 空
- throw new \Exception("id=[" . $complexAttribute->getId() . "] XMLAttribute属性values不合法!");
- }
- $attributeElm->appendChild($attributesElm);
- }
- }
- } elseif (!empty($this->values)) {//multiComplex类型的values必须是数组 或 空
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
- }
- $parent->appendChild($attributeElm);
- } else {
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性type类型不正确!");
- }
- }
- /**
- * @throws Exception
- */
- public function toValueElement($dom, $parent)
- {
- $this->checkAttribute();
- if ("single" === $this->type || "multi" === $this->type) {
- $this->appendAttributeValues($dom, $parent, $this);
- } elseif ("complex" === $this->type) {
- $attributeElm = $dom->createElement("attribute");
- $attributeElm->setAttribute("id", $this->id);
- $attributeElm->setAttribute("type", $this->type);
- if ($this->name != "" && !is_null($this->name)) {
- $attributeElm->setAttribute("name", $this->name);
- }
- if ($this->checkAttributeValueType($this->valueType)) {
- $attributeElm->setAttribute("valueType", $this->valueType);
- }
- $attributesElm = $dom->createElement("attributes");
- if (is_array($this->values)) {
- foreach ($this->values as $attribute) {
- if ($attribute instanceof XMLAttribute) {
- $this->appendAttributeValues($dom, $attributesElm, $attribute);
- }
- }
- } elseif (!empty($this->values)) {//complex类型的values必须是数组 或 空
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
- }
- $attributeElm->appendChild($attributesElm);
- $parent->appendChild($attributeElm);
- } elseif ("multiComplex" === $this->type) {
- $attributeElm = $dom->createElement("attribute");
- $attributeElm->setAttribute("id", $this->id);
- if ($this->name != "" && !is_null($this->name)) {
- $attributeElm->setAttribute("name", $this->name);
- }
- $attributeElm->setAttribute("type", $this->type);
- $attributeElm->setAttribute("valueType", "object");
- if (is_array($this->values)) {
- foreach ($this->values as $complexAttribute) {
- if ($complexAttribute instanceof XMLAttribute) {
- $attributesElm = $dom->createElement("attributes");
- if (is_array($complexAttribute->getValues())) {
- foreach ($complexAttribute->getValues() as $attribute) {
- if ($attribute instanceof XMLAttribute) {
- if (!$this->checkAttributeValueType($attribute->getValueType())) {
- throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性valueType不正确!");
- }
- $this->appendAttributeValues($dom, $attributesElm, $attribute);
- }
- }
- } elseif (!empty($complexAttribute->getValues())) {//complex类型的values必须是数组 或 空
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
- }
- $attributeElm->appendChild($attributesElm);
- }
- }
- } elseif (!empty($this->values)) {//multiComplex类型的values必须是数组 或 空
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
- }
- $parent->appendChild($attributeElm);
- } else {
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性type类型不正确!");
- }
- }
- /**
- * @throws Exception
- */
- protected function appendAttributeValues($dom, $parent, $attribute)
- {
- $attributeElm = $dom->createElement("attribute");
- if ($attribute->getId() != "" && !is_null($attribute->getId())) {
- $attributeElm->setAttribute("id", $attribute->getId());
- }
- if ($attribute->getName() != "" && !is_null($attribute->getName())) {
- $attributeElm->setAttribute("name", $attribute->getName());
- }
- if ($attribute->getType() != "" && !is_null($attribute->getType())) {
- $attributeElm->setAttribute("type", $attribute->getType());
- }
- if ($this->checkAttributeValueType($attribute->getValueType())) {
- $attributeElm->setAttribute("valueType", $attribute->getValueType());
- }
- $values = $attribute->getValues();
- if ("single" === $attribute->getType()) {
- $valueElm = $dom->createElement("value");
- if (is_string($values)) {
- $text = $dom->createTextNode($values);
- $valueElm->appendChild($text);
- } elseif (!is_null($values)) {//single类型的values必须是字符串 或 空
- throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性values不合法!");
- }
- $attributeElm->appendChild($valueElm);
- $parent->appendChild($attributeElm);
- } elseif ("multi" === $attribute->getType()) {
- $valuesElm = $dom->createElement("values");
- if (is_array($values)) {
- foreach ($values as $value) {
- if (is_string($value) || is_null($value)) {
- $valueElm = $dom->createElement("value", $value);
- $valuesElm->appendChild($valueElm);
- }
- }
- } elseif (!empty($values)) {//multi类型的values必须是数组 或 空
- throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性values不合法!");
- }
- $attributeElm->appendChild($valuesElm);
- $parent->appendChild($attributeElm);
- } else {
- throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性type类型不正确!");
- }
- return $attributeElm;
- }
- /**
- * @throws Exception
- */
- protected function appendRulesElement($dom, $parent, $rules, $attributeId)
- {
- if (empty($rules)) return;
- if (!is_array($rules)) {
- throw new \Exception("id=[" . $attributeId . "] XMLAttribute属性rules不合法!");
- }
- $rulesElm = $dom->createElement("rules");
- foreach ($rules as $rule) {
- if ($rule instanceof AttributeRule) {
- $rule->toElement($dom, $rulesElm, $attributeId);
- }
- }
- $parent->appendChild($rulesElm);
- }
- /**
- * @throws Exception
- */
- protected function appendOptionsElement($dom, $parent, $options, $attributeId)
- {
- if (empty($options)) return;
- if (!is_array($options)) {
- throw new \Exception("id=[" . $attributeId . "] XMLAttribute属性options不合法!");
- }
- $optionsElm = $dom->createElement("options");
- foreach ($options as $option) {
- if ($option instanceof Option) {
- $option->toElement($dom, $optionsElm, $attributeId);
- }
- }
- $parent->appendChild($optionsElm);
- }
- /**
- * @throws Exception
- */
- protected function checkAttribute()
- {
- if (empty($this->id) && $this->id != '0') {
- throw new \Exception("XMLAttribute属性缺少id!");
- }
- if (empty($this->type) && $this->type != '0') {
- throw new \Exception("id=[" . $this->id . "] XMLAttribute属性缺少type!");
- }
- }
- public function getId()
- {
- return $this->id;
- }
- public function setId($id)
- {
- $this->id = $id;
- }
- public function getName()
- {
- return $this->name;
- }
- public function setName($name)
- {
- $this->name = $name;
- }
- public function getType()
- {
- return $this->type;
- }
- public function setType($type)
- {
- $this->type = $type;
- }
- public function getValueType()
- {
- return $this->valueType;
- }
- public function setValueType($valueType)
- {
- $this->valueType = $valueType;
- }
- public function getRules()
- {
- return $this->rules;
- }
- public function setRules($rules)
- {
- $this->rules = $rules;
- }
- public function getOptions()
- {
- return $this->options;
- }
- public function setOptions($options)
- {
- $this->options = $options;
- }
- public function getValues()
- {
- return $this->values;
- }
- public function setValues($values)
- {
- $this->values = $values;
- }
- }
|