/* ListModel.java

	Purpose:
		
	Description:
		
	History:
		Wed Aug 17 17:44:08     2005, Created by tomyeh

Copyright (C) 2005 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;

import java.util.Collections;
import java.util.List;

import org.zkoss.zul.event.ListDataListener;
import org.zkoss.zul.ext.Selectable;

/**
 * This interface defines the methods that components like {@link Listbox}
 * and {@link Grid} use to get the content of items.
 *
 * <p>If the list model is used with sortable listbox or grid,
 * the developer must also implement {@link org.zkoss.zul.ext.Sortable}.
 *
 * <p>To use with {@link Listbox} and other components that
 * supports the selection, {@link Selectable} must be implemented too.
 *
 * <p>For more information, please refer to
 * <a href="http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/MVC/Model/List_Model">ZK Developer's Reference: List Model</a>
 *
 * @author tomyeh
 * @see Grid
 * @see Listbox
 * @see ListitemRenderer
 * @see org.zkoss.zul.ext.Sortable
 * @see Selectable
 */
public interface ListModel<E> {
	/** Returns the value at the specified index.
	 */
	public E getElementAt(int index);

	/** Returns the length of the list.
	 */
	public int getSize();

	/** Adds a listener to the list that's notified each time a change
	 * to the data model occurs. 
	 */
	public void addListDataListener(ListDataListener l);

	/** Removes a listener from the list that's notified each time
	 * a change to the data model occurs. 
	 */
	public void removeListDataListener(ListDataListener l);

	/**
	 * Returns all listeners.
	 * @10.0.0
	 */
	public default List<ListDataListener> getListDataListeners() {
		return Collections.emptyList();
	}
}
