package gui; import gui.models.QoraTableModel; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.swing.RowSorter; import javax.swing.SortOrder; import javax.swing.table.TableModel; public class QoraRowSorter extends RowSorter<TableModel> { private List<SortKey> keys; private QoraTableModel<?, ?> model; private Map<Integer, Integer> indexes; public QoraRowSorter(QoraTableModel<?, ?> model, Map<Integer, Integer> indexes) { this.keys = new ArrayList<SortKey>(); this.model = model; this.indexes = indexes; } @Override public TableModel getModel() { return this.model; } @Override public void toggleSortOrder(int column) { if(this.indexes.containsKey(column)) { SortOrder order = SortOrder.ASCENDING; if(this.keys.size() > 0 && this.keys.get(0).getColumn() == column && this.keys.get(0).getSortOrder().equals(SortOrder.ASCENDING)) { order = SortOrder.DESCENDING; } this.keys.clear(); this.keys.add(new SortKey(column, order)); this.model.getSortableList().sort(this.indexes.get(column), order.equals(SortOrder.DESCENDING)); } } @Override public int convertRowIndexToModel(int index) { return index; } @Override public int convertRowIndexToView(int index) { return index; } @SuppressWarnings("unchecked") @Override public void setSortKeys(List<? extends SortKey> keys) { this.keys = (List<SortKey>) keys; } @Override public List<? extends SortKey> getSortKeys() { return keys; } @Override public int getViewRowCount() { return getModelRowCount(); } @Override public int getModelRowCount() { return this.model.getRowCount(); } @Override public void modelStructureChanged() { } @Override public void allRowsChanged() { } @Override public void rowsInserted(int firstRow, int endRow) { } @Override public void rowsDeleted(int firstRow, int endRow) { } @Override public void rowsUpdated(int firstRow, int endRow) { } @Override public void rowsUpdated(int firstRow, int endRow, int column) { } }