package com.vaadin.tests.components.datefield; import java.time.LocalDate; import java.util.Calendar; import java.util.Date; import java.util.Locale; import com.vaadin.server.VaadinRequest; import com.vaadin.shared.ui.MarginInfo; import com.vaadin.shared.ui.datefield.Resolution; import com.vaadin.tests.components.AbstractReindeerTestUI; import com.vaadin.tests.components.TestDateField; import com.vaadin.ui.AbstractDateField; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.InlineDateField; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.v7.data.Property.ValueChangeEvent; import com.vaadin.v7.data.Property.ValueChangeListener; import com.vaadin.v7.ui.NativeSelect; public class DateFieldRanges extends AbstractReindeerTestUI { @Override protected Integer getTicketNumber() { return 6241; } private Label label = new Label(); private NativeSelect resoSelect = new NativeSelect("Resolution"); private AbstractDateField fromRange = new TestDateField("Range start"); private AbstractDateField toRange = new TestDateField("Range end"); private AbstractDateField valueDF = new TestDateField("Value"); private Button recreate = new Button("Recreate static datefields"); private Button clearRangeButton = new Button("Clear range"); private GridLayout currentStaticContainer; private AbstractDateField inlineDynamicDateField; private AbstractDateField dynamicDateField; private Calendar createCalendar() { Calendar c = Calendar.getInstance(); c.set(2013, 3, 26, 6, 1, 12); return c; } private Date newDate() { return createCalendar().getTime(); } private void initializeControlFields() { resoSelect.addItem(Resolution.DAY); resoSelect.addItem(Resolution.MONTH); resoSelect.addItem(Resolution.YEAR); resoSelect.setImmediate(true); resoSelect.setValue(Resolution.DAY); resoSelect.addValueChangeListener(new ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { Resolution r = (Resolution) resoSelect.getValue(); inlineDynamicDateField.setResolution(r); dynamicDateField.setResolution(r); } }); fromRange.setValue(null); fromRange.addValueChangeListener(event -> { inlineDynamicDateField.setRangeStart(fromRange.getValue()); dynamicDateField.setRangeStart(fromRange.getValue()); }); toRange.setValue(null); toRange.addValueChangeListener(event -> { inlineDynamicDateField.setRangeEnd(toRange.getValue()); dynamicDateField.setRangeEnd(toRange.getValue()); }); valueDF.setValue(null); valueDF.addValueChangeListener(event -> { inlineDynamicDateField.setValue(valueDF.getValue()); dynamicDateField.setValue(valueDF.getValue()); }); recreate.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { GridLayout newContainer = createStaticFields(); replaceComponent(currentStaticContainer, newContainer); currentStaticContainer = newContainer; } }); clearRangeButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { fromRange.setValue(null); toRange.setValue(null); } }); Calendar startCal = createCalendar(); Calendar endCal = createCalendar(); endCal.add(Calendar.DATE, 30); dynamicDateField = createDateField(startCal.getTime(), endCal.getTime(), null, Resolution.DAY, false); inlineDynamicDateField = createDateField(startCal.getTime(), endCal.getTime(), null, Resolution.DAY, true); resoSelect.setId("resoSelect"); fromRange.setId("fromRange"); toRange.setId("toRange"); valueDF.setId("valueDF"); recreate.setId("recreate"); clearRangeButton.setId("clearRangeButton"); dynamicDateField.setId("dynamicDateField"); inlineDynamicDateField.setId("inlineDynamicDateField"); } @Override protected void setup(VaadinRequest request) { setLocale(new Locale("en", "US")); getLayout().setWidth(100, Unit.PERCENTAGE); getLayout().setHeight(null); getLayout().setMargin(new MarginInfo(true, false, false, false)); getLayout().setSpacing(true); initializeControlFields(); GridLayout gl = new GridLayout(2, 2); gl.setSpacing(true); gl.addComponent(dynamicDateField); gl.addComponent(inlineDynamicDateField); HorizontalLayout hl = new HorizontalLayout(); hl.setSpacing(true); hl.addComponent(resoSelect); hl.addComponent(fromRange); hl.addComponent(toRange); hl.addComponent(valueDF); hl.addComponent(recreate); hl.addComponent(clearRangeButton); addComponent(hl); addComponent(new Label("Dynamic DateFields")); addComponent(gl); currentStaticContainer = createStaticFields(); addComponent(new Label("Static DateFields")); addComponent(currentStaticContainer); addComponent(label); } private GridLayout createStaticFields() { Calendar startCal = createCalendar(); Calendar endCal = createCalendar(); endCal.add(Calendar.DATE, 30); GridLayout gl = new GridLayout(2, 2); gl.setSpacing(true); AbstractDateField df = createDateField(startCal.getTime(), endCal.getTime(), null, Resolution.DAY, false); gl.addComponent(df); AbstractDateField inline = createDateField(startCal.getTime(), endCal.getTime(), null, Resolution.DAY, true); gl.addComponent(inline); inline.setId("staticInline"); VerticalLayout vl = new VerticalLayout(); return gl; } private AbstractDateField createDateField(Date rangeStart, Date rangeEnd, Date value, Resolution resolution, boolean inline) { AbstractDateField df = null; if (inline) { df = new InlineDateField(); } else { df = new TestDateField(); } final AbstractDateField gg = df; updateValuesForDateField(df); df.addValueChangeListener(event -> { label.setValue((gg.getValue() == null ? "Nothing" : gg.getValue().toString()) + " selected. isValid: " + (gg.getErrorMessage() != null)); }); return df; } @Override protected String getTestDescription() { return "Not defined yet"; } private void updateValuesForDateField(AbstractDateField df) { LocalDate fromVal = fromRange.getValue(); LocalDate toVal = toRange.getValue(); LocalDate value = valueDF.getValue(); Resolution r = (Resolution) resoSelect.getValue(); df.setValue(value); df.setResolution(r); df.setRangeStart(fromVal); df.setRangeEnd(toVal); } }