/**
  * @test
  */
 public function canHandleSingleItemArraysOfAnnotations()
 {
     $annotations = array('');
     $expected = TRUE;
     $result = AnnotationUtility::parseAnnotation($annotations);
     $this->assertEquals($expected, $result);
 }
 /**
  * @param string $class
  * @param string $table
  * @return Form
  */
 public function generateFormInstanceFromClassName($class, $table)
 {
     $labelFields = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Label', FALSE);
     $iconAnnotation = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Icon');
     $extensionName = $this->getExtensionNameFromModelClassName($class);
     $values = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Form\\Field', FALSE);
     $sheets = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Form\\Sheet', FALSE);
     $labels = TRUE === is_array($labelFields) ? array_keys($labelFields) : array(key($values));
     foreach ($labels as $index => $labelField) {
         $labels[$index] = GeneralUtility::camelCaseToLowerCaseUnderscored($labelField);
     }
     $icon = TRUE === isset($iconAnnotation['config']['path']) ? $iconAnnotation['config']['path'] : 'ext_icon.png';
     $hasVisibilityToggle = (bool) AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\Hide');
     $hasDeleteToggle = (bool) AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\Delete');
     $hasStartTimeToggle = (bool) AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\StartTime');
     $hasEndTimeToggle = (bool) AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\EndTime');
     $hasFrontendGroupToggle = (bool) AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\FrontendUserGroup');
     $form = Form::create();
     $form->setName($table);
     $form->setExtensionName($extensionName);
     $form->setOption('labels', $labels);
     $form->setOption('delete', $hasDeleteToggle);
     $form->setOption('hide', $hasVisibilityToggle);
     $form->setOption('start', $hasStartTimeToggle);
     $form->setOption('end', $hasEndTimeToggle);
     $form->setOption(Form::OPTION_ICON, $icon);
     $form->setOption('frontendUserGroup', $hasFrontendGroupToggle);
     $fields = array();
     foreach ($sheets as $propertyName => $sheetAnnotation) {
         $sheetName = $sheetAnnotation['type'];
         if (FALSE === isset($fields[$sheetName])) {
             $fields[$sheetName] = array();
         }
         array_push($fields[$sheetName], $propertyName);
     }
     foreach ($fields as $sheetName => $propertyNames) {
         $form->remove($sheetName);
         $sheet = $form->createContainer('Sheet', $sheetName);
         foreach ($propertyNames as $propertyName) {
             $settings = $values[$propertyName];
             $propertyName = GeneralUtility::camelCaseToLowerCaseUnderscored($propertyName);
             if (TRUE === isset($settings['type'])) {
                 $fieldType = implode('/', array_map('ucfirst', explode('.', $settings['type'])));
                 $field = $sheet->createField($fieldType, $propertyName);
                 foreach ($settings['config'] as $settingName => $settingValue) {
                     ObjectAccess::setProperty($field, $settingName, $settingValue);
                 }
             }
         }
     }
     return $form;
 }
 /**
  * @param string $class
  * @param string $table
  * @return Form
  */
 public function generateFormInstanceFromClassName($class, $table)
 {
     $labelFields = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Label', NULL);
     $extensionName = $this->getExtensionNameFromModelClassName($class);
     $values = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Form\\Field', NULL);
     $sheets = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Form\\Sheet', NULL);
     $labels = TRUE === is_array($labelFields) ? array_keys($labelFields) : array(key($values));
     $hasVisibilityToggle = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\Hide');
     $hasDeleteToggle = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\Delete');
     $hasStartTimeToggle = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\StartTime');
     $hasEndTimeToggle = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\EndTime');
     $hasFrontendGroupToggle = AnnotationUtility::getAnnotationValueFromClass($class, 'Flux\\Control\\FrontendUserGroup');
     $form = Form::create();
     $form->setName($table);
     $form->setExtensionName($extensionName);
     $form->setOption('labels', $labels);
     $form->setOption('delete', $hasDeleteToggle);
     $form->setOption('hide', $hasVisibilityToggle);
     $form->setOption('start', $hasStartTimeToggle);
     $form->setOption('end', $hasEndTimeToggle);
     $form->setOption('frontendUserGroup', $hasFrontendGroupToggle);
     $fields = array();
     foreach ($sheets as $propertyName => $sheetAnnotation) {
         $sheetName = $sheetAnnotation['type'];
         if (FALSE === isset($fields[$sheetName])) {
             $fields[$sheetName] = array();
         }
         array_push($fields[$sheetName], $propertyName);
     }
     foreach ($fields as $sheetName => $propertyNames) {
         $form->remove($sheetName);
         $sheets[$sheetName] = $form->createContainer('Sheet', $sheetName);
         foreach ($propertyNames as $propertyName) {
             $settings = $values[$propertyName];
             if (TRUE === isset($settings['type'])) {
                 $field = AbstractFormField::create($settings);
                 $sheets[$sheetName]->add($field);
             }
         }
     }
     return $form;
 }