blob: faec5084f744f12b37ce2f7ffc74b743cd09212c (
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
|
package com.vaadin.tests.data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import com.vaadin.data.provider.AbstractDataProvider;
import com.vaadin.data.provider.Query;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
public class DataProviderRefresh extends AbstractTestUIWithLog {
public static class Bean implements Serializable {
private String value;
private final int id;
public Bean(String value, int id) {
this.value = value;
this.id = id;
}
public String getValue() {
return value;
}
public int getId() {
return id;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "{ " + value + ", " + id + " }";
}
}
/**
* A dummy data provider for testing item replacement and stale elements.
*/
public class ReplaceListDataProvider
extends AbstractDataProvider<Bean, Void> {
private final List<Bean> backend;
public ReplaceListDataProvider(List<Bean> items) {
backend = items;
}
@Override
public void refreshItem(Bean item) {
if (replaceItem(item)) {
super.refreshItem(item);
}
}
private boolean replaceItem(Bean item) {
for (int i = 0; i < backend.size(); ++i) {
if (getId(backend.get(i)).equals(getId(item))) {
if (backend.get(i).equals(item)) {
return false;
}
backend.set(i, item);
return true;
}
}
return false;
}
@Override
public boolean isInMemory() {
return true;
}
@Override
public int size(Query<Bean, Void> t) {
return backend.size();
}
@Override
public Stream<Bean> fetch(Query<Bean, Void> query) {
return backend.stream().skip(query.getOffset())
.limit(query.getLimit());
}
@Override
public Object getId(Bean item) {
return item.getId();
}
}
private Grid<Bean> grid = new Grid<>();
@Override
protected void setup(VaadinRequest request) {
List<Bean> arrayList = new ArrayList<>();
Bean foo = new Bean("Foo", 10);
arrayList.add(foo);
arrayList.add(new Bean("Baz", 11));
ReplaceListDataProvider dataProvider = new ReplaceListDataProvider(
arrayList);
grid.setDataProvider(dataProvider);
grid.addColumn(Object::toString).setCaption("toString");
addComponent(grid);
addComponent(new Button("Replace item", event -> {
dataProvider.refreshItem(new Bean("Bar", 10));
logSelectedItem(grid.asSingleSelect().getValue());
}));
addComponent(new Button("Select old", event -> grid.select(foo)));
grid.asSingleSelect().addValueChangeListener(e -> {
logSelectedItem(e.getValue());
});
}
private void logSelectedItem(Bean bean) {
Optional.ofNullable(bean)
.map(b -> "Currently selected: " + b.toString())
.ifPresent(this::log);
}
}
|