ca.odell.glazedlists.gui

Class AbstractTableComparatorChooser<E>

Known Direct Subclasses:
TableComparatorChooser<E>

public abstract class AbstractTableComparatorChooser<E>
extends java.lang.Object

A TableComparatorChooser is a tool that allows the user to sort a table widget by clicking on the table's headers. It requires that the table has a SortedList as a source as the sorting on that list is used.
Author:
Kevin Maltby

Field Summary

static Object
MULTIPLE_COLUMN_KEYBOARD
Emulate the sorting behaviour of SUN's TableSorter, by Philip Milne et.
static Object
MULTIPLE_COLUMN_MOUSE
Sort multiple columns without use of the keyboard.
static Object
SINGLE_COLUMN
Emulate the sorting behaviour of Windows Explorer and Mac OS X Finder.
protected SortedList
sortedList
the sorted list to choose the comparators for
protected ca.odell.glazedlists.impl.gui.SortingState
sortingState
manage which columns are sorted and in which order
protected Comparator
superE>sortedListComparator
the potentially foreign comparator associated with the sorted list

Constructor Summary

AbstractTableComparatorChooser(SortedList sortedList, TableFormat tableFormat)
Create a AbstractTableComparatorChooser that sorts the specified SortedList over the specified columns.

Method Summary

void
appendComparator(int column, int comparatorIndex, boolean reverse)
Append the comparator specified by the column, comparator index and reverse parameters to the end of the sequence of comparators this AbstractTableComparatorChooser is sorting the SortedList by.
void
clearComparator()
Clear all sorting state and set the SortedList to use its natural order.
Comparator
createComparatorForElement(Comparator comparatorForColumn, int column)
Creates a Comparator that can compare list elements given a Comparator that can compare column values for the specified column.
void
dispose()
void
fromString(String stringEncoded)
This class is capable of representing its own state with a String, to persist sorting state externally.
int
getColumnComparatorIndex(int column)
Gets the index comparator in use for the specified column.
List
getComparatorsForColumn(int column)
Gets the list of comparators for the specified column.
List
getSortingColumns()
Get the columns that the TableComparatorChooser is sorting by.
protected int
getSortingStyle(int column)
Gets the sorting style currently applied to the specified column.
boolean
isColumnReverse(int column)
Gets whether the comparator in use for the specified column is reverse.
protected void
rebuildComparator()
Updates the comparator in use and applies it to the table.
protected void
redetectComparator(E> currentComparator)
Examines the current Comparator of the SortedList and adds icons to the table header renderers in response.
protected void
setTableFormat(TableFormat tableFormat)
Adjusts the TableFormat this comparator chooser uses when selecting comparators.
String
toString()
Encode the current sorting state as a String.

Field Details

MULTIPLE_COLUMN_KEYBOARD

public static final Object MULTIPLE_COLUMN_KEYBOARD
Emulate the sorting behaviour of SUN's TableSorter, by Philip Milne et. al.

This is not a direct adaptation since we choose to support potentially many Comparators per column, wheras TableSorter is limited to one.

