package railo.runtime.listener; import java.io.IOException; import railo.runtime.CFMLFactory; import railo.runtime.PageContext; import railo.runtime.PageSource; import railo.runtime.config.Constants; import railo.runtime.exp.MissingIncludeException; import railo.runtime.exp.PageException; import railo.runtime.op.Caster; import railo.runtime.type.UDF; public final class ClassicAppListener extends AppListenerSupport { private int mode=MODE_CURRENT2ROOT; @Override public void onRequest(PageContext pc,PageSource requestedPage, RequestListener rl) throws PageException { PageSource application=//pc.isCFCRequest()?null: AppListenerUtil.getApplicationPageSource(pc,requestedPage,Constants.APP_CFM,mode); _onRequest(pc, requestedPage, application,rl); } static void _onRequest(PageContext pc,PageSource requestedPage,PageSource application, RequestListener rl) throws PageException { // on requestStart if(application!=null)pc.doInclude(new PageSource[]{application},false); if(rl!=null) { requestedPage=rl.execute(pc, requestedPage); if(requestedPage==null) return; } // request try{ pc.doInclude(new PageSource[]{requestedPage},false); } catch(MissingIncludeException mie){ ApplicationContext ac = pc.getApplicationContext(); boolean rethrow=true; if(ac instanceof ClassicApplicationContext) { ClassicApplicationContext cfc=(ClassicApplicationContext) ac; UDF udf = cfc.getOnMissingTemplate(); if(udf!=null) { String targetPage=requestedPage.getFullRealpath(); rethrow=(!Caster.toBooleanValue(udf.call(pc, new Object[]{targetPage}, true),true)); } } if(rethrow)throw mie; } // on Request End if(application!=null){ PageSource onReqEnd = application.getRealPage("OnRequestEnd.cfm"); if(onReqEnd.exists())pc.doInclude(new PageSource[]{onReqEnd},false); } } @Override public boolean onApplicationStart(PageContext pc) throws PageException { // do nothing return true; } @Override public void onSessionStart(PageContext pc) throws PageException { // do nothing } @Override public void onApplicationEnd(CFMLFactory factory, String applicationName) throws PageException { // do nothing } @Override public void onSessionEnd(CFMLFactory cfmlFactory, String applicationName, String cfid) throws PageException { // do nothing } @Override public void onDebug(PageContext pc) throws PageException { try { if(pc.getConfig().debug())pc.getDebugger().writeOut(pc); } catch (IOException e) { throw Caster.toPageException(e); } } @Override public void onError(PageContext pc,PageException pe) { pc.handlePageException(pe); } @Override public void setMode(int mode) { this.mode=mode; } @Override public int getMode() { return mode; } @Override public String getType() { return "classic"; } }