--- /dev/null
+/* \r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+package com.vaadin.data.fieldbinder;\r
+\r
+import java.util.EnumSet;\r
+\r
+import com.vaadin.data.Item;\r
+import com.vaadin.data.fieldbinder.FieldGroup.BindException;\r
+import com.vaadin.ui.AbstractSelect;\r
+import com.vaadin.ui.AbstractTextField;\r
+import com.vaadin.ui.CheckBox;\r
+import com.vaadin.ui.ComboBox;\r
+import com.vaadin.ui.Field;\r
+import com.vaadin.ui.ListSelect;\r
+import com.vaadin.ui.NativeSelect;\r
+import com.vaadin.ui.OptionGroup;\r
+import com.vaadin.ui.RichTextArea;\r
+import com.vaadin.ui.Table;\r
+import com.vaadin.ui.TextField;\r
+\r
+public class DefaultFieldGroupFieldFactory implements FieldGroupFieldFactory {\r
+\r
+ public static final Object CAPTION_PROPERTY_ID = "Caption";\r
+\r
+ public <T extends Field> T createField(Class<?> type, Class<T> fieldType) {\r
+ if (Enum.class.isAssignableFrom(type)) {\r
+ return createEnumField(type, fieldType);\r
+ } else if (Boolean.class.isAssignableFrom(type)\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
+ } else if (fieldType == RichTextArea.class) {\r
+ return fieldType.cast(createRichTextArea());\r
+ }\r
+ return createDefaultField(type, fieldType);\r
+ }\r
+\r
+ protected RichTextArea createRichTextArea() {\r
+ RichTextArea rta = new RichTextArea();\r
+ rta.setImmediate(true);\r
+\r
+ return rta;\r
+ }\r
+\r
+ private <T extends Field> T createEnumField(Class<?> type,\r
+ Class<T> fieldType) {\r
+ if (AbstractSelect.class.isAssignableFrom(fieldType)) {\r
+ AbstractSelect s = createCompatibleSelect((Class<? extends AbstractSelect>) fieldType);\r
+ populateWithEnumData(s, (Class<? extends Enum>) type);\r
+ return (T) s;\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ protected AbstractSelect createCompatibleSelect(\r
+ Class<? extends AbstractSelect> fieldType) {\r
+ AbstractSelect select;\r
+ if (fieldType.isAssignableFrom(ListSelect.class)) {\r
+ select = new ListSelect();\r
+ select.setMultiSelect(false);\r
+ } else if (fieldType.isAssignableFrom(NativeSelect.class)) {\r
+ select = new NativeSelect();\r
+ } else if (fieldType.isAssignableFrom(OptionGroup.class)) {\r
+ select = new OptionGroup();\r
+ select.setMultiSelect(false);\r
+ } else if (fieldType.isAssignableFrom(Table.class)) {\r
+ Table t = new Table();\r
+ t.setSelectable(true);\r
+ select = t;\r
+ } else {\r
+ select = new ComboBox(null);\r
+ }\r
+ select.setImmediate(true);\r
+ select.setNullSelectionAllowed(false);\r
+\r
+ return select;\r
+ }\r
+\r
+ protected <T extends Field> T createBooleanField(Class<T> fieldType) {\r
+ if (fieldType.isAssignableFrom(CheckBox.class)) {\r
+ CheckBox cb = new CheckBox(null);\r
+ cb.setImmediate(true);\r
+ return (T) cb;\r
+ } else if (AbstractTextField.class.isAssignableFrom(fieldType)) {\r
+ return (T) createAbstractTextField((Class<? extends AbstractTextField>) fieldType);\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ protected <T extends AbstractTextField> T createAbstractTextField(\r
+ Class<T> fieldType) {\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 BindException("Could not create a field of type "\r
+ + fieldType, e);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Fallback when no specific field has been created. Typically returns a\r
+ * TextField.\r
+ * \r
+ * @param <T>\r
+ * The type of field to create\r
+ * @param type\r
+ * The type of data that should be edited\r
+ * @param fieldType\r
+ * The type of field to create\r
+ * @return A field capable of editing the data or null if no field could be\r
+ * created\r
+ */\r
+ protected <T extends Field> T createDefaultField(Class<?> type,\r
+ Class<T> fieldType) {\r
+ if (fieldType.isAssignableFrom(TextField.class)) {\r
+ return fieldType.cast(createAbstractTextField(TextField.class));\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * Populates the given select with all the enums in the given {@link Enum}\r
+ * class. Uses {@link Enum}.toString() for caption.\r
+ * \r
+ * @param select\r
+ * The select to populate\r
+ * @param enumClass\r
+ * The Enum class to use\r
+ */\r
+ protected void populateWithEnumData(AbstractSelect select,\r
+ Class<? extends Enum> enumClass) {\r
+ select.removeAllItems();\r
+ for (Object p : select.getContainerPropertyIds()) {\r
+ select.removeContainerProperty(p);\r
+ }\r
+ select.addContainerProperty(CAPTION_PROPERTY_ID, String.class, "");\r
+ select.setItemCaptionPropertyId(CAPTION_PROPERTY_ID);\r
+ @SuppressWarnings("unchecked")\r
+ EnumSet<?> enumSet = EnumSet.allOf(enumClass);\r
+ for (Object r : enumSet) {\r
+ Item newItem = select.addItem(r);\r
+ newItem.getItemProperty(CAPTION_PROPERTY_ID).setValue(r.toString());\r
+ }\r
+ }\r
+}\r
+++ /dev/null
-/* \r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-package com.vaadin.data.fieldbinder;\r
-\r
-import java.util.EnumSet;\r
-\r
-import com.vaadin.data.Item;\r
-import com.vaadin.data.fieldbinder.FieldGroup.BindException;\r
-import com.vaadin.ui.AbstractSelect;\r
-import com.vaadin.ui.AbstractTextField;\r
-import com.vaadin.ui.CheckBox;\r
-import com.vaadin.ui.ComboBox;\r
-import com.vaadin.ui.Field;\r
-import com.vaadin.ui.ListSelect;\r
-import com.vaadin.ui.NativeSelect;\r
-import com.vaadin.ui.OptionGroup;\r
-import com.vaadin.ui.RichTextArea;\r
-import com.vaadin.ui.Table;\r
-import com.vaadin.ui.TextField;\r
-\r
-public class DefaultFormBuilderFieldFactory implements FieldGroupFieldFactory {\r
-\r
- public static final Object CAPTION_PROPERTY_ID = "Caption";\r
-\r
- public <T extends Field> T createField(Class<?> type, Class<T> fieldType) {\r
- if (Enum.class.isAssignableFrom(type)) {\r
- return createEnumField(type, fieldType);\r
- } else if (Boolean.class.isAssignableFrom(type)\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
- } else if (fieldType == RichTextArea.class) {\r
- return fieldType.cast(createRichTextArea());\r
- }\r
- return createDefaultField(type, fieldType);\r
- }\r
-\r
- protected RichTextArea createRichTextArea() {\r
- RichTextArea rta = new RichTextArea();\r
- rta.setImmediate(true);\r
-\r
- return rta;\r
- }\r
-\r
- private <T extends Field> T createEnumField(Class<?> type,\r
- Class<T> fieldType) {\r
- if (AbstractSelect.class.isAssignableFrom(fieldType)) {\r
- AbstractSelect s = createCompatibleSelect((Class<? extends AbstractSelect>) fieldType);\r
- populateWithEnumData(s, (Class<? extends Enum>) type);\r
- return (T) s;\r
- }\r
-\r
- return null;\r
- }\r
-\r
- protected AbstractSelect createCompatibleSelect(\r
- Class<? extends AbstractSelect> fieldType) {\r
- AbstractSelect select;\r
- if (fieldType.isAssignableFrom(ListSelect.class)) {\r
- select = new ListSelect();\r
- select.setMultiSelect(false);\r
- } else if (fieldType.isAssignableFrom(NativeSelect.class)) {\r
- select = new NativeSelect();\r
- } else if (fieldType.isAssignableFrom(OptionGroup.class)) {\r
- select = new OptionGroup();\r
- select.setMultiSelect(false);\r
- } else if (fieldType.isAssignableFrom(Table.class)) {\r
- Table t = new Table();\r
- t.setSelectable(true);\r
- select = t;\r
- } else {\r
- select = new ComboBox(null);\r
- }\r
- select.setImmediate(true);\r
- select.setNullSelectionAllowed(false);\r
-\r
- return select;\r
- }\r
-\r
- protected <T extends Field> T createBooleanField(Class<T> fieldType) {\r
- if (fieldType.isAssignableFrom(CheckBox.class)) {\r
- CheckBox cb = new CheckBox(null);\r
- cb.setImmediate(true);\r
- return (T) cb;\r
- } else if (AbstractTextField.class.isAssignableFrom(fieldType)) {\r
- return (T) createAbstractTextField((Class<? extends AbstractTextField>) fieldType);\r
- }\r
-\r
- return null;\r
- }\r
-\r
- protected <T extends AbstractTextField> T createAbstractTextField(\r
- Class<T> fieldType) {\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 BindException("Could not create a field of type "\r
- + fieldType, e);\r
- }\r
- }\r
-\r
- /**\r
- * Fallback when no specific field has been created. Typically returns a\r
- * TextField.\r
- * \r
- * @param <T>\r
- * The type of field to create\r
- * @param type\r
- * The type of data that should be edited\r
- * @param fieldType\r
- * The type of field to create\r
- * @return A field capable of editing the data or null if no field could be\r
- * created\r
- */\r
- protected <T extends Field> T createDefaultField(Class<?> type,\r
- Class<T> fieldType) {\r
- if (fieldType.isAssignableFrom(TextField.class)) {\r
- return fieldType.cast(createAbstractTextField(TextField.class));\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- * Populates the given select with all the enums in the given {@link Enum}\r
- * class. Uses {@link Enum}.toString() for caption.\r
- * \r
- * @param select\r
- * The select to populate\r
- * @param enumClass\r
- * The Enum class to use\r
- */\r
- protected void populateWithEnumData(AbstractSelect select,\r
- Class<? extends Enum> enumClass) {\r
- select.removeAllItems();\r
- for (Object p : select.getContainerPropertyIds()) {\r
- select.removeContainerProperty(p);\r
- }\r
- select.addContainerProperty(CAPTION_PROPERTY_ID, String.class, "");\r
- select.setItemCaptionPropertyId(CAPTION_PROPERTY_ID);\r
- @SuppressWarnings("unchecked")\r
- EnumSet<?> enumSet = EnumSet.allOf(enumClass);\r
- for (Object r : enumSet) {\r
- Item newItem = select.addItem(r);\r
- newItem.getItemProperty(CAPTION_PROPERTY_ID).setValue(r.toString());\r
- }\r
- }\r
-}\r