/** * Implements the CFML Function gettemplatepath */ package railo.runtime.functions.system; import railo.commons.lang.ExceptionUtil; import railo.commons.lang.StringUtil; import railo.runtime.PageContext; import railo.runtime.config.ConfigWebImpl; import railo.runtime.exp.FunctionException; import railo.runtime.ext.function.Function; import railo.runtime.functions.component.ComponentCacheClear; import railo.runtime.functions.other.CTCacheClear; import railo.runtime.type.Collection; import railo.runtime.type.KeyImpl; import railo.runtime.type.util.KeyConstants; public final class SystemCacheClear implements Function { private static final long serialVersionUID = 2151674703665027213L; public static String call(PageContext pc) throws FunctionException { return call(pc,null); } public static String call(PageContext pc, String cacheName) throws FunctionException { if(StringUtil.isEmpty(cacheName,true) || "all".equals(cacheName=cacheName.trim().toLowerCase())) { PagePoolClear.call(pc); ComponentCacheClear.call(pc); CTCacheClear.call(pc); queryCache(pc); tagCache(pc); functionCache(pc); } else if("template".equals(cacheName) || "page".equals(cacheName)) { PagePoolClear.call(pc); } else if("component".equals(cacheName) || "cfc".equals(cacheName)) { ComponentCacheClear.call(pc); } else if("customtag".equals(cacheName) || "ct".equals(cacheName)) { CTCacheClear.call(pc); } else if("query".equals(cacheName) || "object".equals(cacheName)) { queryCache(pc); } else if("tag".equals(cacheName)) { tagCache(pc); } else if("function".equals(cacheName)) { functionCache(pc); } else throw new FunctionException(pc, "cacheClear", 1, "cacheName", ExceptionUtil.similarKeyMessage(new Collection.Key[]{ KeyConstants._all, KeyConstants._template, KeyConstants._component, KeyImpl.init("customtag"), KeyConstants._query, KeyConstants._tag, KeyConstants._function}, cacheName, "cache name", "cache names",true)); return null; } private static void queryCache(PageContext pc) { pc.getQueryCache().clear(pc); } private static void tagCache(PageContext pc) { ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); PagePoolClear.clear(config.getServerTagMapping()); PagePoolClear.clear(config.getTagMapping()); } private static void functionCache(PageContext pc) { ConfigWebImpl config=(ConfigWebImpl) pc.getConfig(); config.clearFunctionCache(); PagePoolClear.clear(config.getServerFunctionMapping()); PagePoolClear.clear(config.getFunctionMapping()); } }