Package railo.runtime.concurrency

Source Code of railo.runtime.concurrency.Caller

package railo.runtime.concurrency;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.concurrent.Callable;

import railo.commons.io.IOUtil;
import railo.runtime.PageContext;
import railo.runtime.PageContextImpl;
import railo.runtime.config.ConfigImpl;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.exp.PageException;
import railo.runtime.net.http.HttpServletResponseDummy;
import railo.runtime.net.http.ReqRspUtil;
import railo.runtime.thread.ThreadUtil;

public abstract class Caller implements Callable<String> {

  private PageContext parent;
  private PageContextImpl pc;
  private ByteArrayOutputStream baos;

  public Caller(PageContext parent) {
    this.parent = parent;
    this.baos = new ByteArrayOutputStream();
    this.pc=ThreadUtil.clonePageContext(parent, baos, false, false, true);
  }
 
  public final String call() throws PageException {
    ThreadLocalPageContext.register(pc);
    pc.getRootOut().setAllowCompression(false); // make sure content is not compressed
    String str=null;
    try{
      _call(parent,pc);
    }
    finally{
      try {
      HttpServletResponseDummy rsp=(HttpServletResponseDummy) pc.getHttpServletResponse();
     
      String enc = ReqRspUtil.getCharacterEncoding(pc,rsp);
      //if(enc==null) enc="ISO-8859-1";
     
      pc.getOut().flush(); //make sure content is flushed
     
      ((ConfigImpl)pc.getConfig()).getFactory().releasePageContext(pc);
        str=IOUtil.toString((new ByteArrayInputStream(baos.toByteArray())), enc); // TODO add support for none string content
      }
      catch (Throwable e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    return str;
  }

  public abstract void _call(PageContext parent, PageContext pc) throws PageException;
  //public abstract void afterCleanup(PageContext parent, ByteArrayOutputStream baos);
}
TOP

Related Classes of railo.runtime.concurrency.Caller

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.