package ch.sla.jdbcperflogger.console.ui;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SortOrder;
import javax.swing.table.TableRowSorter;
import ch.sla.jdbcperflogger.console.db.LogRepositoryConstants;
/**
* Custom {@link TableRowSorter} that allows to sort on statement ID when the user wants to sort on the timestamp. This
* allows to have a correct order even if 2 statements occurred at the same millisecond.
*
* @author slaurent
*
*/
public class CustomTableRowSorter extends TableRowSorter<ResultSetDataModel> {
public CustomTableRowSorter(final ResultSetDataModel datamodel) {
super(datamodel);
}
@Override
public void toggleSortOrder(final int column) {
if (LogRepositoryConstants.TSTAMP_COLUMN.equals(getModel().getColumnName(column))) {
// sort on ID instead
setMaxSortKeys(2);
final List<SortKey> keys = new ArrayList<>(getSortKeys());
if (keys.size() <= 1) {
keys.clear();
keys.add(new SortKey(column, SortOrder.DESCENDING));
keys.add(new SortKey(0, SortOrder.DESCENDING));
} else {
final SortOrder previousOrder = keys.get(0).getSortOrder();
final SortOrder newOrder = previousOrder == SortOrder.ASCENDING ? SortOrder.DESCENDING
: SortOrder.ASCENDING;
keys.set(0, new SortKey(column, newOrder));
keys.set(1, new SortKey(0, newOrder));
}
setSortKeys(keys);
} else {
setMaxSortKeys(1);
super.toggleSortOrder(column);
}
}
}