blob: d8f7fface3bdf2468c1130de40059b548daa3eee (
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
|
package com.vaadin.tests.application;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.Set;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.ConnectorTracker;
import com.vaadin.ui.Window;
public class ResynchronizeAfterAsyncRemoval extends AbstractTestUIWithLog {
@Override
public void setup(VaadinRequest vaadinRequest) {
final Window window = new Window("Asynchronously removed window");
window.center();
// The window will enqueue a non-immediate message reporting its current
// position.
addWindow(window);
// Remove window immediately when the current response is sent
runAfterResponse(new Runnable() {
@Override
public void run() {
removeWindow(window);
}
});
// Clicking the button will trigger sending the window coordinates, but
// the window is already removed at that point.
addComponent(new Button("Am I dirty?", new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
log("Window removed: " + (window.getParent() == null));
boolean dirty = getUI().getConnectorTracker().isDirty(
event.getButton());
log("Dirty: " + dirty);
}
}));
addComponent(new Button("Log unregistered connector count",
new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
logUnregisteredConnectorCount();
}
}));
}
private void logUnregisteredConnectorCount() {
int count = 0;
Map<Integer, Set<String>> unregisterIdMap = getUnregisterIdMap();
for (Set<String> set : unregisterIdMap.values()) {
count += set.size();
}
log("syncId: " + getConnectorTracker().getCurrentSyncId());
log("Unregistered connector count: " + count);
}
@SuppressWarnings("unchecked")
private Map<Integer, Set<String>> getUnregisterIdMap() {
try {
ConnectorTracker tracker = getConnectorTracker();
Field field = tracker.getClass().getDeclaredField(
"syncIdToUnregisteredConnectorIds");
field.setAccessible(true);
return (Map<Integer, Set<String>>) field.get(tracker);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
|