package zk.support.customer.vw.performancebiglist; import java.util.ArrayList; import java.util.List; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.zul.ListModelList; public class BigListViewModel { private static final String NUMBER = "number"; private static final String TEXT = "text"; private int numRows = 100; private int numColumns = 1; private ListModelList rows; private List columns; @Init public void init() { initModel(); } private void initModel() { columns = new ArrayList(); rows = new ListModelList(); for(int columnIndex = 0; columnIndex < numColumns; columnIndex++) { String type = (columnIndex % 2) == 0 ? TEXT : NUMBER; ColumnInfo column = new ColumnInfo("col-" + columnIndex, type); columns.add(column); } for(int rowIndex = 0; rowIndex < numRows; rowIndex++) { RowInfo row = new RowInfo(); List> cells = row.getCells(); for(int columnIndex = 0; columnIndex < numColumns; columnIndex++) { ColumnInfo column = columns.get(columnIndex); if(TEXT.equals(column.getType())) { cells.add(new CellInfo(rowIndex + ", " + columnIndex, column)); } else { cells.add(new CellInfo(rowIndex * columnIndex, column)); } } rows.add(row); } } @Command("narrowModel") @NotifyChange({"columns", "rows"}) public void doNarrowModel() { numColumns = 0; initModel(); } @Command("widenModel") @NotifyChange({"columns", "rows"}) public void doWidenModel(@BindingParam("cols") int cols) { numColumns = cols; initModel(); } public ListModelList getRows() { return rows; } public List getColumns() { return columns; } public class RowInfo { private List> cells = new ArrayList>(); public List> getCells() { return cells; } } public class CellInfo { private T value; private ColumnInfo column; public CellInfo(T value, ColumnInfo column) { super(); this.value = value; this.column = column; } public ColumnInfo getColumn() { return column; } public T getValue() { return value; } } public class ColumnInfo { private String label; private String type; public ColumnInfo(String label, String type) { super(); this.label = label; this.type = type; } public String getLabel() { return label; } public String getType() { return type; } } }