package com.vaadin.tests.components.datefield; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import com.vaadin.data.Validator.InvalidValueException; import com.vaadin.data.util.ObjectProperty; import com.vaadin.tests.components.TestBase; import com.vaadin.tests.util.Log; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.DateField; import com.vaadin.ui.Form; import com.vaadin.ui.TextField; public class CommitInvalid extends TestBase { @Override protected String getDescription() { return "DateField with parsing error is committed regardless " + "of the invalidity. Parsing error should be handled" + " as a builtin validator, similar to isRequired()" + " in AbstractField."; } @Override protected Integer getTicketNumber() { return 5927; } ObjectProperty dateProperty; private DateField dateField; private ObjectProperty integerProperty; private TextField integerField; private Log log; @Override protected void setup() { /* * Create and configure form. */ final Form form = new Form(); form.setBuffered(true); // set write buffering on form.setImmediate(true); // make form (and especially its fields // immediate) /* * Create and configure Date Field, the actual component to be tested. */ dateProperty = new ObjectProperty(new Date(2009 - 1900, 4 - 1, 1)); dateField = new DateField("Year", dateProperty); dateField.setLocale(new Locale("fi", "FI")); dateField.setResolution(DateField.RESOLUTION_DAY); dateField.setId("_DF"); form.addField("date", dateField); /* * Create a TextField with integer property (and integer validator, * preventing invalid typed values to be pushded to property) as a * reference component. */ integerProperty = new ObjectProperty(42); integerField = new TextField("Another Field", integerProperty); integerField.setId("_IF"); form.addField("text", integerField); /* * Action buttons. */ Button validate = new Button("Validate"); validate.setId("_validate"); validate.addListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { try { form.validate(); log.log("Form is valid"); } catch (InvalidValueException e) { log.log("Validation failed:" + e.getLocalizedMessage()); } finally { printState(); } } }); form.getFooter().addComponent(validate); Button commit = new Button("Commit"); commit.setId("_commit"); commit.addListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { try { form.commit(); log.log("Commit succeeded"); } catch (InvalidValueException e) { log.log("Commit failed : " + e.getLocalizedMessage()); } finally { printState(); } } }); form.getFooter().addComponent(commit); Button printState = new Button("printState"); printState.addListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { printState(); } }); form.getFooter().addComponent(printState); log = new Log(7); log.log("Test app started"); printState(); addComponent(form); addComponent(log); } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); private String f(Date date) { if (date == null) { return "null"; } return dateFormat.format(date); } private void printState() { log.log("Date. Field: " + f(dateField.getValue()) + " Property: " + f(dateProperty.getValue())); log.log("Integer: Field: " + integerField.getValue() + " Property: " + integerProperty.getValue()); } }