/* DesktopCache.java

	Purpose:
		
	Description:
		
	History:
		Tue Apr 18 10:38:22     2006, Created by tomyeh

Copyright (C) 2006 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.zk.ui.sys;

import org.zkoss.zk.ui.ComponentNotFoundException;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Session;

/**
 * The cache used to store desktops.
 *
 * @author tomyeh
 */
public interface DesktopCache {
	/** Returns the next available key which is unique in the whole cache.
	 *
	 * <p>{@link Desktop} uses this method to generate ID automatically.
	 */
	public int getNextKey();

	/** Returns the desktop for the specified desktop ID.
	 * @exception ComponentNotFoundException is thrown if the desktop
	 * is not found
	 */
	public Desktop getDesktop(String desktopId);

	/** Returns the desktop for the specified desktop ID, or null if not found.
	 */
	public Desktop getDesktopIfAny(String desktopId);

	/** Adds a desktop to this session.
	 * It must be called when a desktop is created.
	 * <p>Application shall never access this method.
	 */
	public void addDesktop(Desktop desktop);

	/** Removes a desktop from this session.
	 * It must be called when a desktop is remove.
	 * <p>Application shall never access this method.
	 */
	public void removeDesktop(Desktop desktop);

	/** Notification that the session is about to be passivated
	 * (a.k.a., serialized).
	 */
	public void sessionWillPassivate(Session sess);

	/** Notification that the session has just been activated
	 * (a.k.a., deserialized).
	 */
	public void sessionDidActivate(Session sess);

	/** Called when to stop and cleanup this cache.
	 * Once stopped, the caller shall not access it any more.
	 * It cannot be called other than the implementation of
	 * {@link DesktopCacheProvider}.
	 */
	public void stop();
}
