package railo.runtime.thread;
import java.io.OutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import railo.commons.io.DevNullOutputStream;
import railo.commons.lang.Pair;
import railo.runtime.CFMLFactory;
import railo.runtime.CFMLFactoryImpl;
import railo.runtime.PageContext;
import railo.runtime.PageContextImpl;
import railo.runtime.config.Config;
import railo.runtime.config.ConfigImpl;
import railo.runtime.config.ConfigWeb;
import railo.runtime.net.http.HTTPServletRequestWrap;
import railo.runtime.net.http.HttpServletRequestDummy;
import railo.runtime.net.http.HttpServletResponseDummy;
import railo.runtime.type.Struct;
public class ThreadUtil {
public static PageContextImpl clonePageContext(PageContext pc, OutputStream os, boolean stateless,boolean registerPC,boolean isChild) {
// TODO stateless
CFMLFactoryImpl factory = (CFMLFactoryImpl) ((ConfigImpl)pc.getConfig()).getFactory();
HttpServletRequest req=new HTTPServletRequestWrap(cloneHttpServletRequest(pc));
HttpServletResponse rsp=createHttpServletResponse(os);
// copy state
PageContextImpl pci = (PageContextImpl) pc;
PageContextImpl dest = factory.getPageContextImpl(factory.getServlet(), req, rsp, null, false, -1, false,registerPC, isChild);
pci.copyStateTo(dest);
return dest;
}
public static PageContextImpl createPageContext(ConfigWeb config,OutputStream os,String serverName,String requestURI,String queryString,Cookie[] cookies,Pair[] headers,Pair[] parameters,Struct attributes) {
CFMLFactory factory = config.getFactory();
HttpServletRequest req = new HttpServletRequestDummy(
config.getRootDirectory(),
serverName,
requestURI,
queryString,
cookies,
headers,
parameters,
attributes,
null
);
req=new HTTPServletRequestWrap(req);
HttpServletResponse rsp=createHttpServletResponse(os);
return (PageContextImpl) factory.getRailoPageContext(
factory.getServlet(),
req, rsp, null, false, -1, false);
}
public static HttpServletRequest cloneHttpServletRequest(PageContext pc) {
Config config = pc.getConfig();
HttpServletRequest req = pc.getHttpServletRequest();
HttpServletRequestDummy dest = HttpServletRequestDummy.clone(config,config.getRootDirectory(),req);
return dest;
}
public static HttpServletResponse createHttpServletResponse(OutputStream os) {
if(os==null) os = DevNullOutputStream.DEV_NULL_OUTPUT_STREAM;
HttpServletResponseDummy dest = new HttpServletResponseDummy(os);
return dest;
}
/**
* return priority as a String representation
* @param priority Thread priority
* @return String defintion of priority (null when input is invalid)
*/
public static String toStringPriority(int priority) {
if(priority==Thread.NORM_PRIORITY) return "NORMAL";
if(priority==Thread.MAX_PRIORITY) return "HIGH";
if(priority==Thread.MIN_PRIORITY) return "LOW";
return null;
}
/**
* return priority as a int representation
* @param priority Thread priority as String definition
* @return int defintion of priority (-1 when input is invalid)
*/
public static int toIntPriority(String strPriority) {
strPriority=strPriority.trim().toLowerCase();
if("low".equals(strPriority)) return Thread.MIN_PRIORITY;
if("min".equals(strPriority)) return Thread.MIN_PRIORITY;
if("high".equals(strPriority)) return Thread.MAX_PRIORITY;
if("max".equals(strPriority)) return Thread.MAX_PRIORITY;
if("normal".equals(strPriority)) return Thread.NORM_PRIORITY;
if("norm".equals(strPriority)) return Thread.NORM_PRIORITY;
return -1;
}
}