/**
  * Returns the element or attribute form type
  * that should be used with the named attribute
  * of the given model, (the name minus the Element
  * or AttributeForm suffix).
  */
 public static function getDesignerType(ModelForm $model, $attributeName)
 {
     assert('$model !== null');
     assert('is_string($attributeName) && $attributeName != ""');
     $metadata = $model->getMetadata();
     foreach ($metadata as $className => $perClassMetadata) {
         if (isset($perClassMetadata['elements'][$attributeName])) {
             return $perClassMetadata['elements'][$attributeName];
         }
     }
     $validators = $model->getValidators($attributeName);
     foreach ($validators as $validator) {
         switch (get_class($validator)) {
             case 'CBooleanValidator':
                 return 'CheckBox';
             case 'CEmailValidator':
                 return 'Email';
             case 'RedBeanModelTypeValidator':
             case 'TypeValidator':
                 switch ($validator->type) {
                     case 'date':
                         return 'Date';
                     case 'datetime':
                         return 'DateTime';
                     case 'integer':
                         return 'Integer';
                     case 'float':
                         return 'Decimal';
                     case 'time':
                         return 'Time';
                     case 'array':
                         throw new NotSupportedException();
                 }
                 break;
             case 'CUrlValidator':
                 return 'Url';
         }
     }
     return 'Text';
 }