package test; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Random; import org.zkoss.pivot.PivotField; import org.zkoss.pivot.Pivottable; import org.zkoss.pivot.impl.TabularPivotModel; import org.zkoss.zk.ui.select.SelectorComposer; import org.zkoss.zk.ui.select.annotation.Listen; import org.zkoss.zk.ui.select.annotation.Wire; /** * Tested with ZK 6.0.2 and ZK Pivottable 2.0.2 FL * */ @SuppressWarnings("rawtypes") public class TestComposer extends SelectorComposer { /** * generated serial version UID */ private static final long serialVersionUID = -2897873399288955635L; private TabularPivotModel _pivotModel; @Wire Pivottable pivottable; /** * Get pivottable's model * @return TabularPivotModel the pivottable's model * @throws Exception */ public TabularPivotModel getPivotModel () throws Exception { if (_pivotModel == null) { _pivotModel = new TabularPivotModel(getData(), getColumns()); // assign rows, the order matches to the level of row node field _pivotModel.setFieldType("Program", PivotField.Type.ROW); _pivotModel.setFieldType("State", PivotField.Type.ROW); _pivotModel.setFieldType("City", PivotField.Type.ROW); // assign columns, the order matches to the level of column node field _pivotModel.setFieldType("Date", PivotField.Type.COLUMN); } return _pivotModel; } /** * prepare the data for pivottable's model * The order of object put into data list matches * the order of column name's order * @return * @throws Exception */ public List> getData() throws Exception { List> result = new ArrayList>(); List data = null; Random r = new Random(); long now = System.currentTimeMillis(); for (int i = 0; i < 3; i++) { data = new ArrayList(); data.add("Program " + r.nextInt(5)); data.add("State " + r.nextInt(5)); data.add("City " + r.nextInt(5)); data.add(new Date(now - (r.nextInt(700) * 1000 * 60 * 60 * 24))); data.add(r.nextInt(500) + 500); data.add(r.nextInt(500) + 500); result.add(data); } return result; } /** * prepare columns name for pivottable's model * @return */ public List getColumns() { return Arrays.asList(new String[]{ "Program", "State", "City", "Date", "Price Paid", "Price Paid 2" }); } @Listen (" onClick = #orientBtn") public void changeDataFieldOriented () { if ("column".equals(pivottable.getDataFieldOrient())) { pivottable.setDataFieldOrient("row"); } else { pivottable.setDataFieldOrient("column"); } } }