001 /** 002 * Implements the CFML 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.type.Collection; 015 import railo.runtime.type.KeyImpl; 016 import railo.runtime.type.util.KeyConstants; 017 018 public final class SystemCacheClear implements Function { 019 020 private static final long serialVersionUID = 2151674703665027213L; 021 022 public static String call(PageContext pc) throws FunctionException { 023 return call(pc,null); 024 } 025 public static String call(PageContext pc, String cacheName) throws FunctionException { 026 027 if(StringUtil.isEmpty(cacheName,true) || "all".equals(cacheName=cacheName.trim().toLowerCase())) { 028 PagePoolClear.call(pc); 029 ComponentCacheClear.call(pc); 030 CTCacheClear.call(pc); 031 queryCache(pc); 032 tagCache(pc); 033 functionCache(pc); 034 } 035 else if("template".equals(cacheName) || "page".equals(cacheName)) { 036 PagePoolClear.call(pc); 037 } 038 else if("component".equals(cacheName) || "cfc".equals(cacheName)) { 039 ComponentCacheClear.call(pc); 040 } 041 else if("customtag".equals(cacheName) || "ct".equals(cacheName)) { 042 CTCacheClear.call(pc); 043 } 044 else if("query".equals(cacheName) || "object".equals(cacheName)) { 045 queryCache(pc); 046 } 047 else if("tag".equals(cacheName)) { 048 tagCache(pc); 049 } 050 else if("function".equals(cacheName)) { 051 functionCache(pc); 052 } 053 else 054 throw new FunctionException(pc, "cacheClear", 1, "cacheName", 055 ExceptionUtil.similarKeyMessage(new Collection.Key[]{ 056 KeyConstants._all, 057 KeyConstants._template, 058 KeyConstants._component, 059 KeyImpl.init("customtag"), 060 KeyConstants._query, 061 KeyConstants._tag, 062 KeyConstants._function}, cacheName, "cache name", "cache names")); 063 064 065 return null; 066 } 067 068 private static void queryCache(PageContext pc) { 069 pc.getQueryCache().clear(pc); 070 } 071 072 private static void tagCache(PageContext pc) { 073 ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); 074 PagePoolClear.clear(config.getServerTagMapping()); 075 PagePoolClear.clear(config.getTagMapping()); 076 } 077 078 private static void functionCache(PageContext pc) { 079 ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); 080 config.clearFunctionCache(); 081 PagePoolClear.clear(config.getServerFunctionMapping()); 082 PagePoolClear.clear(config.getFunctionMapping()); 083 084 } 085 }