aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/main/java/com/vaadin/tests/components/window/CloseModalSubWindow.java
blob: 9c8145245caedade476062d8c35c892adc57255d (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
package com.vaadin.tests.components.window;

import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.ui.TreeTable;

@SuppressWarnings("serial")
public class CloseModalSubWindow extends AbstractTestUIWithLog {

    public static final String SUB_WINDOW = "sub-win";
    public static final String TREE_TABLE = "treetable";
    public static final String DELETE_BUTTON = "del-btn";
    public static final String CONFIRM_BUTTON = "confirm-btn";

    private ConfirmWindow win;

    private TreeTable table;

    @Override
    protected String getTestDescription() {
        return "Lists a dozen items in a TreeTable with a Delete Button in each row. "
                + "Delete button will open an sub-window allowing user to either confirm delete operation or cancel. "
                + "Confirming should close the sub-window at the same time as the item is removed from the TreeTable.";
    }

    @Override
    protected Integer getTicketNumber() {
        return 13188;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void setup(VaadinRequest request) {
        table = new TreeTable();
        table.setId(TREE_TABLE);
        table.addContainerProperty("column", String.class, null);
        table.addContainerProperty("delete", Button.class, null);

        for (int i = 0; i < 10; i++) {
            Item item = table.addItem(i);
            item.getItemProperty("column").setValue("" + i);

            Button b = new Button("Delete", deleteClickListener);
            b.setId(DELETE_BUTTON + i);
            b.setData(i);
            item.getItemProperty("delete").setValue(b);
        }

        table.setSortEnabled(false);
        table.setColumnReorderingAllowed(false);
        table.setEditable(true);
        table.setPageLength(0);

        addComponent(table);

    }

    private void deleteItem(Object itemId) {
        table.removeItem(itemId);
    }

    private ClickListener deleteClickListener = event -> {
        win = new ConfirmWindow(event.getButton().getData());
        log("Modal sub-window opened");
    };

    private ClickListener confirmClickListener = event -> {
        deleteItem(event.getButton().getData());
        win.close();
        log("Modal sub-window closed");
    };

    private ClickListener cancelClickListener = event -> {
        win.close();
        log("Modal sub-window closed");
    };

    /** Modal confirmation sub-window. */
    class ConfirmWindow extends Window {

        public ConfirmWindow(Object itemId) {
            setModal(true);
            setWidth("300px");
            setHeight("200px");
            setId(SUB_WINDOW);

            Button ok = new Button("Confirm Delete", confirmClickListener);
            ok.setId(CONFIRM_BUTTON);
            ok.setData(itemId);
            Button cancel = new Button("Cancel", cancelClickListener);

            HorizontalLayout l = new HorizontalLayout();
            l.addComponent(ok);
            l.addComponent(cancel);

            setContent(l);

            UI.getCurrent().addWindow(this);
        }
    }
}