package com.vaadin.tests.fieldgroup; import com.vaadin.data.fieldgroup.BeanFieldGroup; import com.vaadin.data.fieldgroup.FieldGroup; import com.vaadin.data.fieldgroup.FieldGroup.CommitEvent; import com.vaadin.data.fieldgroup.FieldGroup.CommitException; import com.vaadin.data.fieldgroup.FieldGroup.CommitHandler; import com.vaadin.data.util.BeanItem; import com.vaadin.data.util.converter.StringToBooleanConverter; import com.vaadin.data.validator.EmailValidator; import com.vaadin.data.validator.IntegerRangeValidator; import com.vaadin.data.validator.StringLengthValidator; import com.vaadin.tests.components.TestBase; import com.vaadin.tests.data.bean.Address; import com.vaadin.tests.data.bean.Country; import com.vaadin.tests.data.bean.Person; import com.vaadin.tests.data.bean.Sex; import com.vaadin.tests.util.Log; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.ComponentContainer; import com.vaadin.ui.Notification; import com.vaadin.ui.Panel; import com.vaadin.ui.Table; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; public class BasicPersonForm extends TestBase { private Log log = new Log(5); private TextField firstName; private TextArea lastName; private TextField email; private TextField age; private Table sex; private TextField deceased; public class Configuration { public boolean preCommitFails = false; public boolean postCommitFails = false; public boolean isPreCommitFails() { return preCommitFails; } public void setPreCommitFails(boolean preCommitFails) { this.preCommitFails = preCommitFails; } public boolean isPostCommitFails() { return postCommitFails; } public void setPostCommitFails(boolean postCommitFails) { this.postCommitFails = postCommitFails; } } private Configuration configuration = new Configuration(); private class ConfigurationPanel extends Panel { public ConfigurationPanel() { super("Configuration", new VerticalLayout()); ((VerticalLayout) getContent()).setMargin(true); BeanItem bi = new BeanItem( configuration); FieldGroup confFieldGroup = new FieldGroup(bi); confFieldGroup.setItemDataSource(bi); confFieldGroup.setBuffered(false); for (Object propertyId : bi.getItemPropertyIds()) { ((ComponentContainer) getContent()).addComponent(confFieldGroup .buildAndBind(propertyId)); } } } @Override protected void setup() { addComponent(log); Panel confPanel = new ConfigurationPanel(); addComponent(confPanel); final FieldGroup fieldGroup = new BeanFieldGroup(Person.class); fieldGroup.addCommitHandler(new CommitHandler() { @Override public void preCommit(CommitEvent commitEvent) throws CommitException { if (configuration.preCommitFails) { throw new CommitException( "Error in preCommit because first name is " + getPerson(commitEvent.getFieldBinder()) .getFirstName()); } } @Override public void postCommit(CommitEvent commitEvent) throws CommitException { if (configuration.postCommitFails) { throw new CommitException( "Error in postCommit because first name is " + getPerson(commitEvent.getFieldBinder()) .getFirstName()); } } }); fieldGroup.setBuffered(true); fieldGroup.buildAndBindMemberFields(this); addComponent(firstName); addComponent(lastName); addComponent(email); addComponent(age); addComponent(sex); addComponent(deceased); Button commitButton = new Button("Commit", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { String msg = "Commit succesful"; try { fieldGroup.commit(); } catch (CommitException e) { msg = "Commit failed: " + e.getMessage(); } Notification.show(msg); log.log(msg); } }); Button discardButton = new Button("Discard", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { fieldGroup.discard(); log.log("Discarded changes"); } }); Button showBean = new Button("Show bean values", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { log.log(getPerson(fieldGroup).toString()); } }); addComponent(commitButton); addComponent(discardButton); addComponent(showBean); email.addValidator(new EmailValidator("Must be a valid address")); lastName.addValidator(new StringLengthValidator("Must be min 5 chars", 5, null, true)); age.addValidator(new IntegerRangeValidator( "Must be between 0 and 150, {0} is not", 0, 150)); sex.setPageLength(0); deceased.setConverter(new StringToBooleanConverter() { @Override protected String getTrueString() { return "YAY!"; } @Override protected String getFalseString() { return "NAAAAAH"; } }); Person p = new Person("John", "Doe", "john@doe.com", 64, Sex.MALE, new Address("John street", 11223, "John's town", Country.USA)); fieldGroup.setItemDataSource(new BeanItem(p)); } public static Person getPerson(FieldGroup binder) { return ((BeanItem) binder.getItemDataSource()).getBean(); } @Override protected String getDescription() { // TODO Auto-generated method stub return null; } @Override protected Integer getTicketNumber() { // TODO Auto-generated method stub return null; } }