aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/main/java/com/vaadin/tests/components/datefield/DateTimeFieldResolutionChange.java
blob: c8066af75b900232e95261f9c97be32c7418e43f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.vaadin.tests.components.datefield;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

import com.vaadin.data.Binder;
import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.datefield.DateTimeResolution;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
import com.vaadin.ui.DateTimeField;
import com.vaadin.ui.HorizontalLayout;

public class DateTimeFieldResolutionChange extends AbstractTestUIWithLog {

    protected DateTimeFormatter DATE_FORMATTER = DateTimeFormatter
            .ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ROOT);

    @Override
    protected void setup(VaadinRequest request) {
        Binder<Pojo> binder = new Binder<>(Pojo.class);

        HorizontalLayout horizontalLayout = new HorizontalLayout();

        final DateTimeField monthField = new DateTimeField() {
            @Override
            public void setValue(LocalDateTime value) {
                if (value != null) {
                    log("MonthField set value " + DATE_FORMATTER.format(value));
                }
                super.setValue(value);
            }
        };
        monthField.setResolution(DateTimeResolution.MONTH);
        monthField.setId("MonthField");
        monthField.addValueChangeListener(
                event -> log("MonthField value change event: "
                        + DATE_FORMATTER.format(event.getValue())));
        binder.bind(monthField, "value1");

        final DateTimeField dayField = new DateTimeField() {
            @Override
            public void setValue(LocalDateTime value) {
                if (value != null) {
                    log("DayField set value " + DATE_FORMATTER.format(value));
                }
                super.setValue(value);
            }
        };
        dayField.setResolution(DateTimeResolution.DAY);
        dayField.setId("DayField");
        dayField.addValueChangeListener(
                event -> log("DayField value change event: "
                        + DATE_FORMATTER.format(event.getValue())));
        binder.bind(dayField, "value2");

        Pojo pojo = new Pojo();
        binder.setBean(pojo);

        Button monthButton = new Button("month", e -> {
            monthField.setResolution(DateTimeResolution.MONTH);
            dayField.setResolution(DateTimeResolution.MONTH);
        });

        Button dayButton = new Button("day", e -> {
            monthField.setResolution(DateTimeResolution.DAY);
            dayField.setResolution(DateTimeResolution.DAY);
        });

        Button logButton = new Button("log", e -> {
            log("MonthField current value: "
                    + DATE_FORMATTER.format(pojo.getValue1()));
            log("DayField current value: "
                    + DATE_FORMATTER.format(pojo.getValue2()));
        });

        Button setButton = new Button("set", e -> {
            LocalDateTime newDate = LocalDateTime.of(2021, 2, 14, 16, 17);
            pojo.setValue1(newDate);
            pojo.setValue2(newDate);
            binder.setBean(pojo);
        });

        horizontalLayout.addComponents(monthField, dayField, monthButton,
                dayButton, logButton, setButton);
        addComponent(horizontalLayout);
    }

    public class Pojo {
        private LocalDateTime value1, value2 = null;

        public LocalDateTime getValue1() {
            return value1;
        }

        public void setValue1(LocalDateTime value1) {
            this.value1 = value1;
        }

        public LocalDateTime getValue2() {
            return value2;
        }

        public void setValue2(LocalDateTime value2) {
            this.value2 = value2;
        }
    }

    @Override
    protected String getTestDescription() {
        return "Date field value should immediately update to match resolution.";
    }
}