From e9189e3f2f077dff4067557fd322303840568d78 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Wed, 21 Dec 2011 10:51:06 +0200 Subject: [PATCH] Create the right type of AbstractTextField and use TextField as default --- .../DefaultFieldBinderFieldFactory.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java b/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java index db202f7a53..2368b09cd5 100644 --- a/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java +++ b/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java @@ -14,9 +14,7 @@ import com.vaadin.ui.Field; import com.vaadin.ui.ListSelect; import com.vaadin.ui.NativeSelect; import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.PasswordField; import com.vaadin.ui.Table; -import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory { @@ -30,6 +28,10 @@ public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory { || boolean.class.isAssignableFrom(type)) { return createBooleanField(fieldType); } + if (AbstractTextField.class.isAssignableFrom(fieldType)) { + return fieldType.cast(createAbstractTextField(fieldType + .asSubclass(AbstractTextField.class))); + } return createDefaultField(type, fieldType); } @@ -82,27 +84,23 @@ public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory { protected T createAbstractTextField( Class fieldType) { - if (fieldType.isAssignableFrom(PasswordField.class)) { - PasswordField pf = new PasswordField(); - pf.setImmediate(true); - return (T) pf; - } else if (fieldType.isAssignableFrom(TextField.class)) { - TextField tf = new TextField(); - tf.setImmediate(true); - return (T) tf; - } else if (fieldType.isAssignableFrom(TextArea.class)) { - TextArea ta = new TextArea(); - ta.setImmediate(true); - return (T) ta; + if (fieldType == AbstractTextField.class) { + fieldType = (Class) TextField.class; + } + try { + T field = fieldType.newInstance(); + field.setImmediate(true); + return field; + } catch (Exception e) { + throw new FormBuilder.BuildException( + "Could not create a field of type " + fieldType, e); } - - return null; } protected T createDefaultField(Class type, Class fieldType) { - if (AbstractTextField.class.isAssignableFrom(fieldType)) { - return (T) createAbstractTextField((Class) fieldType); + if (fieldType.isAssignableFrom(TextField.class)) { + return fieldType.cast(createAbstractTextField(TextField.class)); } return null; } -- 2.39.5