--- /dev/null
+package com.vaadin.tests.fieldbinder;\r
+\r
+import com.vaadin.data.fieldbinder.BeanFieldBinder;\r
+import com.vaadin.data.fieldbinder.FieldBinder.CommitException;\r
+import com.vaadin.tests.components.TestBase;\r
+import com.vaadin.tests.util.Log;\r
+import com.vaadin.ui.Button;\r
+import com.vaadin.ui.Button.ClickEvent;\r
+import com.vaadin.ui.Button.ClickListener;\r
+import com.vaadin.ui.Root;\r
+\r
+public abstract class AbstractBeanFieldBinderTest extends TestBase {\r
+\r
+ private Button commitButton;\r
+ protected Log log = new Log(5);\r
+\r
+ private Button discardButton;\r
+ private Button showBeanButton;\r
+ private BeanFieldBinder fieldBinder;\r
+\r
+ @Override\r
+ protected void setup() {\r
+ addComponent(log);\r
+ }\r
+\r
+ protected Button getDiscardButton() {\r
+ if (discardButton == null) {\r
+ discardButton = new Button("Discard", new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ getFieldBinder().discard();\r
+ log.log("Discarded changes");\r
+\r
+ }\r
+ });\r
+ }\r
+ return discardButton;\r
+ }\r
+\r
+ protected Button getShowBeanButton() {\r
+ if (showBeanButton == null) {\r
+ showBeanButton = new Button("Show bean values",\r
+ new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ log.log(getFieldBinder().getItemDataSource()\r
+ .getBean().toString());\r
+\r
+ }\r
+ });\r
+ }\r
+ return showBeanButton;\r
+ }\r
+\r
+ protected Button getCommitButton() {\r
+ if (commitButton == null) {\r
+ commitButton = new Button("Commit");\r
+ commitButton.addListener(new ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ String msg = "Commit succesful";\r
+ try {\r
+ getFieldBinder().commit();\r
+ } catch (CommitException e) {\r
+ msg = "Commit failed: " + e.getMessage();\r
+ }\r
+ Root.getCurrentRoot().showNotification(msg);\r
+ log.log(msg);\r
+\r
+ }\r
+ });\r
+ }\r
+ return commitButton;\r
+ }\r
+\r
+ protected BeanFieldBinder getFieldBinder() {\r
+ return fieldBinder;\r
+ }\r
+\r
+ protected void setFieldBinder(BeanFieldBinder beanFieldBinder) {\r
+ fieldBinder = beanFieldBinder;\r
+ }\r
+\r
+ @Override\r
+ protected String getDescription() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ protected Integer getTicketNumber() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.vaadin.tests.fieldbinder;\r
+\r
+import com.vaadin.data.fieldbinder.BeanFieldBinder;\r
+import com.vaadin.data.fieldbinder.FormBuilder;\r
+import com.vaadin.data.fieldbinder.PropertyId;\r
+import com.vaadin.tests.data.bean.Address;\r
+import com.vaadin.tests.data.bean.Country;\r
+import com.vaadin.tests.data.bean.Person;\r
+import com.vaadin.tests.data.bean.Sex;\r
+import com.vaadin.tests.util.Log;\r
+import com.vaadin.ui.CheckBox;\r
+import com.vaadin.ui.NativeSelect;\r
+import com.vaadin.ui.TextField;\r
+\r
+public class FormWithNestedProperties extends AbstractBeanFieldBinderTest {\r
+\r
+ private Log log = new Log(5);\r
+\r
+ private TextField firstName = new TextField("First name");\r
+ private TextField lastName = new TextField("Last name");\r
+ private TextField email = new TextField("Email");\r
+ private TextField age = new TextField("Age");\r
+\r
+ @PropertyId("address.streetAddress")\r
+ private TextField streetAddress = new TextField("Street address");\r
+ private NativeSelect country;\r
+\r
+ private CheckBox deceased = new CheckBox("Deceased");\r
+\r
+ @Override\r
+ protected void setup() {\r
+ super.setup();\r
+\r
+ setFieldBinder(new BeanFieldBinder<Person>(Person.class));\r
+ getFieldBinder().bindFields(this);\r
+ country = new FormBuilder(getFieldBinder()).buildAndBind("country",\r
+ "address.country", NativeSelect.class);\r
+ addComponent(firstName);\r
+ addComponent(lastName);\r
+ addComponent(streetAddress);\r
+ addComponent(country);\r
+ addComponent(email);\r
+ addComponent(age);\r
+ addComponent(deceased);\r
+ addComponent(getCommitButton());\r
+ addComponent(getDiscardButton());\r
+ addComponent(getShowBeanButton());\r
+\r
+ getFieldBinder().setItemDataSource(\r
+ new Person("First", "Last", "Email", 52, Sex.FEMALE,\r
+ new Address("street address", 01234, "City",\r
+ Country.FINLAND)));\r
+\r
+ }\r
+\r
+ @Override\r
+ protected String getDescription() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ protected Integer getTicketNumber() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+}\r