import com.vaadin.ui.ListSelect;\r
import com.vaadin.ui.NativeSelect;\r
import com.vaadin.ui.OptionGroup;\r
-import com.vaadin.ui.PasswordField;\r
import com.vaadin.ui.Table;\r
-import com.vaadin.ui.TextArea;\r
import com.vaadin.ui.TextField;\r
\r
public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory {\r
|| boolean.class.isAssignableFrom(type)) {\r
return createBooleanField(fieldType);\r
}\r
+ if (AbstractTextField.class.isAssignableFrom(fieldType)) {\r
+ return fieldType.cast(createAbstractTextField(fieldType\r
+ .asSubclass(AbstractTextField.class)));\r
+ }\r
return createDefaultField(type, fieldType);\r
}\r
\r
\r
protected <T extends AbstractTextField> T createAbstractTextField(\r
Class<T> fieldType) {\r
- if (fieldType.isAssignableFrom(PasswordField.class)) {\r
- PasswordField pf = new PasswordField();\r
- pf.setImmediate(true);\r
- return (T) pf;\r
- } else if (fieldType.isAssignableFrom(TextField.class)) {\r
- TextField tf = new TextField();\r
- tf.setImmediate(true);\r
- return (T) tf;\r
- } else if (fieldType.isAssignableFrom(TextArea.class)) {\r
- TextArea ta = new TextArea();\r
- ta.setImmediate(true);\r
- return (T) ta;\r
+ if (fieldType == AbstractTextField.class) {\r
+ fieldType = (Class<T>) TextField.class;\r
+ }\r
+ try {\r
+ T field = fieldType.newInstance();\r
+ field.setImmediate(true);\r
+ return field;\r
+ } catch (Exception e) {\r
+ throw new FormBuilder.BuildException(\r
+ "Could not create a field of type " + fieldType, e);\r
}\r
-\r
- return null;\r
}\r
\r
protected <T extends Field> T createDefaultField(Class<?> type,\r
Class<T> fieldType) {\r
- if (AbstractTextField.class.isAssignableFrom(fieldType)) {\r
- return (T) createAbstractTextField((Class<? extends AbstractTextField>) fieldType);\r
+ if (fieldType.isAssignableFrom(TextField.class)) {\r
+ return fieldType.cast(createAbstractTextField(TextField.class));\r
}\r
return null;\r
}\r