Package railo.runtime.functions.other

Source Code of railo.runtime.functions.other.DumpStruct

/**
* Implements the CFML Function dump
*/
package railo.runtime.functions.other;

import java.util.Set;

import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.StringUtil;
import railo.commons.lang.types.RefBoolean;
import railo.commons.lang.types.RefBooleanImpl;
import railo.runtime.PageContext;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.dump.DumpRow;
import railo.runtime.dump.DumpTable;
import railo.runtime.dump.DumpUtil;
import railo.runtime.dump.SimpleDumpData;
import railo.runtime.ext.function.Function;
import railo.runtime.type.Query;
import railo.runtime.type.QueryImpl;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.type.util.ListUtil;
import railo.runtime.type.util.StructUtil;

public final class DumpStruct implements Function {
 
  public static Struct call(PageContext pc , Object object) {
    return call(pc, object,9999,null,null,9999,true);
  }

  public static Struct call(PageContext pc , Object object, double maxLevel) {
    return call(pc, object,maxLevel,null,null,9999,true,true,null);
  }

  public static Struct call(PageContext pc , Object object, double maxLevel, String show) {
    return call(pc, object,maxLevel,show,null,9999,true,true,null);
  }

  public static Struct call(PageContext pc , Object object, double maxLevel, String show, String hide) {
    return call(pc,object,maxLevel,show,hide,9999,true,true,null);
  }

  public static Struct call(PageContext pc , Object object, double maxLevel, String show, String hide,double keys) {
    return call(pc , object, maxLevel, show, hide,keys,true,true,null);
  }
  public static Struct call(PageContext pc , Object object, double maxLevel, String show, String hide,double keys,boolean metainfo) {
    return call(pc , object, maxLevel, show, hide,keys,metainfo,true,null)
  }
 
  public static Struct call(PageContext pc , Object object, double maxLevel, String show, String hide,double keys,boolean metainfo, boolean showUDFs) {
    return call(pc , object, maxLevel, show, hide,keys,metainfo,showUDFs,null)
  }
   
  public static Struct call(PageContext pc,Object object,double maxLevel, String show, String hide,double keys,boolean metainfo, boolean showUDFs, String label) {
    if(show!=null && "all".equalsIgnoreCase(show.trim()))show=null;
    if(hide!=null && "all".equalsIgnoreCase(hide.trim()))hide=null;
   
    Set setShow=(show!=null)?ListUtil.listToSet(show.toLowerCase(),",",true):null;
    Set setHide=(hide!=null)?ListUtil.listToSet(hide.toLowerCase(),",",true):null;
   
    DumpProperties properties=new DumpProperties((int)maxLevel,setShow,setHide,(int)keys,metainfo,showUDFs);
    DumpData dd = DumpUtil.toDumpData(object, pc,(int)maxLevel,properties);
   
    if(!StringUtil.isEmpty(label)) {
      DumpTable table=new DumpTable("#ffffff","#cccccc","#000000");
      table.appendRow(1,new SimpleDumpData(label));
      table.appendRow(0,dd);
      dd=table;
    }
    RefBoolean hasReference=new RefBooleanImpl(false);
    Struct sct = toStruct(dd,object,hasReference);
    sct.setEL("hasReference", hasReference.toBoolean());
    return sct;
  }

  private static Struct toStruct(DumpData dd, Object object, RefBoolean hasReference) {
    DumpTable table;
    if(dd instanceof DumpTable) table=(DumpTable) dd;
    else {
      if(dd==null) dd= new SimpleDumpData("null");
      table=new DumpTable("#ffffff","#cccccc","#000000");
      table.appendRow(1,dd);
    }
    return toCFML(table,object,hasReference);
  }
 
 
  private static Object toCFML(DumpData dd, Object object, RefBoolean hasReference) {
    if(dd instanceof DumpTable)return toCFML((DumpTable) dd,object,hasReference);
    if(dd==null) return new SimpleDumpData("null");
    return dd.toString();
  }
 
  private static Struct toCFML(DumpTable dt, Object object, RefBoolean hasReference) {
    Struct sct=new StructImpl();
    StructUtil.setELIgnoreWhenNull(sct,"borderColor", toShortColor(dt.getBorderColor()));
    StructUtil.setELIgnoreWhenNull(sct,KeyConstants._comment, dt.getComment());
    StructUtil.setELIgnoreWhenNull(sct,"fontColor", toShortColor(dt.getFontColor()));
    StructUtil.setELIgnoreWhenNull(sct,KeyConstants._height, dt.getHeight());
    StructUtil.setELIgnoreWhenNull(sct,KeyConstants._width, dt.getWidth());
    StructUtil.setELIgnoreWhenNull(sct,"highLightColor", toShortColor(dt.getHighLightColor()));
    StructUtil.setELIgnoreWhenNull(sct,"normalColor", toShortColor(dt.getNormalColor()));
    StructUtil.setELIgnoreWhenNull(sct,KeyConstants._title, dt.getTitle());
   
    if(!StringUtil.isEmpty(dt.getType()))sct.setEL(KeyConstants._type, dt.getType());
    if(!StringUtil.isEmpty(dt.getId()))sct.setEL(KeyConstants._id, dt.getId());
     
    if("ref".equals(dt.getType())){
      hasReference.setValue(true);
      sct.setEL(KeyConstants._ref, dt.getRef());
    }
   
   
    DumpRow[] drs = dt.getRows();
    DumpRow dr;
    Query qry=null;
    DumpData[] items;
    for(int r=0;r<drs.length;r++){
      dr=drs[r];
      items = dr.getItems();
      if(qry==null)qry=new QueryImpl(toColumns(items),drs.length,"data");
      for(int c=1;c<=items.length;c++){
        qry.setAtEL("data"+c, r+1, toCFML(items[c-1],object,hasReference));
      }
      qry.setAtEL("highlight", r+1, new Double(dr.getHighlightType()));
     
    }
    if(qry!=null)sct.setEL(KeyConstants._data, qry);
    return sct;
  }

  private static String[] toColumns(DumpData[] items) {
    String[] columns=new String[items.length+1];
    columns[0]="highlight";
    for(int i=1;i<columns.length;i++){
      columns[i]="data"+i;
    }
    return columns;
  }

  public static String getContext() {
    //Throwable cause = t.getCause();
    StackTraceElement[] traces = new Exception("Stack trace").getStackTrace();
   
    int line=0;
    String template;
    StackTraceElement trace=null;
    for(int i=0;i<traces.length;i++) {
      trace=traces[i];
      template=trace.getFileName();
      if((line=trace.getLineNumber())<=0 || template==null || ResourceUtil.getExtension(template,"").equals("java")) continue;
      return template+":"+line;
    }
    return null;
  }
   
  private static Object toShortColor(String color) {
    if(color!=null && color.length()==7 && color.startsWith("#")) {
      if(color.charAt(1)==color.charAt(2) && color.charAt(3)==color.charAt(4) && color.charAt(5)==color.charAt(6))
        return "#"+color.charAt(1)+color.charAt(3)+color.charAt(5);
     
     
    }
   
   
    return color;
  }
}
TOP

Related Classes of railo.runtime.functions.other.DumpStruct

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.