Package railo.runtime.listener

Source Code of railo.runtime.listener.ClassicAppListener

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";
  }
}
TOP

Related Classes of railo.runtime.listener.ClassicAppListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.