001    package railo.runtime.search.lucene2;
002    
003    
004    
005    import railo.commons.io.res.Resource;
006    import railo.commons.io.res.filter.ResourceFilter;
007    import railo.commons.io.res.util.ResourceUtil;
008    
009    /**
010     * FilFilter that only allow filter with given extensions 
011     * by constructor or directory, if constructor variable recurse is true
012     */
013    public final class LuceneExtensionFileFilter implements ResourceFilter {
014    
015        private String[] extensions;
016        private boolean recurse;
017        private boolean noExtension;
018        private boolean allExtension;
019    
020        /**
021         * constructor of the class
022         * @param extensions
023         * @param recurse
024         */
025        public LuceneExtensionFileFilter(String[] extensions, boolean recurse) {
026            
027            this.extensions=extensions;
028            
029            for(int i=0;i<extensions.length;i++) {
030                String ext = extensions[i].trim();
031                
032                if(ext.equals("*."))        {
033                    noExtension=true;
034                    continue;
035                }
036                if(ext.equals(".*") || ext.equals("*.*"))   {
037                    allExtension = true;
038                    continue;
039                }
040                
041                // asterix
042                int startIndex=ext.indexOf('*');
043                if(startIndex==0) ext=ext.substring(1);
044                
045                // dot
046                int startDot=ext.indexOf('.');
047                if(startDot==0) ext=ext.substring(1);
048                
049                if(ext.equals("*"))ext="";
050                //print.ln(ext);
051                extensions[i]=ext.toLowerCase();
052            }
053            this.recurse=recurse;
054        }
055    
056        @Override
057        public boolean accept(Resource res) {
058            if(res.isDirectory()) return recurse;
059            else if(res.isFile()) {
060                String ext=ResourceUtil.getExtension(res,null);
061                if(ext==null) return noExtension;
062                else if(allExtension) return true;
063                            
064                for(int i=0;i<extensions.length;i++) {
065                    if(extensions[i].equalsIgnoreCase(ext)) return true;
066                }
067                return false;
068            }
069            return false;
070        }
071    }