/* GroupsSortableModel.java Purpose: Description: History: Mon Sep 1 10:40:49 2008, Created by tomyeh Copyright (C) 2008 Potix Corporation. All Rights Reserved. {{IS_RIGHT This program is distributed under LGPL Version 2.1 in the hope that it will be useful, but WITHOUT ANY WARRANTY. }}IS_RIGHT */ package org.zkoss.zul.ext; import java.util.Comparator; import org.zkoss.zul.Column; import org.zkoss.zul.Grid; import org.zkoss.zul.GroupsModel; import org.zkoss.zul.ListModel; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listheader; /** * An extra interface that can be implemented with {@link GroupsModel} * to control the sorting and grouping of the data model. * * <p>D: the type of the data. * @author tomyeh * @since 6.0.0 */ public interface GroupsSortableModel<D> { /** It called when {@link Listbox} or {@link Grid} has to sort * the content. * * <p>After sorting, this model shall notify the instances of * {@link org.zkoss.zul.event.ListDataListener} (registered thru * {@link ListModel#addListDataListener}) to update the content. * Typically you have to notify with * <pre><code>new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, -1, -1)</code></pre> * to denote all data are changed (and reloading is required). * * <p>The comparator assigned to, say, {@link Listheader#setSortAscending} * is passed to method as the cmpr argument. * Thus, developers could use it as a tag to know which column * or what kind of order to sort. * Notice that the comparator is capable to sort under the order specified * in the ascending parameter. In other words, you could ignore the * ascending parameter (which is used only for providing additional information) * * @param cmpr the comparator assigned to {@link Listheader#setSortAscending} * and other relative methods. If developers didn't assign any one, * the default comparator is used. * Notice that it is capable to sort the data in the correct order, * you could ignore the ascending parameter. * @param ascending whether to sort in the ascending order (or in * the descending order, if false). Notice that it is used only to * provide additional information. To sort the data correctly, you could * count on the cmpr parameter only. * @param colIndex the index of the column */ public void sort(Comparator<D> cmpr, boolean ascending, int colIndex); /** * Groups and sorts the data by the specified column. * It only called when {@link Listbox} or {@link Grid} has the sort function. * * @param cmpr the comparator assigned to {@link Column#setSortAscending} * and other relative methods. If developers didn't assign any one, * the method is returned directly. * @param ascending whether to sort in the ascending order (or in * the descending order) * @param colIndex the index of the column */ public void group(Comparator<D> cmpr, boolean ascending, int colIndex); }