/* SessionDesktopCacheProvider.java {{IS_NOTE Purpose: Description: History: Tue Apr 18 11:52:51 2006, Created by tomyeh }}IS_NOTE Copyright (C) 2006 Potix Corporation. All Rights Reserved. {{IS_RIGHT }}IS_RIGHT */ package org.zkoss.zk.ui.impl; import org.zkoss.zk.ui.Session; import org.zkoss.zk.ui.WebApp; import org.zkoss.zk.ui.sys.DesktopCache; import org.zkoss.zk.ui.sys.DesktopCacheProvider; import org.zkoss.zk.ui.sys.SessionCtrl; /** * A implementation of {@link DesktopCacheProvider} that stores all desktops * from the same session in one desktop cache. * * <p>Implementation Note: we don't store the desktop cache in the session's * attribute (rather, we use {@link SessionCtrl#setDesktopCache}. Reason: * the desktop cache is serialized only if the session is serializable. * * @author tomyeh * @see GlobalDesktopCacheProvider */ public class SessionDesktopCacheProvider implements DesktopCacheProvider { private WebApp _wapp; //-- DesktopCacheProvider --// public DesktopCache getDesktopCache(Session sess) { final SessionCtrl sessCtrl = (SessionCtrl) sess; DesktopCache dc = sessCtrl.getDesktopCache(); if (dc == null) { synchronized (this) { dc = sessCtrl.getDesktopCache(); if (dc == null) { dc = new SimpleDesktopCache(_wapp.getConfiguration()); sessCtrl.setDesktopCache(dc); } } } return dc; } public void sessionDestroyed(Session sess) { final SessionCtrl sessCtrl = (SessionCtrl) sess; final DesktopCache dc = sessCtrl.getDesktopCache(); if (dc != null) { sessCtrl.setDesktopCache(null); dc.stop(); } } /** Invokes {@link #getDesktopCache}'s {@link DesktopCache#sessionWillPassivate}. */ public void sessionWillPassivate(Session sess) { final DesktopCache dc = ((SessionCtrl) sess).getDesktopCache(); if (dc != null) dc.sessionWillPassivate(sess); } /** Invokes {@link #getDesktopCache}'s {@link DesktopCache#sessionDidActivate}. */ public void sessionDidActivate(Session sess) { final DesktopCache dc = ((SessionCtrl) sess).getDesktopCache(); if (dc != null) dc.sessionDidActivate(sess); } public void start(WebApp wapp) { _wapp = wapp; } public void stop(WebApp wapp) { _wapp = null; } }