001 package railo.runtime.thread; 002 003 import java.io.OutputStream; 004 005 import javax.servlet.http.Cookie; 006 import javax.servlet.http.HttpServletRequest; 007 import javax.servlet.http.HttpServletResponse; 008 009 import railo.commons.io.DevNullOutputStream; 010 import railo.commons.lang.Pair; 011 import railo.runtime.CFMLFactory; 012 import railo.runtime.CFMLFactoryImpl; 013 import railo.runtime.PageContext; 014 import railo.runtime.PageContextImpl; 015 import railo.runtime.config.Config; 016 import railo.runtime.config.ConfigImpl; 017 import railo.runtime.config.ConfigWeb; 018 import railo.runtime.net.http.HTTPServletRequestWrap; 019 import railo.runtime.net.http.HttpServletRequestDummy; 020 import railo.runtime.net.http.HttpServletResponseDummy; 021 import railo.runtime.type.Struct; 022 023 public class ThreadUtil { 024 025 026 public static PageContextImpl clonePageContext(PageContext pc, OutputStream os, boolean stateless,boolean registerPC,boolean isChild) { 027 // TODO stateless 028 CFMLFactoryImpl factory = (CFMLFactoryImpl) ((ConfigImpl)pc.getConfig()).getFactory(); 029 HttpServletRequest req=new HTTPServletRequestWrap(cloneHttpServletRequest(pc)); 030 HttpServletResponse rsp=createHttpServletResponse(os); 031 032 // copy state 033 PageContextImpl pci = (PageContextImpl) pc; 034 PageContextImpl dest = factory.getPageContextImpl(factory.getServlet(), req, rsp, null, false, -1, false,registerPC, isChild); 035 pci.copyStateTo(dest); 036 return dest; 037 } 038 039 public static PageContextImpl createPageContext(ConfigWeb config,OutputStream os,String serverName,String requestURI,String queryString,Cookie[] cookies,Pair[] headers,Pair[] parameters,Struct attributes) { 040 CFMLFactory factory = ((ConfigImpl)config).getFactory(); 041 HttpServletRequest req = new HttpServletRequestDummy( 042 config.getRootDirectory(), 043 serverName, 044 requestURI, 045 queryString, 046 cookies, 047 headers, 048 parameters, 049 attributes, 050 null 051 ); 052 053 054 req=new HTTPServletRequestWrap(req); 055 HttpServletResponse rsp=createHttpServletResponse(os); 056 057 return (PageContextImpl) factory.getRailoPageContext( 058 factory.getServlet(), 059 req, rsp, null, false, -1, false); 060 061 } 062 063 064 public static HttpServletRequest cloneHttpServletRequest(PageContext pc) { 065 Config config = pc.getConfig(); 066 HttpServletRequest req = pc.getHttpServletRequest(); 067 HttpServletRequestDummy dest = HttpServletRequestDummy.clone(config,config.getRootDirectory(),req); 068 return dest; 069 } 070 071 public static HttpServletResponse createHttpServletResponse(OutputStream os) { 072 if(os==null) os = DevNullOutputStream.DEV_NULL_OUTPUT_STREAM; 073 074 HttpServletResponseDummy dest = new HttpServletResponseDummy(os); 075 return dest; 076 } 077 078 /** 079 * return priority as a String representation 080 * @param priority Thread priority 081 * @return String defintion of priority (null when input is invalid) 082 */ 083 public static String toStringPriority(int priority) { 084 if(priority==Thread.NORM_PRIORITY) return "NORMAL"; 085 if(priority==Thread.MAX_PRIORITY) return "HIGH"; 086 if(priority==Thread.MIN_PRIORITY) return "LOW"; 087 return null; 088 } 089 090 /** 091 * return priority as a int representation 092 * @param priority Thread priority as String definition 093 * @return int defintion of priority (-1 when input is invalid) 094 */ 095 public static int toIntPriority(String strPriority) { 096 strPriority=strPriority.trim().toLowerCase(); 097 098 if("low".equals(strPriority)) return Thread.MIN_PRIORITY; 099 if("min".equals(strPriority)) return Thread.MIN_PRIORITY; 100 if("high".equals(strPriority)) return Thread.MAX_PRIORITY; 101 if("max".equals(strPriority)) return Thread.MAX_PRIORITY; 102 if("normal".equals(strPriority)) return Thread.NORM_PRIORITY; 103 if("norm".equals(strPriority)) return Thread.NORM_PRIORITY; 104 return -1; 105 } 106 }