]> source.dussan.org Git - vaadin-framework.git/commitdiff
Create the right type of AbstractTextField and use TextField as default
authorLeif Åstrand <leif@vaadin.com>
Wed, 21 Dec 2011 08:51:06 +0000 (10:51 +0200)
committerLeif Åstrand <leif@vaadin.com>
Wed, 21 Dec 2011 08:51:25 +0000 (10:51 +0200)
src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java

index db202f7a533426b7286df41ed39ea38d89ae6406..2368b09cd580f94ad2bd236426fb4ed28c03b192 100644 (file)
@@ -14,9 +14,7 @@ import com.vaadin.ui.Field;
 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
@@ -30,6 +28,10 @@ public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory {
                 || 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
@@ -82,27 +84,23 @@ public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory {
 \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