org.zkoss.zk.ui.http.DesktopRecycles Maven / Gradle / Ivy
/* DesktopRecycles.java
Purpose:
Description:
History:
Thu May 5 09:53:30 TST 2011, Created by tomyeh
Copyright (C) 2011 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.zk.ui.http;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.sys.ExecutionsCtrl;
import org.zkoss.zk.ui.sys.SessionsCtrl;
import org.zkoss.zk.ui.util.DesktopRecycle;
/**
* Utilities to handle {@link DesktopRecycle}.
* @author tomyeh
* @since 5.0.7
*/
public class DesktopRecycles extends org.zkoss.zk.ui.impl.DesktopRecycles {
private static Logger log = LoggerFactory.getLogger(DesktopRecycles.class);
/** Called before serving a HTTP request.
* @return the recycled desktop, or null if no recycled desktop is matched
* for this request.
*/
public static Desktop beforeService(DesktopRecycle dtrc, ServletContext ctx, Session sess,
HttpServletRequest request, HttpServletResponse response, String path) {
if (dtrc != null) {
final Execution olde = Executions.getCurrent();
final Object olds = SessionsCtrl.getRawCurrent();
final Execution exec = new TemporaryExecution(ctx, request, response, null);
SessionsCtrl.setCurrent(sess);
ExecutionsCtrl.setCurrent(exec);
try {
return dtrc.beforeService(exec, getURI(path, request.getQueryString()));
} catch (Throwable ex) {
log.error("", ex);
} finally {
ExecutionsCtrl.setCurrent(olde);
SessionsCtrl.setRawCurrent(olds);
}
}
return null;
}
/** Called after serving a HTTP request.
*/
public static void afterService(DesktopRecycle dtrc, Desktop desktop) {
if (dtrc != null) {
try {
dtrc.afterService(desktop);
} catch (Throwable ex) {
log.error("", ex);
}
}
}
/** Returns the request URI of the desktop.
* The request URI is a combination of {@link Desktop#getRequestPath}
* and {@link Desktop#getQueryURI}.
*/
private static String getURI(String path, String qs) {
return qs != null ? path + '?' + qs : path;
}
}