001 package railo.runtime.tag; 002 003 import org.apache.oro.text.regex.MalformedPatternException; 004 005 import railo.commons.lang.StringUtil; 006 import railo.runtime.exp.ApplicationException; 007 import railo.runtime.exp.PageException; 008 import railo.runtime.ext.tag.TagImpl; 009 import railo.runtime.op.Caster; 010 import railo.runtime.query.QueryCacheFilter; 011 import railo.runtime.query.QueryCacheFilterImpl; 012 import railo.runtime.query.QueryCacheFilterUDF; 013 import railo.runtime.query.QueryCacheSupport; 014 import railo.runtime.type.UDF; 015 016 /** 017 * Flushes the query cache 018 * 019 * 020 * 021 **/ 022 public final class ObjectCache extends TagImpl { 023 024 /** Clears queries from the cache in the Application scope. */ 025 private String action="clear"; 026 private QueryCacheFilter filter; 027 private String result="cfObjectCache"; 028 029 /** set the value action 030 * Clears queries from the cache in the Application scope. 031 * @param action value to set 032 **/ 033 public void setAction(String action) { 034 this.action=action; 035 } 036 public void setResult(String result) { 037 this.result=result; 038 } 039 040 public void setFilter(Object filter) throws PageException { 041 this.filter=createFilter(filter, false); 042 } 043 044 public void setFilter(String filter) throws PageException { 045 this.filter=createFilter(filter, false); 046 } 047 048 public void setFilterignorecase(String filter) throws PageException { 049 this.filter=createFilter(filter, true); 050 } 051 052 053 054 public static QueryCacheFilter createFilter(Object filter,boolean ignoreCase) throws PageException { 055 if(filter instanceof UDF) 056 return createFilter((UDF)filter); 057 return createFilter(Caster.toString(filter),ignoreCase); 058 } 059 060 061 public static QueryCacheFilter createFilter(UDF filter) throws PageException { 062 return new QueryCacheFilterUDF(filter); 063 } 064 065 public static QueryCacheFilter createFilter(String pattern,boolean ignoreCase) throws PageException { 066 if(!StringUtil.isEmpty(pattern,true)) { 067 try { 068 return new QueryCacheFilterImpl(pattern,ignoreCase); 069 } catch (MalformedPatternException e) { 070 throw Caster.toPageException(e); 071 } 072 } 073 return null; 074 } 075 076 077 078 079 080 081 082 @Override 083 public int doStartTag() throws PageException { 084 _doStartTag(); 085 return SKIP_BODY; 086 } 087 public void _doStartTag() throws PageException { 088 QueryCacheSupport qc = ((QueryCacheSupport)pageContext.getQueryCache()); 089 if(action.equalsIgnoreCase("clear")) { 090 if(filter==null) 091 qc.clear(pageContext); 092 else 093 qc.clear(pageContext,filter); 094 } 095 else if(action.equalsIgnoreCase("size")) { 096 pageContext.setVariable(result, Caster.toDouble(qc.size(pageContext))); 097 } 098 else throw new ApplicationException("attribute action has an invalid value ["+action+"], valid is only [clear,size]"); 099 100 101 102 } 103 104 @Override 105 public int doEndTag() { 106 return EVAL_PAGE; 107 } 108 109 @Override 110 public void release() { 111 super.release(); 112 action="clear"; 113 result="cfObjectCache"; 114 filter=null; 115 } 116 }