Package railo.intergral.fusiondebug.server

Source Code of railo.intergral.fusiondebug.server.FDThreadImpl

package railo.intergral.fusiondebug.server;

import java.util.ArrayList;
import java.util.List;

import railo.commons.io.res.Resource;
import railo.commons.io.res.util.ResourceUtil;
import railo.runtime.CFMLFactoryImpl;
import railo.runtime.PageContext;
import railo.runtime.PageContextImpl;
import railo.runtime.PageSource;
import railo.transformer.bytecode.util.ASMUtil;

import com.intergral.fusiondebug.server.IFDController;
import com.intergral.fusiondebug.server.IFDStackFrame;
import com.intergral.fusiondebug.server.IFDThread;

public class FDThreadImpl implements IFDThread {
 
 
  private PageContextImpl pc;
  private String name;
  private FDControllerImpl engine;
  //private CFMLFactoryImpl factory;

 
  public FDThreadImpl(FDControllerImpl engine,CFMLFactoryImpl factory, String name, PageContextImpl pc) {
    this.engine=engine;
    //this.factory=factory;
    this.name=name;
    this.pc=pc;
  }

  @Override
  public String getName() {
    return name+":"+pc.getCFID();
  }

  @Override
  public int id() {
    return pc.getId();
  }
 
  public static int id(PageContext pc) {
    return pc.getId();
  }

  @Override
  public void stop() {
    pc.getThread().stop();
  }
 
  @Override
  public Thread getThread() {
    return pc.getThread();
  }

  @Override
  public String getOutputBuffer() {
    return pc.getRootOut().toString();
  }


  public List getStackFrames() {
    return getStack();
  }
  public List getStack() {
    List stack = pc.getPageSourceList();
   
    StackTraceElement[] traces = pc.getThread().getStackTrace();
    String template="";
    StackTraceElement trace=null;
    ArrayList list=new ArrayList();
    Resource res;
    PageSource ps;
    int index=stack.size();
    for(int i=traces.length-1;i>=0;i--) {
      trace=traces[i];
      ps=null;
      if(trace.getLineNumber()<=0) continue;
      template=trace.getFileName();
      if(template==null || ResourceUtil.getExtension(template,"").equals("java")) continue;
     
      if(index>0)ps=(PageSource) stack.get(--index);
      // inside the if is the old way, that only work when the cfm is inside the mapping, but i'm not shure woth the new way
      if(ps==null || !(ps.getFullClassName().equals(trace.getClassName()) && ps.getDisplayPath().equals(template))){
        res = ResourceUtil.toResourceNotExisting(pc, template);
        ps = pc.toPageSource(res, null);
      }
     
      FDStackFrameImpl frame = new FDStackFrameImpl(this,pc,trace,ps);
      if(ASMUtil.isOverfowMethod(trace.getMethodName())) list.set(0,frame);
      else list.add(0,frame);
    }
    return list;
  }
 
  public IFDStackFrame getTopStack(){
    return getTopStackFrame();
  }
 
  @Override
    public IFDStackFrame getTopStackFrame(){
    PageSource ps = pc.getCurrentPageSource();
   
    StackTraceElement[] traces = pc.getThread().getStackTrace();
    String template="";
    StackTraceElement trace=null;
    Resource res;
   
    for(int i=0;i<traces.length;i++) {
      trace=traces[i];
      if(trace.getLineNumber()<=0) continue;
      template=trace.getFileName();
      if(template==null || ResourceUtil.getExtension(template,"").equals("java")) continue;
     
      if(ps==null || !(ps.getFullClassName().equals(trace.getClassName()) && ps.getResource().getAbsolutePath().equals(template))){
        res = ResourceUtil.toResourceNotExisting(pc, template);
        ps = pc.toPageSource(res, null);
      }
      break;
    }
    return new FDStackFrameImpl(this,pc,trace,ps)
  }
 
  /**
   * @return the engine
   */
  public IFDController getController() {
    return engine;
  }


}
TOP

Related Classes of railo.intergral.fusiondebug.server.FDThreadImpl

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.