001 /** 002 * Implements the Cold Fusion Function gettemplatepath 003 */ 004 package railo.runtime.functions.system; 005 006 import railo.commons.lang.ExceptionUtil; 007 import railo.commons.lang.StringUtil; 008 import railo.runtime.PageContext; 009 import railo.runtime.config.ConfigWebImpl; 010 import railo.runtime.exp.FunctionException; 011 import railo.runtime.ext.function.Function; 012 import railo.runtime.functions.component.ComponentCacheClear; 013 import railo.runtime.functions.other.CTCacheClear; 014 import railo.runtime.query.QueryCacheSupport; 015 016 public final class SystemCacheClear implements Function { 017 018 private static final long serialVersionUID = 2151674703665027213L; 019 020 public static String call(PageContext pc) throws FunctionException { 021 return call(pc,null); 022 } 023 public static String call(PageContext pc, String cacheName) throws FunctionException { 024 025 if(StringUtil.isEmpty(cacheName,true) || "all".equals(cacheName=cacheName.trim().toLowerCase())) { 026 PagePoolClear.call(pc); 027 ComponentCacheClear.call(pc); 028 CTCacheClear.call(pc); 029 queryCache(pc); 030 tagCache(pc); 031 functionCache(pc); 032 } 033 else if("template".equals(cacheName) || "page".equals(cacheName)) { 034 PagePoolClear.call(pc); 035 } 036 else if("component".equals(cacheName) || "cfc".equals(cacheName)) { 037 ComponentCacheClear.call(pc); 038 } 039 else if("customtag".equals(cacheName) || "ct".equals(cacheName)) { 040 CTCacheClear.call(pc); 041 } 042 else if("query".equals(cacheName) || "object".equals(cacheName)) { 043 queryCache(pc); 044 } 045 else if("tag".equals(cacheName)) { 046 tagCache(pc); 047 } 048 else if("function".equals(cacheName)) { 049 functionCache(pc); 050 } 051 else 052 throw new FunctionException(pc, "cacheClear", 1, "cacheName", 053 ExceptionUtil.similarKeyMessage(new String[]{"all","template","component","customtag","query","tag","function"}, cacheName, "cache name", "cache names")); 054 055 056 return null; 057 } 058 059 private static void queryCache(PageContext pc) { 060 QueryCacheSupport qc = ((QueryCacheSupport)pc.getQueryCache()); 061 qc.clear(); 062 } 063 064 private static void tagCache(PageContext pc) { 065 ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); 066 PagePoolClear.clear(config.getServerTagMapping()); 067 PagePoolClear.clear(config.getTagMapping()); 068 } 069 070 private static void functionCache(PageContext pc) { 071 ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); 072 config.clearFunctionCache(); 073 PagePoolClear.clear(config.getServerFunctionMapping()); 074 PagePoolClear.clear(config.getFunctionMapping()); 075 076 } 077 }