Package coldfusion.cfc

Source Code of coldfusion.cfc.CFCProxy

package coldfusion.cfc;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import railo.loader.engine.CFMLEngine;
import railo.loader.engine.CFMLEngineFactory;
import railo.runtime.Component;
import railo.runtime.PageContext;
import railo.runtime.exp.PageException;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.Struct;
import railo.runtime.util.Cast;
import railo.runtime.util.Creation;


public class CFCProxy {
 
  private CFMLEngine engine;
  private Cast caster;
  private Creation creator;
 
  private Component cfc=null;
    private String path;
  private Map thisData;
  private boolean invokeDirectly=true;
  private boolean autoFlush;

  public CFCProxy(String path) throws Throwable {
    this(path, null, true);
    }

    public CFCProxy(String path, boolean invokeDirectly) throws Throwable {
    this(path, null, invokeDirectly);
    }

    public CFCProxy(String path, Map initialThis) throws Throwable {
        this(path, initialThis, true);
    }

    public CFCProxy(String path, Map initialThis, boolean invokeDirectly) throws Throwable {
      engine = CFMLEngineFactory.getInstance();
      caster = engine.getCastUtil();
      creator = engine.getCreationUtil();
       
      this.path=path;
    this.invokeDirectly=invokeDirectly;
    setThisScope(initialThis);
    }

    private void initCFC(PageContext pc) {
      if(cfc==null && (invokeDirectly || pc!=null)) {
      try {
        if(pc==null)pc=engine.getThreadPageContext();
        cfc=engine.getCreationUtil().createComponentFromPath(pc, path);
      } catch (PageException pe) {}
      }
  }
 
    public void setThisScope(Map data) {
    if(data!=null) {
      if(thisData==null)this.thisData=new HashMap();
     
      Iterator<Entry> it = data.entrySet().iterator();
          Entry entry;
          while(it.hasNext()){
            entry = it.next();
            thisData.put(entry.getKey(), entry.getValue());
          }
    }
    }

    public Map getThisScope() {
      initCFC(null);
      if(cfc==null)return null;
     
      Struct rtn=creator.createStruct();
        Iterator<Entry<Key, Object>> it = cfc.entryIterator();
        Entry<Key, Object> entry;
        while(it.hasNext()){
          entry = it.next();
          rtn.setEL(entry.getKey(), entry.getValue());
        }
      return rtn;
    }
   
    public final Object invoke(String methodName, Object args[]) throws Throwable {
        if(invokeDirectly) return _invoke(methodName, args);
        return _invoke(methodName, args, null, null, null);
    }

  public final Object invoke(String methodName, Object args[], HttpServletRequest request, HttpServletResponse response) throws Throwable {
    if(invokeDirectly) return _invoke(methodName, args);
        return _invoke(methodName, args, request, response, null);
    }
 
    public final Object invoke(String methodName, Object args[], HttpServletRequest request, HttpServletResponse response, OutputStream out) throws Throwable {
      if(invokeDirectly) return _invoke(methodName, args);
        return _invoke(methodName, args, request, response, out);
    }

    public static boolean inInvoke() {
        return false;
    }

    private Object _invoke(String methodName, Object[] args) throws PageException {
      CFMLEngine engine = CFMLEngineFactory.getInstance();
    PageContext pc = engine.getThreadPageContext();
    initCFC(pc);
      return cfc.call(pc, methodName, args);
  }
   
    private Object _invoke(String methodName, Object[] args, HttpServletRequest req, HttpServletResponse rsp, OutputStream out) throws PageException {
      CFMLEngine engine = CFMLEngineFactory.getInstance();
    Creation creator = engine.getCreationUtil();
    PageContext originalPC = engine.getThreadPageContext();
   
    // no OutputStream
    if(out==null)out=DevNullOutputStream.DEV_NULL_OUTPUT_STREAM;
   
    // no Request
    if(req==null){
      // TODO new File
      req=creator.createHttpServletRequest(new File("."), "Railo", "/", "", null, null, null, null, null);
    }
    // noRespone
    if(rsp==null){
      rsp=creator.createHttpServletResponse(out);
    }
   
   
    PageContext pc = creator.createPageContext(req,rsp,out);
    try{
      engine.registerThreadPageContext(pc);
      initCFC(pc);
        return cfc.call(pc, methodName, args);
    }
    finally{
      if(autoFlush) {
        try {
          pc.getRootWriter().flush();
        } catch (Throwable t) {}
      }
      engine.registerThreadPageContext(originalPC);
    }
  }

    public void flush() throws IOException {
      CFMLEngine engine = CFMLEngineFactory.getInstance();
    PageContext pc = engine.getThreadPageContext();
    pc.getRootWriter().flush();
    }

    public void setAutoFlush(boolean autoFlush) {
        this.autoFlush = autoFlush;
    }

    public void setApplicationExecution(boolean doApp)
    {
        //executeApplication = doApp;
    }

}

final class DevNullOutputStream extends OutputStream implements Serializable {
 
  public static final DevNullOutputStream DEV_NULL_OUTPUT_STREAM=new DevNullOutputStream();
 
  /**
   * Constructor of the class
   */
  private DevNullOutputStream() {}
 
    /**
     * @see java.io.OutputStream#close()
     */
    public void close(){}

    /**
     * @see java.io.OutputStream#flush()
     */
    public void flush() {}

    /**
     * @see java.io.OutputStream#write(byte[], int, int)
     */
    public void write(byte[] b, int off, int len) {}

    /**
     * @see java.io.OutputStream#write(byte[])
     */
    public void write(byte[] b) {}

    /**
     * @see java.io.OutputStream#write(int)
     */
    public void write(int b) {}

}
TOP

Related Classes of coldfusion.cfc.CFCProxy

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.