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 }