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    }