import java.util.List; import java.util.ArrayList; /** * Created by IntelliJ IDEA. * User: rmayhew * Date: Jul 18, 2006 * Time: 1:36:07 PM * To change this template use File | Settings | File Templates. */ public class IceTreeTableModel { private List rows = new ArrayList(); private List columnNames = new ArrayList(); public void addColumn(String s){ columnNames.add(s); } public void addRow(Object[] o){ rows.add(o); } public int getColumnCount(){ return columnNames.size(); } public int getRowCount(){ return rows.size(); } public String getColumnName(int i){ return (String)columnNames.get(i); } public Object getValueAt(int row, int col){ Object[] rowdata = (Object[])rows.get(row); return rowdata[col]; } public static void main(String[] args){ IceTreeTableModel modelD = new IceTreeTableModel(); modelD.addColumn("D"); modelD.addColumn("D"); modelD.addColumn("D"); modelD.addColumn("D"); modelD.addColumn("D"); modelD.addRow(new Object[]{"D", "D", "D", "D","D","D"}); modelD.addRow(new Object[]{"D", "D", "D", "D","D","D"}); IceTreeTableModel modelC = new IceTreeTableModel(); modelC.addColumn("C"); modelC.addColumn("C"); modelC.addColumn("C"); modelC.addRow(new Object[]{"C", "C", "C", "C"}); modelC.addRow(new Object[]{"C", "C", "C", "C"}); modelC.addRow(new Object[]{modelD}); modelC.addRow(new Object[]{"C", "C", "C", "c"}); modelC.addRow(new Object[]{"C", "C", "C", "C"}); modelC.addRow(new Object[]{"C", "C", "C", "C"}); IceTreeTableModel modelB = new IceTreeTableModel(); modelB.addColumn("B"); modelB.addColumn("B"); modelB.addColumn("B"); modelB.addRow(new Object[]{"B", "B", "B", "B"}); modelB.addRow(new Object[]{"C", modelC}); modelB.addRow(new Object[]{"B", "B", "B", "B"}); modelB.addRow(new Object[]{"B", "B", "B", "B"}); modelB.addRow(new Object[]{"C", modelC}); modelB.addRow(new Object[]{"B", "B", "B", "B"}); modelB.addRow(new Object[]{"B", "B", "B", "B"}); IceTreeTableModel model = new IceTreeTableModel(); model.addColumn("A"); model.addColumn("A"); model.addColumn("A"); model.addRow(new Object[]{"A", "A", "A", "A"}); model.addRow(new Object[]{"B", modelB}); model.addRow(new Object[]{"A", "A", "A", "A"}); model.addRow(new Object[]{"A", "A", "A", "A"}); model.addRow(new Object[]{"B", modelB}); model.addRow(new Object[]{"A", "A", "A", "A"}); System.out.println(renderTable(model, new StringBuffer())); } private static String renderTable(IceTreeTableModel tableModel, StringBuffer sb){ sb.append("\n"); printHeader(sb, tableModel); boolean headerAgain = false; for(int row = 0; row < tableModel.getRowCount(); row++){ if(headerAgain){ printHeader(sb,tableModel); headerAgain = false; } sb.append("\n"); for(int col = 0; col < tableModel.getColumnCount(); col++){ Object cellvalue = tableModel.getValueAt(row, col); if(cellvalue != null && cellvalue instanceof IceTreeTableModel){ int colspan = tableModel.getColumnCount() - col; sb.append("\n"); headerAgain = true; break; }else{ sb.append("\n"); } } sb.append("\n"); } sb.append("
"); renderTable((IceTreeTableModel)cellvalue, sb); sb.append(""); sb.append(cellvalue); sb.append("
\n"); return sb.toString(); } private static void printHeader(StringBuffer sb, IceTreeTableModel tableModel) { sb.append("\n"); for(int i = 0; i < tableModel.getColumnCount(); i++){ sb.append("").append(tableModel.getColumnName(i)).append(""); } sb.append("\n"); } }