/** Cleanup this process after processing the event by calling * {@link #process}. * * <p>Note: Don't call this method if the event process executes * in the same thread. */ public void cleanup() { ExecutionsCtrl.setCurrent(null); SessionsCtrl.setCurrent((Session) null); }
public void forward(Writer out, String page, Map<String, ?> params, int mode) throws IOException { final Execution exec = ExecutionsCtrl.getCurrent(); ExecutionsCtrl.setCurrent(null); //It is fake one and shall not be re-used by forward try { super.forward(out, page, params, mode); } finally { ExecutionsCtrl.setCurrent(exec); } }
/** Safe to be called even if the Web application has been destroyed */ private void safeDeactivate(Execution exec) { final UiEngine uieng = ((WebAppCtrl) _wapp).getUiEngine(); if (uieng != null) { uieng.deactivate(exec); } else { _exec = null; ExecutionsCtrl.setCurrent(null); } }
/** Safe to be called even if the Web application has been destroyed */ private void safeActivate(Execution exec) { final UiEngine uieng = ((WebAppCtrl) _wapp).getUiEngine(); if (uieng != null) { uieng.activate(exec); } else { _exec = exec; ExecutionsCtrl.setCurrent(exec); } }
/** Cleans up the info carried from onPiggyback to the current thread. * <p>Note: {@link #carryOver} and {@link #cleanup} must be * called in the same thread. */ public void cleanup() { ((ExecutionCtrl) _exec).onDeactivate(); ExecutionsCtrl.setCurrent(null); if (_locale != null) Locales.setThreadLocal(null); if (_timeZone != null) TimeZones.setThreadLocal(null); } }
/** 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; }
/** Creates an desktop. */ private Desktop newDesktop(Session sess, ServletRequest request, ServletResponse response, String path) { final Locator loc = PageDefinitions.getLocator(_wapp, path); //we have to retrieve locator before setting execution, //since it assumes exec.getDesktop not null //which is true except this moment (before desktop is created) final Execution exec = ExecutionsCtrl.getCurrent(); final TemporaryExecution de = new TemporaryExecution(_ctx, (HttpServletRequest) request, (HttpServletResponse) response, null); ExecutionsCtrl.setCurrent(de); try { Desktop desktop = ((WebAppCtrl) _wapp).getUiFactory() .newDesktop(new RequestInfoImpl(_wapp, sess, null, request, loc), _updateURI, path); return !de.isVoided() ? desktop : null; } finally { ExecutionsCtrl.setCurrent(exec); } }
/** Returns HTML tags to include JavaScript files of the specified * device for the current application (never null). * @since 5.0.0 */ public static final String outDeviceJavaScripts(ServletContext ctx, HttpServletRequest request, HttpServletResponse response, String deviceType) { Execution old = Executions.getCurrent(); Execution exec = new ExecutionImpl(ctx, request, response, null, null); ExecutionsCtrl.setCurrent(exec); ((ExecutionCtrl) exec).onActivate(); try { return HtmlPageRenders.outLangJavaScripts(exec, WebManager.getWebManager(ctx).getWebApp(), deviceType != null ? deviceType : "ajax"); } finally { ((ExecutionCtrl) exec).onDeactivate(); ExecutionsCtrl.setCurrent(old); } }
/** Returns HTML tags to include style sheets of the specified device * for the current application (never null). * * <p>This method is used for JSP pages. * @param deviceType the device type. If null, ajax is assumed. */ public static final String outDeviceStyleSheets(ServletContext ctx, HttpServletRequest request, HttpServletResponse response, String deviceType) { Execution old = Executions.getCurrent(); Execution exec = new ExecutionImpl(ctx, request, response, null, null); ExecutionsCtrl.setCurrent(exec); ((ExecutionCtrl) exec).onActivate(); try { return HtmlPageRenders.outLangStyleSheets(exec, WebManager.getWebManager(ctx).getWebApp(), deviceType != null ? deviceType : "ajax"); } finally { ((ExecutionCtrl) exec).onDeactivate(); ExecutionsCtrl.setCurrent(old); } }
/** Setup this processor before processing the event by calling * {@link #process}. * * <p>Note: it doesn't invoke {@link ExecutionCtrl#onActivate} */ public void setup() { SessionsCtrl.setCurrent(_desktop.getSession()); final Execution exec = _desktop.getExecution(); ExecutionsCtrl.setCurrent(exec); ((ExecutionCtrl) exec).setCurrentPage(getPage()); }
/** De-reactivated exec. Work with {@link #doReactivate}. */ private static void doDereactivate(Execution curExec, UiVisualizer olduv) { if (olduv == null) throw new IllegalArgumentException("null"); final ExecutionCtrl curCtrl = (ExecutionCtrl) curExec; final Execution oldexec = olduv.getExecution(); try { final Desktop desktop = curExec.getDesktop(); // if (log.finerable()) log.finer("Deactivating "+desktop); try { curCtrl.onDeactivate(); } catch (Throwable ex) { log.warn("Failed to deactive", ex); } final DesktopCtrl desktopCtrl = (DesktopCtrl) desktop; desktopCtrl.setVisualizer(olduv); desktopCtrl.setExecution(oldexec); } finally { ExecutionsCtrl.setCurrent(oldexec); curCtrl.setCurrentPage(null); } }
/** Generates and returns the ZK specific HTML tags such as stylesheet * and JavaScript. * If you want to generate HTML HEAD and BODY tags by yourself in * a non-ZUML page (e.g., JSP or DSP), you can invoke this method at * the location you want (such as inside the HTML HEAD tag). * * @return the string holding the HTML tags, or null if already generated. * @param deviceType the device type. If null, ajax is assumed. */ public static String outZkHtmlTags(ServletContext ctx, HttpServletRequest request, HttpServletResponse response, String deviceType) { Execution old = Executions.getCurrent(); Execution exec = new ExecutionImpl(ctx, request, response, null, null); ExecutionsCtrl.setCurrent(exec); ((ExecutionCtrl) exec).onActivate(); try { return HtmlPageRenders.outZkTags(exec, WebManager.getWebManager(ctx).getWebApp(), deviceType != null ? deviceType : "ajax"); } finally { ((ExecutionCtrl) exec).onDeactivate(); ExecutionsCtrl.setCurrent(old); } }
/** Creates a page. * It invokes {@link UiFactory#newPage}. However, it prepares * {@link ExecutionsCtrl#getCurrent} for {@link org.zkoss.zk.ui.sys.IdGenerator#nextPageUuid} * * <p>Note: Use this method to create a page, rather than invoking * {@link UiFactory#newPage} directly. * @since 3.6.0 */ public static Page newPage(UiFactory uf, RequestInfo ri, PageDefinition pagedef, ServletResponse response, String path) { final DesktopCtrl desktopCtrl = (DesktopCtrl) ri.getDesktop(); final Execution exec = ExecutionsCtrl.getCurrent(); TemporaryExecution de = new TemporaryExecution(ri.getWebApp().getServletContext(), (HttpServletRequest) ri.getNativeRequest(), (HttpServletResponse) response, ri.getDesktop()); desktopCtrl.setExecution(de); ExecutionsCtrl.setCurrent(de); try { return uf.newPage(ri, pagedef, path); //de won't be voided since no DesktopInit-like plugin } finally { ExecutionsCtrl.setCurrent(exec); desktopCtrl.setExecution(exec); } }
/** Creates a page. * It invokes {@link UiFactory#newPage}. However, it prepares * {@link ExecutionsCtrl#getCurrent} for {@link org.zkoss.zk.ui.sys.IdGenerator#nextPageUuid} * * <p>Note: Use this method to create a page, rather than invoking * {@link UiFactory#newPage} directly. * @since 3.6.0 */ public static Page newPage(UiFactory uf, RequestInfo ri, Richlet richlet, ServletResponse response, String path) { final DesktopCtrl desktopCtrl = (DesktopCtrl) ri.getDesktop(); final Execution exec = ExecutionsCtrl.getCurrent(); TemporaryExecution de = new TemporaryExecution(ri.getWebApp().getServletContext(), (HttpServletRequest) ri.getNativeRequest(), (HttpServletResponse) response, ri.getDesktop()); desktopCtrl.setExecution(de); ExecutionsCtrl.setCurrent(de); try { return uf.newPage(ri, richlet, path); //de won't be voided since no DesktopInit-like plugin } finally { ExecutionsCtrl.setCurrent(exec); desktopCtrl.setExecution(exec); } }
final Execution exec = new ExecutionImpl(getServletContext(), request, response, null, null), olde = Executions.getCurrent(); ExecutionsCtrl.setCurrent(exec); ((ExecutionCtrl) exec).onActivate(); try { ExecutionsCtrl.setCurrent(olde);
/** Carry over the info stored in the constructor to * the current thread. */ public void carryOver() { ExecutionsCtrl.setCurrent(_exec); final ExecutionCtrl execCtrl = (ExecutionCtrl) _exec; execCtrl.onActivate(); if (Locales.getThreadLocal() == null) Locales.setThreadLocal(_locale); else _locale = null; if (TimeZones.getThreadLocal() == null) TimeZones.setThreadLocal(_timeZone); else _timeZone = null; final Page page = _exec.getDesktop().getFirstPage(); if (page != null) execCtrl.setCurrentPage(page); }
log.warn("Failed to deactive", ex); ExecutionsCtrl.setCurrent(null); execCtrl.setCurrentPage(null);
/** Re-activates for another execution. It is callable only for * creating new page (execNewPage). It is not allowed for async-update. * <p>Note: doActivate cannot handle reactivation. In other words, * the caller has to detect which method to use. */ private static UiVisualizer doReactivate(Execution curExec, UiVisualizer olduv) { final Desktop desktop = curExec.getDesktop(); final Session sess = desktop.getSession(); // if (log.finerable()) log.finer("Re-activating "+desktop); assert olduv.getExecution().getDesktop() == desktop : "old dt: " + olduv.getExecution().getDesktop() + ", new:" + desktop; final UiVisualizer uv = new UiVisualizer(olduv, curExec); final DesktopCtrl desktopCtrl = (DesktopCtrl) desktop; desktopCtrl.setVisualizer(uv); desktopCtrl.setExecution(curExec); final ExecutionCtrl curCtrl = (ExecutionCtrl) curExec; ExecutionsCtrl.setCurrent(curExec); try { curCtrl.onActivate(); } catch (Throwable ex) { //just in case ExecutionsCtrl.setCurrent(olduv.getExecution()); desktopCtrl.setVisualizer(olduv); desktopCtrl.setExecution(olduv.getExecution()); throw UiException.Aide.wrap(ex); } return uv; }
ExecutionsCtrl.setCurrent(exec); final UiVisualizer uv = new UiVisualizer(exec, true, false); desktopCtrl.setVisualizer(uv); ExecutionsCtrl.setCurrent((sess != Sessions.getCurrent()) ? currentExec : null); desktopCtrl.setVisualizer(oldVi); desktopCtrl.setExecution(oldExec);
ExecutionsCtrl.setCurrent(execution); desktop = init(new DesktopImpl(webApp, "mock", null, null, request)); ExecutionsCtrl.setCurrent(null);