001: /*
002: * $Id: SortController.java,v 1.5 2006/06/08 13:00:43 kleopatra Exp $
003: *
004: * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005: * Santa Clara, California 95054, U.S.A. All rights reserved.
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020: */
021:
022: package org.jdesktop.swingx.decorator;
023:
024: import java.util.Comparator;
025: import java.util.List;
026:
027: import org.jdesktop.swingx.JXTable;
028:
029: /**
030: * Defines the interactive sort control for a table. All sort gesture requests
031: * from a {@link JXTable} will be routed through the SortController returned
032: * from {@link FilterPipeline}.
033: * <p>
034: *
035: *
036: * To customize sorting behaviour, f.i. to define a toggle sort sequence
037: * different from the default, subclass {@link FilterPipeline} and implement a
038: * custom SortController.
039: *
040: * <pre>
041: * <code>
042: * public class CustomToggleSortOrderFP extends FilterPipeline {
043: *
044: * public CustomToggleSortOrderFP() {
045: * super();
046: * }
047: *
048: * public CustomToggleSortOrderFP(Filter[] inList) {
049: * super(inList);
050: * }
051: *
052: * //@Override
053: * protected SortController createDefaultSortController() {
054: * return new CustomSortController();
055: * }
056: *
057: * protected class CustomSortController extends SorterBasedSortController {
058: *
059: * //@Override
060: * public void toggleSortOrder(int column, Comparator comparator) {
061: * Sorter currentSorter = getSorter();
062: * if ((currentSorter != null)
063: * && (currentSorter.getColumnIndex() == column)
064: * && !currentSorter.isAscending()) {
065: * setSorter(null);
066: * } else {
067: * super.toggleSortOrder(column, comparator);
068: * }
069: * }
070: *
071: * }
072: * }
073: *
074: * // use it
075: * xTable.setFilters(new CustomToggleSortOrderFP());
076: *
077: * </code>
078: * </pre>
079: *
080: * <p>
081: * The GlazedLists project (http://publicobject.com/glazedlists/)
082: * has an example about how to replace the SwingX'
083: * internal (view based) by an external
084: * (model-decoration based) sort/filter mechanism.
085: *
086: * <p>
087: * This interface is inspired by a Java 1.6 class RowSorter, extracting
088: * the sort control part - change notification and index mapping is left to the
089: * enclosing FilterPipeline.
090: *
091: * @author <a href="mailto:jesse@swank.ca">Jesse Wilson</a>
092: *
093: */
094: public interface SortController {
095:
096: /**
097: * Reverses the sort order of the specified column.
098: * It is up to implementating classes to provide the exact behavior when invoked.
099: *
100: * @param column the model index of the column to toggle
101: */
102: void toggleSortOrder(int column);
103:
104: /**
105: * Reverses the sort order of the specified column.
106: * It is up to implementating classes to provide the exact behavior when invoked.
107: *
108: * @param column the model index of the column to toggle
109: * @param comparator the comparator to use
110: */
111: void toggleSortOrder(int column, Comparator comparator);
112:
113: /**
114: * Set the sort order by column.
115: */
116: void setSortKeys(List<? extends SortKey> keys);
117:
118: /**
119: * List the sort order by column.
120: */
121: List<? extends SortKey> getSortKeys();
122:
123: /**
124: * Get the sort order of the specified column.
125: *
126: * PENDING (JW) - remove? Looks like an "intermediate" convenience method.
127: * Not used in SwingX, only in test methods.
128: *
129: * @return one of {@link SortOrder#ASCENDING},
130: * {@link SortOrder#DESCENDING} or {@link SortOrder#UNSORTED}.
131: */
132: SortOrder getSortOrder(int column);
133:
134: }
|