package com.towel.swing.table; import java.util.HashMap; import java.util.Map; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import com.towel.collections.aggr.AggregateFunc; public class AggregateModel extends AbstractTableModel { private TableModel model; private Map<Integer, AggregateFunc<? extends Object>> functions; public AggregateModel(TableModel model) { this.model = model; functions = new HashMap<Integer, AggregateFunc<? extends Object>>(); } public void setFunction(int colIdx, AggregateFunc<? extends Object> func) { functions.put(colIdx, func); } @Override public int getRowCount() { return 1; } @Override public int getColumnCount() { return model.getColumnCount(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (!functions.containsKey(columnIndex)) return ""; AggregateFunc<Object> func = (AggregateFunc<Object>) functions .get(columnIndex); func.init(); for (int i = 0; i < model.getRowCount(); i++) func.update(model.getValueAt(i, columnIndex)); return func.getResult(); } public boolean isCellEditable(int row, int col){ return false; } }