001 /** 002 * Implements the CFML Function arrayavg 003 */ 004 package railo.runtime.functions.struct; 005 006 import java.util.ArrayList; 007 import java.util.List; 008 import java.util.concurrent.ExecutorService; 009 import java.util.concurrent.Executors; 010 import java.util.concurrent.Future; 011 012 import railo.runtime.PageContext; 013 import railo.runtime.exp.PageException; 014 import railo.runtime.ext.function.Function; 015 import railo.runtime.functions.closure.Each; 016 import railo.runtime.type.Struct; 017 import railo.runtime.type.UDF; 018 019 020 public final class StructEach implements Function { 021 022 private static final long serialVersionUID = 5795152568391831373L; 023 024 public static String call(PageContext pc , Struct sct, UDF udf) throws PageException { 025 return _call(pc, sct, udf, false, 20); 026 } 027 public static String call(PageContext pc , Struct sct, UDF udf, boolean parallel) throws PageException { 028 return _call(pc, sct, udf, parallel, 20); 029 } 030 031 public static String call(PageContext pc , Struct sct, UDF udf, boolean parallel, double maxThreads) throws PageException { 032 return _call(pc, sct, udf, parallel, (int)maxThreads); 033 } 034 private static String _call(PageContext pc , Struct sct, UDF udf, boolean parallel, int maxThreads) throws PageException { 035 ExecutorService execute=null; 036 List<Future<String>> futures=null; 037 if(parallel) { 038 execute = Executors.newFixedThreadPool(maxThreads); 039 futures=new ArrayList<Future<String>>(); 040 } 041 Each.invoke(pc, sct, udf,execute,futures); 042 043 if(parallel) Each.afterCall(pc,futures); 044 045 return null; 046 } 047 }