/**
  * @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)));
     }
 }