001 package railo.commons.io.res.util; 002 003 import java.io.File; 004 005 import railo.commons.io.res.Resource; 006 import railo.runtime.engine.ThreadLocalPageContext; 007 import railo.runtime.exp.ExpressionException; 008 import railo.runtime.exp.PageException; 009 import railo.runtime.exp.PageRuntimeException; 010 import railo.runtime.op.Caster; 011 import railo.runtime.type.UDF; 012 013 public class UDFFilter extends UDFFilterSupport implements ResourceAndResourceNameFilter { 014 015 public UDFFilter(UDF udf) throws ExpressionException{ 016 super(udf); 017 } 018 019 public boolean accept(String path) { 020 args[0]=path; 021 try { 022 return Caster.toBooleanValue(udf.call(ThreadLocalPageContext.get(), args, true)); 023 024 } 025 catch (PageException e) { 026 throw new PageRuntimeException(e); 027 } 028 } 029 030 031 public boolean accept(Resource file) { 032 return accept(file.getAbsolutePath()); 033 } 034 035 @Override 036 public boolean accept(Resource parent, String name) { 037 String path=parent.getAbsolutePath(); 038 if(path.endsWith(File.separator)) path+=name; 039 else path+=File.separator+name; 040 return accept(path); 041 } 042 043 @Override 044 public String toString() { 045 return "UDFFilter:"+udf; 046 } 047 048 public static ResourceAndResourceNameFilter createResourceAndResourceNameFilter(Object filter) throws PageException { 049 if(filter instanceof UDF) 050 return createResourceAndResourceNameFilter((UDF)filter); 051 return createResourceAndResourceNameFilter(Caster.toString(filter)); 052 } 053 054 055 public static ResourceAndResourceNameFilter createResourceAndResourceNameFilter(UDF filter) throws PageException { 056 return new UDFFilter(filter); 057 } 058 059 public static ResourceAndResourceNameFilter createResourceAndResourceNameFilter(String pattern) { 060 061 if( !pattern.trim().isEmpty() ) 062 return new WildcardPatternFilter( pattern ); 063 064 return null; 065 } 066 }