aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManager.java
blob: 8fb9a358e4e0bcb1055bcd70b8a32ddec222d0f3 (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.vaadin.tests.components.treegrid;

import java.util.ArrayList;
import java.util.List;

import com.vaadin.annotations.Theme;
import com.vaadin.data.TreeData;
import com.vaadin.data.provider.TreeDataProvider;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TreeGrid;

@Theme("valo")
public class TreeGridBigDetailsManager extends AbstractTestUI {

    private TreeGrid<String> treeGrid;
    private TreeDataProvider<String> treeDataProvider;
    private List<String> items = new ArrayList<String>();

    private void initializeDataProvider() {
        TreeData<String> data = new TreeData<>();
        for (int i = 0; i < 100; i++) {
            String root = "Root " + i;
            items.add(root);
            data.addItem(null, root);
            for (int j = 0; j < 10; j++) {
                String branch = "Branch " + i + "/" + j;
                items.add(branch);
                data.addItem(root, branch);
                for (int k = 0; k < 3; k++) {
                    String leaf = "Leaf " + i + "/" + j + "/" + k;
                    items.add(leaf);
                    data.addItem(branch, leaf);
                }
            }
        }
        treeDataProvider = new TreeDataProvider<>(data);
    }

    @Override
    protected void setup(VaadinRequest request) {
        initializeDataProvider();
        treeGrid = new TreeGrid<>();
        treeGrid.setDataProvider(treeDataProvider);
        treeGrid.setSizeFull();
        treeGrid.addColumn(String::toString).setCaption("String")
                .setId("string");
        treeGrid.addColumn((i) -> items.indexOf(i)).setCaption("Index");
        treeGrid.setHierarchyColumn("string");
        treeGrid.setDetailsGenerator(
                row -> new Label("details for " + row.toString()));
        treeGrid.addItemClickListener(event -> {
            treeGrid.setDetailsVisible(event.getItem(),
                    !treeGrid.isDetailsVisible(event.getItem()));
        });

        Button showDetails = new Button("Show all details", event -> {
            for (String id : items) {
                treeGrid.setDetailsVisible(id, true);
            }
        });
        showDetails.setId("showDetails");
        Button hideDetails = new Button("Hide all details", event -> {
            for (String id : items) {
                treeGrid.setDetailsVisible(id, false);
            }
        });
        hideDetails.setId("hideDetails");
        Button expandAll = new Button("Expand all", event -> {
            treeGrid.expand(items);
        });
        expandAll.setId("expandAll");
        Button collapseAll = new Button("Collapse all", event -> {
            treeGrid.collapse(items);
        });
        collapseAll.setId("collapseAll");
        @SuppressWarnings("deprecation")
        Button scrollTo55 = new Button("Scroll to 55",
                event -> treeGrid.scrollTo(55));
        scrollTo55.setId("scrollTo55");
        scrollTo55.setVisible(false);
        Button scrollTo3055 = new Button("Scroll to 3055",
                event -> treeGrid.scrollTo(3055));
        scrollTo3055.setId("scrollTo3055");
        scrollTo3055.setVisible(false);
        Button scrollToEnd = new Button("Scroll to end",
                event -> treeGrid.scrollToEnd());
        scrollToEnd.setId("scrollToEnd");
        scrollToEnd.setVisible(false);
        Button scrollToStart = new Button("Scroll to start",
                event -> treeGrid.scrollToStart());
        scrollToStart.setId("scrollToStart");
        scrollToStart.setVisible(false);

        Button toggle15 = new Button("Toggle 15",
                event -> treeGrid.setDetailsVisible(items.get(15),
                        !treeGrid.isDetailsVisible(items.get(15))));
        toggle15.setId("toggle15");
        toggle15.setVisible(false);

        Button toggle3000 = new Button("Toggle 3000",
                event -> treeGrid.setDetailsVisible(items.get(3000),
                        !treeGrid.isDetailsVisible(items.get(3000))));
        toggle3000.setId("toggle3000");
        toggle3000.setVisible(false);

        Button addGrid = new Button("Add grid", event -> {
            addComponent(treeGrid);
            getLayout().setExpandRatio(treeGrid, 2);
            scrollTo55.setVisible(true);
            scrollTo3055.setVisible(true);
            scrollToEnd.setVisible(true);
            scrollToStart.setVisible(true);
            toggle15.setVisible(true);
            toggle3000.setVisible(true);
        });
        addGrid.setId("addGrid");

        addComponents(
                new HorizontalLayout(showDetails, hideDetails, expandAll,
                        collapseAll),
                new HorizontalLayout(scrollTo55, scrollTo3055, scrollToEnd,
                        scrollToStart),
                new HorizontalLayout(addGrid, toggle15, toggle3000));

        getLayout().getParent().setHeight("100%");
        getLayout().setHeight("100%");
        treeGrid.setHeight("100%");
        setHeight("100%");
    }

    @Override
    protected String getTestDescription() {
        return "Expanding and collapsing with and without open details rows shouldn't cause exceptions. "
                + "Details row should be reopened upon expanding if it was open before collapsing.";
    }

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

}