001    package railo.commons.io.res.filter;
002    
003    
004    import railo.commons.io.res.Resource;
005    import railo.commons.lang.StringUtil;
006    
007    /**
008     * Filter f�r die <code>listFiles</code> Methode des FIle Objekt, 
009     * zum filtern von FIles mit einer bestimmten Extension.
010     */
011    public final class ExtensionResourceFilter implements ResourceFilter {
012            
013            private final String[] extensions;
014            private final boolean allowDir;
015            private final boolean ignoreCase;
016        //private int extLen;
017            
018    
019            /**
020             * Konstruktor des Filters
021             * @param extension Endung die gepr�ft werden soll.
022             */
023            public ExtensionResourceFilter(String extension) {
024                    this(new String[]{extension},false,true);
025            }
026    
027            /**
028             * Konstruktor des Filters
029             * @param extension Endung die gepr�ft werden soll.
030             */
031            public ExtensionResourceFilter(String extension, boolean allowDir) {
032                    this(new String[]{extension},allowDir,true);
033            }
034            
035            public ExtensionResourceFilter(String[] extensions) {
036                    this(extensions,false,true);
037            }
038            
039            public ExtensionResourceFilter(String[] extensions, boolean allowDir) {
040                    this(extensions,allowDir,true);
041            }
042    
043            
044            public ExtensionResourceFilter(String[] extensions, boolean allowDir, boolean ignoreCase) {
045                    String[] tmp=new String[extensions.length];
046                    for(int i=0;i<extensions.length;i++) {
047                            if(!StringUtil.startsWith(extensions[i],'.'))
048                        tmp[i]="."+extensions[i];
049                            else tmp[i]=extensions[i];
050                    }
051                    this.extensions=tmp;
052            this.allowDir=allowDir;
053            this.ignoreCase=ignoreCase;
054            }
055    
056            /**
057             * @see railo.commons.io.res.filter.ResourceFilter#accept(railo.commons.io.res.Resource)
058             */
059            public boolean accept(Resource res) {
060                    if(res.isDirectory()) return allowDir;
061                    if(res.exists()) {
062                            String name=res.getName();
063                            for(int i=0;i<extensions.length;i++) {
064                                    if(ignoreCase){
065                                            if(StringUtil.endsWithIgnoreCase(name,extensions[i]))
066                                                    return true;
067                                    }
068                                    else {
069                                            if(name.endsWith(extensions[i]))
070                                                    return true;
071                                    }
072                            }
073                    }
074                    return false;
075            }
076            
077        /**
078         * @return Returns the extension.
079         */
080        public String[] getExtensions() {
081            return extensions;
082        }
083    }