package com.vaadin.tests.components.grid;
import com.vaadin.annotations.Theme;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.tests.util.Person;
import com.vaadin.tests.util.PersonContainer;
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.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.v7.ui.Grid;
import com.vaadin.v7.ui.Grid.CellReference;
import com.vaadin.v7.ui.Grid.CellStyleGenerator;
import com.vaadin.v7.ui.Grid.RowReference;
import com.vaadin.v7.ui.Grid.RowStyleGenerator;
@Theme("valo")
public class GridRefreshRow extends AbstractTestUIWithLog {
private PersonContainer container;
private Grid grid;
private boolean styles[] = new boolean[] { false, false, false };
@Override
protected void setup(VaadinRequest request) {
getPage().getStyles()
.add(".rowstyle td {background-color: lightgreen !important;}");
getPage().getStyles()
.add("td.cellstyle {background-color: lightblue !important;}");
container = PersonContainer.createWithTestData(100);
container.addNestedContainerBean("address");
grid = new Grid(container);
grid.setWidth("800px");
grid.setRowStyleGenerator(new RowStyleGenerator() {
@Override
public String getStyle(RowReference row) {
int index = container.indexOfId(row.getItemId());
if (index < 3 && styles[index]) {
return "rowstyle";
}
return null;
}
});
grid.setCellStyleGenerator(new CellStyleGenerator() {
@Override
public String getStyle(CellReference cell) {
int index = container.indexOfId(cell.getItemId());
if (index < 3 && styles[index]
&& "email".equals(cell.getPropertyId())) {
return "cellstyle";
}
return null;
}
});
addComponent(grid);
addComponents(new HorizontalLayout(update(0), update(1), update(2)));
Button refresh10 = new Button("Refresh 0-9", new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
grid.refreshRows(container.getItemIds(0, 9).toArray());
}
});
refresh10.setId("refresh10");
addComponents(new HorizontalLayout(refresh(0), refresh(1), refresh(2),
new Button("Refresh non-existant", new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
grid.refreshRows("foobar");
}
})), refresh10);
addComponents(new HorizontalLayout(style(0), style(1), style(2)));
}
private Component style(final int i) {
final CheckBox checkBox = new CheckBox("Style for " + i);
checkBox.addValueChangeListener(
event -> styles[i] = checkBox.getValue());
checkBox.setId("style" + i);
return checkBox;
}
private Component update(final int i) {
Button button = new Button("Update " + i, new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
Person p = container.getIdByIndex(i);
p.setFirstName("!" + p.getFirstName());
}
});
button.setId("update" + i);
return button;
}
protected Component refresh(final int i) {
Button button = new Button("Refresh row " + i, new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
grid.refreshRows(container.getIdByIndex(i));
}
});
button.setId("refresh" + i);
return button;
}
}