From: Artur Signell Date: Wed, 21 Dec 2011 09:31:41 +0000 (+0200) Subject: #8095 Renamed FieldBinderFieldFactory -> FormBuilderFieldFactory X-Git-Tag: 7.0.0.alpha1~48 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4f9f92e8a900d3fb52dc106a5d0b2944a4fd4a92;p=vaadin-framework.git #8095 Renamed FieldBinderFieldFactory -> FormBuilderFieldFactory --- diff --git a/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java b/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java deleted file mode 100644 index 2368b09cd5..0000000000 --- a/src/com/vaadin/data/fieldbinder/DefaultFieldBinderFieldFactory.java +++ /dev/null @@ -1,132 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.data.fieldbinder; - -import java.util.EnumSet; - -import com.vaadin.data.Item; -import com.vaadin.ui.AbstractSelect; -import com.vaadin.ui.AbstractTextField; -import com.vaadin.ui.CheckBox; -import com.vaadin.ui.ComboBox; -import com.vaadin.ui.Field; -import com.vaadin.ui.ListSelect; -import com.vaadin.ui.NativeSelect; -import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.Table; -import com.vaadin.ui.TextField; - -public class DefaultFieldBinderFieldFactory implements FieldBinderFieldFactory { - - public static final Object CAPTION_PROPERTY_ID = "Caption"; - - public T createField(Class type, Class fieldType) { - if (Enum.class.isAssignableFrom(type)) { - return createEnumField(type, fieldType); - } else if (Boolean.class.isAssignableFrom(type) - || boolean.class.isAssignableFrom(type)) { - return createBooleanField(fieldType); - } - if (AbstractTextField.class.isAssignableFrom(fieldType)) { - return fieldType.cast(createAbstractTextField(fieldType - .asSubclass(AbstractTextField.class))); - } - return createDefaultField(type, fieldType); - } - - private T createEnumField(Class type, - Class fieldType) { - if (AbstractSelect.class.isAssignableFrom(fieldType)) { - AbstractSelect s = createCompatibleSelect((Class) fieldType); - populateWithEnumData(s, (Class) type); - return (T) s; - } - - return null; - } - - protected AbstractSelect createCompatibleSelect( - Class fieldType) { - AbstractSelect select; - if (fieldType.isAssignableFrom(ListSelect.class)) { - select = new ListSelect(); - select.setMultiSelect(false); - } else if (fieldType.isAssignableFrom(NativeSelect.class)) { - select = new NativeSelect(); - } else if (fieldType.isAssignableFrom(OptionGroup.class)) { - select = new OptionGroup(); - select.setMultiSelect(false); - } else if (fieldType.isAssignableFrom(Table.class)) { - Table t = new Table(); - t.setSelectable(true); - select = t; - } else { - select = new ComboBox(null); - } - select.setImmediate(true); - select.setNullSelectionAllowed(false); - - return select; - } - - protected T createBooleanField(Class fieldType) { - if (fieldType.isAssignableFrom(CheckBox.class)) { - CheckBox cb = new CheckBox(null); - cb.setImmediate(true); - return (T) cb; - } else if (AbstractTextField.class.isAssignableFrom(fieldType)) { - return (T) createAbstractTextField((Class) fieldType); - } - - return null; - } - - protected T createAbstractTextField( - Class fieldType) { - 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); - } - } - - protected T createDefaultField(Class type, - Class fieldType) { - if (fieldType.isAssignableFrom(TextField.class)) { - return fieldType.cast(createAbstractTextField(TextField.class)); - } - return null; - } - - /** - * Populates the given select with all the enums in the given {@link Enum} - * class. Uses {@link Enum}.toString() for caption. - * - * @param select - * The select to populate - * @param enumClass - * The Enum class to use - */ - protected void populateWithEnumData(AbstractSelect select, - Class enumClass) { - select.removeAllItems(); - for (Object p : select.getContainerPropertyIds()) { - select.removeContainerProperty(p); - } - select.addContainerProperty(CAPTION_PROPERTY_ID, String.class, ""); - select.setItemCaptionPropertyId(CAPTION_PROPERTY_ID); - @SuppressWarnings("unchecked") - EnumSet enumSet = EnumSet.allOf(enumClass); - for (Object r : enumSet) { - Item newItem = select.addItem(r); - newItem.getItemProperty(CAPTION_PROPERTY_ID).setValue(r.toString()); - } - } -} diff --git a/src/com/vaadin/data/fieldbinder/DefaultFormBuilderFieldFactory.java b/src/com/vaadin/data/fieldbinder/DefaultFormBuilderFieldFactory.java new file mode 100644 index 0000000000..2b372de144 --- /dev/null +++ b/src/com/vaadin/data/fieldbinder/DefaultFormBuilderFieldFactory.java @@ -0,0 +1,132 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.data.fieldbinder; + +import java.util.EnumSet; + +import com.vaadin.data.Item; +import com.vaadin.ui.AbstractSelect; +import com.vaadin.ui.AbstractTextField; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.Field; +import com.vaadin.ui.ListSelect; +import com.vaadin.ui.NativeSelect; +import com.vaadin.ui.OptionGroup; +import com.vaadin.ui.Table; +import com.vaadin.ui.TextField; + +public class DefaultFormBuilderFieldFactory implements FormBuilderFieldFactory { + + public static final Object CAPTION_PROPERTY_ID = "Caption"; + + public T createField(Class type, Class fieldType) { + if (Enum.class.isAssignableFrom(type)) { + return createEnumField(type, fieldType); + } else if (Boolean.class.isAssignableFrom(type) + || boolean.class.isAssignableFrom(type)) { + return createBooleanField(fieldType); + } + if (AbstractTextField.class.isAssignableFrom(fieldType)) { + return fieldType.cast(createAbstractTextField(fieldType + .asSubclass(AbstractTextField.class))); + } + return createDefaultField(type, fieldType); + } + + private T createEnumField(Class type, + Class fieldType) { + if (AbstractSelect.class.isAssignableFrom(fieldType)) { + AbstractSelect s = createCompatibleSelect((Class) fieldType); + populateWithEnumData(s, (Class) type); + return (T) s; + } + + return null; + } + + protected AbstractSelect createCompatibleSelect( + Class fieldType) { + AbstractSelect select; + if (fieldType.isAssignableFrom(ListSelect.class)) { + select = new ListSelect(); + select.setMultiSelect(false); + } else if (fieldType.isAssignableFrom(NativeSelect.class)) { + select = new NativeSelect(); + } else if (fieldType.isAssignableFrom(OptionGroup.class)) { + select = new OptionGroup(); + select.setMultiSelect(false); + } else if (fieldType.isAssignableFrom(Table.class)) { + Table t = new Table(); + t.setSelectable(true); + select = t; + } else { + select = new ComboBox(null); + } + select.setImmediate(true); + select.setNullSelectionAllowed(false); + + return select; + } + + protected T createBooleanField(Class fieldType) { + if (fieldType.isAssignableFrom(CheckBox.class)) { + CheckBox cb = new CheckBox(null); + cb.setImmediate(true); + return (T) cb; + } else if (AbstractTextField.class.isAssignableFrom(fieldType)) { + return (T) createAbstractTextField((Class) fieldType); + } + + return null; + } + + protected T createAbstractTextField( + Class fieldType) { + 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); + } + } + + protected T createDefaultField(Class type, + Class fieldType) { + if (fieldType.isAssignableFrom(TextField.class)) { + return fieldType.cast(createAbstractTextField(TextField.class)); + } + return null; + } + + /** + * Populates the given select with all the enums in the given {@link Enum} + * class. Uses {@link Enum}.toString() for caption. + * + * @param select + * The select to populate + * @param enumClass + * The Enum class to use + */ + protected void populateWithEnumData(AbstractSelect select, + Class enumClass) { + select.removeAllItems(); + for (Object p : select.getContainerPropertyIds()) { + select.removeContainerProperty(p); + } + select.addContainerProperty(CAPTION_PROPERTY_ID, String.class, ""); + select.setItemCaptionPropertyId(CAPTION_PROPERTY_ID); + @SuppressWarnings("unchecked") + EnumSet enumSet = EnumSet.allOf(enumClass); + for (Object r : enumSet) { + Item newItem = select.addItem(r); + newItem.getItemProperty(CAPTION_PROPERTY_ID).setValue(r.toString()); + } + } +} diff --git a/src/com/vaadin/data/fieldbinder/FieldBinderFieldFactory.java b/src/com/vaadin/data/fieldbinder/FieldBinderFieldFactory.java deleted file mode 100644 index 5af4d22546..0000000000 --- a/src/com/vaadin/data/fieldbinder/FieldBinderFieldFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.data.fieldbinder; - -import java.io.Serializable; - -import com.vaadin.ui.Field; - -/** - * Factory interface for creating new Field-instances based on the data type - * that should be edited. - * - * @author Vaadin Ltd. - * @version @version@ - * @since 7.0 - */ -public interface FieldBinderFieldFactory extends Serializable { - /** - * Creates a field based on the data type that we want to edit - * - * @param dataType - * The type that we want to edit using the field - * @param fieldType - * The type of field we want to create. If set to {@link Field} - * then any type of field is accepted - * @return A field that can be assigned to the given fieldType and that is - * capable of editing the given type of data - */ - T createField(Class dataType, Class fieldType); -} diff --git a/src/com/vaadin/data/fieldbinder/FormBuilder.java b/src/com/vaadin/data/fieldbinder/FormBuilder.java index 9ee4b73fce..4597d520b3 100644 --- a/src/com/vaadin/data/fieldbinder/FormBuilder.java +++ b/src/com/vaadin/data/fieldbinder/FormBuilder.java @@ -20,7 +20,7 @@ import com.vaadin.ui.Field; */ public class FormBuilder implements Serializable { - private FieldBinderFieldFactory fieldFactory = new com.vaadin.data.fieldbinder.DefaultFieldBinderFieldFactory(); + private FormBuilderFieldFactory fieldFactory = new DefaultFormBuilderFieldFactory(); private FieldBinder fieldBinder; private static final Logger logger = Logger.getLogger(FormBuilder.class .getName()); @@ -46,14 +46,14 @@ public class FormBuilder implements Serializable { /** * TODO: javadoc */ - public FieldBinderFieldFactory getFieldFactory() { + public FormBuilderFieldFactory getFieldFactory() { return fieldFactory; } /** * TODO: javadoc */ - public void setFieldFactory(FieldBinderFieldFactory fieldFactory) { + public void setFieldFactory(FormBuilderFieldFactory fieldFactory) { this.fieldFactory = fieldFactory; } diff --git a/src/com/vaadin/data/fieldbinder/FormBuilderFieldFactory.java b/src/com/vaadin/data/fieldbinder/FormBuilderFieldFactory.java new file mode 100644 index 0000000000..c189fb5e21 --- /dev/null +++ b/src/com/vaadin/data/fieldbinder/FormBuilderFieldFactory.java @@ -0,0 +1,31 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.data.fieldbinder; + +import java.io.Serializable; + +import com.vaadin.ui.Field; + +/** + * Factory interface for creating new Field-instances based on the data type + * that should be edited. + * + * @author Vaadin Ltd. + * @version @version@ + * @since 7.0 + */ +public interface FormBuilderFieldFactory extends Serializable { + /** + * Creates a field based on the data type that we want to edit + * + * @param dataType + * The type that we want to edit using the field + * @param fieldType + * The type of field we want to create. If set to {@link Field} + * then any type of field is accepted + * @return A field that can be assigned to the given fieldType and that is + * capable of editing the given type of data + */ + T createField(Class dataType, Class fieldType); +}