001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.runtime.cache.tag.query;
020
021import lucee.commons.io.res.util.WildCardFilter;
022import lucee.runtime.cache.tag.CacheHandlerFilter;
023import lucee.runtime.type.Query;
024
025import org.apache.oro.text.regex.MalformedPatternException;
026
027public class QueryCacheHandlerFilter implements CacheHandlerFilter {
028        
029        private WildCardFilter filter;
030
031        public QueryCacheHandlerFilter(String wildcard, boolean ignoreCase)throws MalformedPatternException {
032                filter=new WildCardFilter(wildcard,ignoreCase);
033        }
034
035        @Override
036        public boolean accept(Object obj) {
037                Query qry;
038                if(!(obj instanceof Query)) {
039                        if(obj instanceof QueryCacheItem) {
040                                qry=((QueryCacheItem)obj).getQuery();
041                        }
042                        else return false;
043                }
044                else qry=(Query) obj;
045                
046                String sql = qry.getSql().toString();
047                StringBuilder sb=new StringBuilder();
048                char[] text = sql.toCharArray();
049                for(int i=0;i<text.length;i++) {
050                        if(text[i]=='\n' || text[i]=='\r') {
051                                sb.append(' ');
052                        }
053                        else sb.append(text[i]);
054                }
055                return filter.accept(sb.toString());
056        }
057}