package railo.runtime.engine; import java.util.Locale; import java.util.TimeZone; import railo.runtime.PageContext; import railo.runtime.config.Config; /** * class to handle thread local PageContext, * do use pagecontext in classes that have no method argument pagecontext */ public final class ThreadLocalPageContext { private static final Locale DEFAULT_LOCALE = Locale.getDefault(); private static final TimeZone DEFAULT_TIMEZONE = TimeZone.getDefault(); private static ThreadLocal<PageContext> pcThreadLocal=new ThreadLocal<PageContext>(); /** * register a pagecontext for he current thread * @param pc PageContext to register */ public static void register(PageContext pc) { pcThreadLocal.set(pc); } /** * returns pagecontext registered for the current thread * @return pagecontext for the current thread or null * if no pagecontext is regisred for the current thread */ public static PageContext get() {//print.dumpStack(); return pcThreadLocal.get(); } public static Config getConfig() { PageContext pc = get(); if(pc!=null) return pc.getConfig(); return ThreadLocalConfig.get(); } /** * release the pagecontext for the current thread */ public static void release() { pcThreadLocal.set(null); } public static Config getConfig(PageContext pc) { if(pc==null)return getConfig(); return pc.getConfig(); } public static Config getConfig(Config config) { if(config==null)return getConfig(); return config; } public static TimeZone getTimeZone(PageContext pc) { // pc pc = get(pc); if(pc!=null){ if(pc.getTimeZone()!=null)return pc.getTimeZone(); return DEFAULT_TIMEZONE; } // config Config config = getConfig((Config)null); if(config!=null && config.getTimeZone()!=null) { return config.getTimeZone(); } return DEFAULT_TIMEZONE; } public static Locale getLocale(PageContext pc) { // pc pc = get(pc); if(pc!=null){ if(pc.getLocale()!=null)return pc.getLocale(); return DEFAULT_LOCALE; } // config Config config = getConfig((Config)null); if(config!=null && config.getLocale()!=null) { return config.getLocale(); } return DEFAULT_LOCALE; } public static TimeZone getTimeZone(Config config) { PageContext pc = get(); if(pc!=null && pc.getTimeZone()!=null) return pc.getTimeZone(); config=getConfig(config); if(config!=null && config.getTimeZone()!=null) { return config.getTimeZone(); } return DEFAULT_TIMEZONE; } public static TimeZone getTimeZone(TimeZone timezone) { if(timezone!=null) return timezone; return getTimeZone((PageContext)null); } public static TimeZone getTimeZone() { return getTimeZone((PageContext)null); } public static PageContext get(PageContext pc) { if(pc==null)return get(); return pc; } }