package com.vaadin.tests.push;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.SerializationUtils;
import com.vaadin.annotations.Push;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
@Push
public class PushRemoveConnectors extends AbstractTestUIWithLog {
private transient final ScheduledExecutorService threadPool = Executors
.newScheduledThreadPool(5);
static final String START = "start";
static final String STOP = "stop";
private AbstractOrderedLayout verticalLayout;
private transient ScheduledFuture<?> task = null;
@Override
protected void setup(VaadinRequest request) {
final CheckBox pollingEnabled = new CheckBox("Polling enabled");
pollingEnabled.addValueChangeListener(event -> setPollInterval(
pollingEnabled.getValue() ? 1000 : -1));
Button start = new Button("start");
start.setId(START);
start.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
task = threadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
access(new Runnable() {
@Override
public void run() {
populate();
log("Serialized session size: "
+ getSessionSize());
}
});
}
}, 1, 1, TimeUnit.SECONDS);
}
});
Button stop = new Button("stop");
stop.setId(STOP);
stop.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
if (task != null) {
task.cancel(true);
task = null;
}
}
});
verticalLayout = new HorizontalLayout();
populate();
addComponents(pollingEnabled, start, stop, verticalLayout);
}
private void populate() {
verticalLayout.removeAllComponents();
for (int i = 0; i < 500; i++) {
Label l = new Label(".");
l.setSizeUndefined();
verticalLayout.addComponent(l);
}
}
private int getSessionSize() {
return SerializationUtils.serialize(getSession()).length;
}
}