For reference, this is TableSorter's behaviour, copied shamelessly from that project's source file:

  • Mouse-click: Clears the sorting gui of all other columns and advances the sorting gui of that column through three values: {NOT_SORTED, ASCENDING, DESCENDING} (then back to NOT_SORTED again).
  • SHIFT-mouse-click: Clears the sorting gui of all other columns and cycles the sorting gui of the column through the same three values, in the opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
  • CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except that the changes to the column do not cancel the statuses of columns that are already sorting - giving a way to initiate a compound sort.

  • MULTIPLE_COLUMN_MOUSE

    public static final Object MULTIPLE_COLUMN_MOUSE
    Sort multiple columns without use of the keyboard. Single clicks cycle through comparators, double clicks clear them.

    This is the original sorting strategy provided by Glazed Lists, with a limitation that it is impossible to clear a sort order that is already in place. It's designed to be used with multiple columns and multiple comparators per column.

    The overall behaviour is as follows:

  • Click: sort this column. If it's already sorted, reverse the sort order. If its already reversed, sort using the column's next comparator in forward order. If there are no more comparators, go to the first comparator. If there are multiple sort columns, sort this column after those columns.
  • Double click: like a single click, but clear all sorting columns first.

  • SINGLE_COLUMN

    public static final Object SINGLE_COLUMN
    Emulate the sorting behaviour of Windows Explorer and Mac OS X Finder.

    Single clicks toggles between forward and reverse. If multiple comparators are available for a particular column, they will be cycled in order.

    At most one column can be sorted at a time.


    sortedList

    protected SortedList sortedList
    the sorted list to choose the comparators for

    sortingState

    protected final ca.odell.glazedlists.impl.gui.SortingState sortingState
    manage which columns are sorted and in which order

    superE>sortedListComparator

    protected ComparatorsortedListComparator
    the potentially foreign comparator associated with the sorted list

    Constructor Details

    AbstractTableComparatorChooser

    protected AbstractTableComparatorChooser(SortedList sortedList,
                                             TableFormat tableFormat)
    Create a AbstractTableComparatorChooser that sorts the specified SortedList over the specified columns.

    Method Details

    appendComparator

    public void appendComparator(int column,
                                 int comparatorIndex,
                                 boolean reverse)
    Append the comparator specified by the column, comparator index and reverse parameters to the end of the sequence of comparators this AbstractTableComparatorChooser is sorting the SortedList by.

    Append implies that if this AbstractTableComparatorChooser is already sorting that list by another column, this comparator will only be used to break ties from that Comparator. If the table is already sorting by the specified column, it will be silently discarded.

    Suppose we're currently not sorting the table, this method will cause the table to be sorted by the column specified. If we are sorting the table by some column c, this will sort by that column first and the column specified here second.

    If this AbstractTableComparatorChooser doesn't support multiple column sort, this will replace the current Comparator rather than appending to it.

    Parameters:
    column - the column to sort by
    comparatorIndex - the comparator to use, specify 0 for the default comparator.
    reverse - whether to reverse the specified comparator.

    clearComparator

    public void clearComparator()

    createComparatorForElement

    public Comparator createComparatorForElement(Comparator comparatorForColumn,
                                                 int column)
    Creates a Comparator that can compare list elements given a Comparator that can compare column values for the specified column. This returns a Comparator that extracts the table values for the specified column and then delegates the actual comparison to the specified comparator.

    dispose

    public void dispose()

    fromString

    public void fromString(String stringEncoded)
    This class is capable of representing its own state with a String, to persist sorting state externally. The format uses zero or more column specifications, separated by commas. Here are some valid examples:
    String RepresentationDescription
    "column 3"Sort using the column at index 3, using that column's first comparator, in forward order
    "column 3 reversed"Sort using the column at index 3, using that column's first comparator, in reverse order
    "column 3, column 1"Sort using the column at index 3, using that column's first comparator, in forward order
    then by
    the column at index 1, using that column's first comparator, in forward order.
    "column 3 comparator 2"Sort using the column at index 3, using that column's comparator at index 2, in forward order
    "column 3 comparator 2 reversed"Sort using the column at index 3, using that column's comparator at index 2, in reverse order
    "column 3 reversed, column 1 comparator 2, column 5 comparator 1 reversed, column 0"Sort using the column at index 3, using that column's first comparator, in reverse order
    then by
    the column at index 1, using that column's comparator at index 2, in forward order
    then by
    the column at index 5, using that column's comparator at index 1, in reverse order
    then by
    the column at index 0, using that column's first comparator, in forward order.

    More formally, the grammar for this String representation is as follows:
    <COLUMN> = column <COLUMN INDEX> (comparator <COMPARATOR INDEX>)? (reversed)?
    <COMPARATOR SPEC> = ( <COLUMN> (, <COLUMN>)* )?


    getColumnComparatorIndex

    public int getColumnComparatorIndex(int column)
    Returns:
    the comparator index for the specified column, or -1 if that column is not being used to sort.

    getComparatorsForColumn

    public List getComparatorsForColumn(int column)
    Gets the list of comparators for the specified column. The user is free to add comparators to this list or clear the list if the specified column cannot be sorted.

    getSortingColumns

    public List getSortingColumns()
    Get the columns that the TableComparatorChooser is sorting by.
    Returns:
    a List of Integers. The first Integer is the primary sorting column, the second is the secondary, etc. This list may be empty but never null.

    getSortingStyle

    protected int getSortingStyle(int column)
    Gets the sorting style currently applied to the specified column.

    isColumnReverse

    public boolean isColumnReverse(int column)
    Gets whether the comparator in use for the specified column is reverse.

    rebuildComparator

    protected void rebuildComparator()
    Updates the comparator in use and applies it to the table.

    redetectComparator

    protected void redetectComparator(E> currentComparator)
    Examines the current Comparator of the SortedList and adds icons to the table header renderers in response.

    To do this, clicks are injected into each of the corresponding ColumnClickTrackers.


    setTableFormat

    protected void setTableFormat(TableFormat tableFormat)
    Adjusts the TableFormat this comparator chooser uses when selecting comparators. Calling this method will clear any active sorting.

    toString

    public String toString()

    Glazed Lists, Copyright © 2003-2006 publicobject.com, O'Dell Engineering.
    Documentation build by pbuilder at 2007-12-21 23:49