package com.vaadin.v7.tests.components.grid; import java.util.List; import java.util.Random; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.ui.CheckBox; import com.vaadin.v7.data.Item; import com.vaadin.v7.data.util.IndexedContainer; import com.vaadin.v7.ui.Grid; import com.vaadin.v7.ui.Grid.Column; import com.vaadin.v7.ui.Grid.SelectionMode; import com.vaadin.v7.ui.renderers.HtmlRenderer; import com.vaadin.v7.ui.renderers.TextRenderer; @SuppressWarnings("serial") public class GridSwitchRenderers extends AbstractTestUIWithLog { private static final int MANUALLY_FORMATTED_COLUMNS = 1; private static final int COLUMNS = 3; private static final int ROWS = 1000; private static final String EXPANSION_COLUMN_ID = "Column 0"; private IndexedContainer ds; @Override protected void setup(VaadinRequest request) { ds = new IndexedContainer() { @Override public List<Object> getItemIds(int startIndex, int numberOfIds) { log("Requested items " + startIndex + " - " + (startIndex + numberOfIds)); return super.getItemIds(startIndex, numberOfIds); } }; { ds.addContainerProperty(EXPANSION_COLUMN_ID, String.class, ""); int col = MANUALLY_FORMATTED_COLUMNS; for (; col < COLUMNS; col++) { ds.addContainerProperty(getColumnProperty(col), String.class, ""); } } Random rand = new Random(); rand.setSeed(13334); for (int row = 0; row < ROWS; row++) { Item item = ds.addItem(Integer.valueOf(row)); fillRow("" + row, item); item.getItemProperty(getColumnProperty(1)).setReadOnly(true); } final Grid grid = new Grid(ds); grid.setWidth("100%"); grid.getColumn(EXPANSION_COLUMN_ID).setWidth(50); for (int col = MANUALLY_FORMATTED_COLUMNS; col < COLUMNS; col++) { grid.getColumn(getColumnProperty(col)).setWidth(300); grid.getColumn(getColumnProperty(col)) .setRenderer(new TextRenderer()); } grid.setSelectionMode(SelectionMode.NONE); addComponent(grid); final CheckBox changeRenderer = new CheckBox( "SetHtmlRenderer for Column 2", false); changeRenderer.addValueChangeListener(event -> { Column column = grid.getColumn(getColumnProperty(1)); if (changeRenderer.getValue()) { column.setRenderer(new HtmlRenderer()); } else { column.setRenderer(new TextRenderer()); } grid.markAsDirty(); }); addComponent(changeRenderer); } @SuppressWarnings("unchecked") private void fillRow(String content, Item item) { int col = MANUALLY_FORMATTED_COLUMNS; for (; col < COLUMNS; col++) { item.getItemProperty(getColumnProperty(col)) .setValue("<b>(" + content + ", " + col + ")</b>"); } } private static String getColumnProperty(int c) { return "Column " + c; } }