001 /** 002 * Implements the CFML Function arraytolist 003 */ 004 package railo.runtime.functions.list; 005 006 import railo.runtime.PageContext; 007 import railo.runtime.exp.PageException; 008 import railo.runtime.functions.BIF; 009 import railo.runtime.op.Caster; 010 import railo.runtime.type.Array; 011 012 public final class ArrayToList extends BIF { 013 014 private static final long serialVersionUID = -4909685848106371747L; 015 016 public static String call(PageContext pc , Array array) throws PageException { 017 return call(pc,array,','); 018 } 019 public static String call(PageContext pc , Array array, String delimiter) throws PageException { 020 if(delimiter.length()==1) return call(pc,array,delimiter.charAt(0)); 021 int len=array.size(); 022 if(len==0) return ""; 023 if(len==1)return Caster.toString(array.get(1,"")); 024 025 Object o=array.get(1,null); 026 StringBuffer sb=new StringBuffer(o==null?"":Caster.toString(o)); 027 for(int i=2;i<=len;i++) { 028 sb.append(delimiter); 029 o=array.get(i,null); 030 sb.append(o==null?"":Caster.toString(o)); 031 } 032 return sb.toString(); 033 } 034 public static String call(PageContext pc , Array array, char delimiter) throws PageException { 035 int len=array.size(); 036 if(len==0) return ""; 037 if(len==1)return Caster.toString(array.getE(1)); 038 039 Object o=array.get(1,null); 040 StringBuffer sb=new StringBuffer(o==null?"":Caster.toString(o)); 041 for(int i=2;i<=len;i++) { 042 sb.append(delimiter); 043 o=array.get(i,null); 044 sb.append(o==null?"":Caster.toString(o)); 045 } 046 return sb.toString(); 047 } 048 049 @Override 050 public Object invoke(PageContext pc, Object[] args) throws PageException { 051 if(args.length==1) return call(pc,Caster.toArray(args[0])); 052 return call(pc,Caster.toArray(args[0]),Caster.toString(args[1])); 053 } 054 }