/** * @param Config\AbstractPropertyConfig $property * @return array */ private function getPropertyData(Config\AbstractPropertyConfig $property) { if ($property instanceof Config\PropertySetConfig) { $setData = array(); foreach ($property as $subProperty) { $setData[] = $this->getPropertyData($subProperty); } return array('id' => $property->name, 'type' => 'Set', 'label' => $property->getLabel(), 'properties' => $setData); } elseif ($property instanceof Config\PropertyListConfig) { return array('id' => $property->name, 'type' => 'Collection', 'label' => $property->getLabel(), 'properties' => $this->getPropertyData($property->getListItem())); } elseif ($property instanceof Config\PropertyConfig) { $editable = $property->getEditable(); return array('id' => $property->name, 'value' => $editable->getDefaultValue(), 'type' => $editable->getEditorType(), 'label' => $editable->getLabel(), 'description' => $editable->getDescription()) + $editable->getAdditionalParameters(); } else { throw new \UnexpectedValueException(sprintf('Don\'t know what do to with [%s].', get_class($property))); } }