/** * Implements the CFML Function getpagecontext */ package railo.runtime.functions.other; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import javax.servlet.http.Cookie; import railo.commons.io.DevNullOutputStream; import railo.commons.lang.Pair; import railo.runtime.PageContext; import railo.runtime.exp.PageException; import railo.runtime.ext.function.Function; import railo.runtime.op.Caster; import railo.runtime.thread.ThreadUtil; import railo.runtime.type.Collection.Key; import railo.runtime.type.Struct; import railo.runtime.type.StructImpl; import railo.runtime.type.util.CollectionUtil; public final class CreatePageContext implements Function { public static Object call(PageContext pc, String serverName, String scriptName) throws PageException { return call(pc,serverName,scriptName,"",new StructImpl(),new StructImpl(),new StructImpl(),new StructImpl()); } public static Object call(PageContext pc, String serverName, String scriptName,String queryString) throws PageException { return call(pc,serverName,scriptName,queryString,new StructImpl(),new StructImpl(),new StructImpl(),new StructImpl()); } public static Object call(PageContext pc, String serverName, String scriptName,String queryString, Struct cookies) throws PageException { return call(pc,serverName,scriptName,queryString,cookies,new StructImpl(),new StructImpl(),new StructImpl()); } public static Object call(PageContext pc, String serverName, String scriptName,String queryString, Struct cookies, Struct headers) throws PageException { return call(pc,serverName,scriptName,queryString,cookies,headers,new StructImpl(),new StructImpl()); } public static Object call(PageContext pc, String serverName, String scriptName,String queryString, Struct cookies, Struct headers, Struct parameters) throws PageException { return call(pc,serverName,scriptName,queryString,cookies,headers,parameters,new StructImpl()); } public static Object call(PageContext pc, String serverName, String scriptName,String queryString, Struct cookies, Struct headers, Struct parameters, Struct attributes) throws PageException { return ThreadUtil.createPageContext( pc.getConfig(), DevNullOutputStream.DEV_NULL_OUTPUT_STREAM, serverName, scriptName, queryString, toCookies(cookies), toPair(headers,true), toPair(parameters,true), castValuesToString(attributes)); } private static Struct castValuesToString(Struct sct) throws PageException { Key[] keys = CollectionUtil.keys(sct); for(int i=0;i<keys.length;i++){ sct.set(keys[i], Caster.toString(sct.get(keys[i]))); } return sct; } private static Pair<String,Object>[] toPair(Struct sct, boolean doStringCast) throws PageException { Iterator<Entry<Key, Object>> it = sct.entryIterator(); Entry<Key, Object> e; Object value; List<Pair<String,Object>> pairs=new ArrayList<Pair<String,Object>>(); while(it.hasNext()){ e = it.next(); value= e.getValue(); if(doStringCast)value=Caster.toString(value); pairs.add(new Pair<String,Object>(e.getKey().getString(),value)); } return pairs.toArray(new Pair[pairs.size()]); } private static Cookie[] toCookies(Struct sct) throws PageException { Iterator<Entry<Key, Object>> it = sct.entryIterator(); Entry<Key, Object> e; List<Cookie> cookies=new ArrayList<Cookie>(); while(it.hasNext()){ e = it.next(); cookies.add(new Cookie(e.getKey().getString(), Caster.toString(e.getValue()))); } return cookies.toArray(new Cookie[cookies.size()]); } }