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    }