/** * TableDataFactory.java * Created On 2006, Feb 8, 2006 7:42:08 PM * @author E. Rajasekar * */ package app.astrosoft.ui.table; import java.util.ArrayList; import java.util.Comparator; import java.util.EnumMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import app.astrosoft.consts.AstrosoftTableColumn; public class TableDataFactory { private static final Logger log = Logger.getLogger(TableDataFactory.class.getName()); public static <E extends TableRowData> TableData<E> getTableData(List<E> rows){ return new ListTableData<E>(rows); } public static <E extends TableRowData> TableData<E> getTableData(E[] rows){ return new ListTableData<E>(rows); } public static <E extends TableRowData> TableData<E> getSortedTableData(TableData<E> data, Comparator<TableRowData> cmp){ return new ListTableData<E>(data, cmp); } public static <K extends Enum<K>, V extends TableRowData> TableData<V> getTableData(EnumMap<K,V> data, Class <K> enumClass){ return new EnumMapTableData<K,V>(data, enumClass); } public static <E extends TableRowData> TableData<E> getTableData(TableData<E> t1, TableData<E> t2){ return new ExtendedTableData<E>(t1,t2); } public static <E extends TableRowData> TableData<E> emptyTableData(){ return new ListTableData<E>(java.util.Collections.EMPTY_LIST); } public static <E extends TableRowData> List<ListTableData<E>> splitTableData(ListTableData<E> table, int size){ List<E> rows = table.getAllRows(); List<ListTableData<E>> data = new ArrayList<ListTableData<E>>(); int count = (int)Math.ceil(rows.size() / size); int index = 0; int i = 0; for(index = 0; i < count ; index = index + size, i++){ data.add(new ListTableData<E>(rows.subList(index, index + size))); } if (index < rows.size()){ data.add(new ListTableData<E>(rows.subList(index, rows.size()))); } return data; } public static <E extends TableRowData> TableData<E> getTableData(Iterable<E> rows){ List <E> data = new ArrayList<E>(); for(E row : rows){ data.add(row); } return new ListTableData<E>(data); } public static <E extends TableRowData>String toCSV(TableData<E> data, ColumnMetaData colData){ StringBuilder sb = new StringBuilder(); for(int i = 0; i < data.getRowCount(); i++){ TableRowData row = data.getRow(i); for(AstrosoftTableColumn col : colData.getColumns()){ sb.append(row.getColumnData(col)); sb.append(","); } sb.deleteCharAt(sb.length()-1); sb.append("\n"); } return sb.toString(); } public static <E extends TableRowData> Table getReversedTable(TableData<E> data, ColumnMetaData colData, AstrosoftTableColumn colHeader,AstrosoftTableColumn rowHeader ){ List<AstrosoftTableColumn> newCols = new ArrayList<AstrosoftTableColumn>(); newCols.add(rowHeader); for(int i = 0; i < data.getRowCount(); i++) { TableRowData rowData = data.getRow(i); Object val= rowData.getColumnData(colHeader); try { if (val instanceof Enum){ val = Enum.valueOf(AstrosoftTableColumn.class, ((Enum)val).name()); }else{ val = Enum.valueOf(AstrosoftTableColumn.class, val.toString()); } }catch(IllegalArgumentException e){ log.log(Level.SEVERE, "Value of Header column cannot be converted to AstrosoftTableColumn type" , e); } newCols.add((AstrosoftTableColumn)val); } final ColumnMetaData newColMetaData = new DefaultColumnMetaData(newCols); MapTableRowHelper rowHelper = new MapTableRowHelper(newColMetaData); List<MapTableRow> rows = new ArrayList<MapTableRow>(); List <AstrosoftTableColumn> cols = new ArrayList<AstrosoftTableColumn>(colData.getVisibleColumns()); cols.remove(colHeader); for(AstrosoftTableColumn col:cols){ Object vals[]= new Object[newCols.size()]; vals[0] = col; for(int i = 0; i < data.getRowCount(); i++){ vals[i+1] = ((TableRowData)data.getRow(i)).getColumnData(col); } rows.add(rowHelper.createRow(vals)); } final TableData<MapTableRow> reversedTableData = TableDataFactory.getTableData(rows); //System.out.println(reversedTableData); //System.out.println(newColMetaData); return new Table() { public TableData<? extends TableRowData> getTableData() { return reversedTableData; } public ColumnMetaData getColumnMetaData() { return newColMetaData; } }; } }