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    }