package railo.runtime.search.lucene2;
import railo.commons.io.res.Resource;
import railo.commons.io.res.filter.ResourceFilter;
import railo.commons.io.res.util.ResourceUtil;
/**
* FilFilter that only allow filter with given extensions
* by constructor or directory, if constructor variable recurse is true
*/
public final class LuceneExtensionFileFilter implements ResourceFilter {
private String[] extensions;
private boolean recurse;
private boolean noExtension;
private boolean allExtension;
/**
* constructor of the class
* @param extensions
* @param recurse
*/
public LuceneExtensionFileFilter(String[] extensions, boolean recurse) {
this.extensions=extensions;
for(int i=0;i<extensions.length;i++) {
String ext = extensions[i].trim();
if(ext.equals("*.")) {
noExtension=true;
continue;
}
if(ext.equals(".*") || ext.equals("*.*")) {
allExtension = true;
continue;
}
// asterix
int startIndex=ext.indexOf('*');
if(startIndex==0) ext=ext.substring(1);
// dot
int startDot=ext.indexOf('.');
if(startDot==0) ext=ext.substring(1);
if(ext.equals("*"))ext="";
//print.ln(ext);
extensions[i]=ext.toLowerCase();
}
this.recurse=recurse;
}
@Override
public boolean accept(Resource res) {
if(res.isDirectory()) return recurse;
else if(res.isFile()) {
String ext=ResourceUtil.getExtension(res,null);
if(ext==null) return noExtension;
else if(allExtension) return true;
for(int i=0;i<extensions.length;i++) {
if(extensions[i].equalsIgnoreCase(ext)) return true;
}
return false;
}
return false;
}
}