/*
* SortableTableModel.java
*
* Created on November 5, 2005, 2:28 PM
*
* @author E. Rajasekar.
*/
package app.astrosoft.ui.table;
import app.astrosoft.consts.AstrosoftTableColumn;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortableTableModel extends AstrosoftTableModel {
private SortInfo sortInfo;
private List <AstrosoftTableColumn> sortableColumns;
public SortableTableModel(TableData<? extends TableRowData> rows, ColumnMetaData columnMetaData) {
super(rows, columnMetaData);
}
public SortableTableModel(TableData<? extends TableRowData> rows, ColumnMetaData columnMetaData, AstrosoftTableColumn initialSortByCol) {
this(rows, columnMetaData);
sortData(initialSortByCol);
}
public void sortData(AstrosoftTableColumn sortBy){
//Same column clicked again, toggle dir
if (sortInfo != null && sortInfo.getSortBy() == sortBy){
sortInfo.toggleDir();
}else{
sortInfo = new SortInfo(sortBy);
}
sortData();
}
private void sortData(){
if (sortInfo != null) {
Comparator<TableRowData> cmp = columnMetaData.getColumnComparator(sortInfo.getSortBy());
// If descending reverse comparator
if (sortInfo.getSortDir()){
cmp = Collections.reverseOrder(cmp);
}
rows = TableDataFactory.getSortedTableData(rows, cmp);
//Collections.sort(rows, cmp);
}
fireTableDataChanged();
}
public void updateData(TableData<? extends TableRowData> rows){
this.rows = rows;
sortData();
}
public List<AstrosoftTableColumn> getSortableColumns(){
return columnMetaData.getSortableColumns();
}
public SortInfo getSortInfo(){
return sortInfo;
}
}