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 fuer 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 geprueft 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 geprueft 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            @Override
057            public boolean accept(Resource res) {
058                    if(res.isDirectory()) return allowDir;
059                    if(res.exists()) {
060                            String name=res.getName();
061                            for(int i=0;i<extensions.length;i++) {
062                                    if(ignoreCase){
063                                            if(StringUtil.endsWithIgnoreCase(name,extensions[i]))
064                                                    return true;
065                                    }
066                                    else {
067                                            if(name.endsWith(extensions[i]))
068                                                    return true;
069                                    }
070                            }
071                    }
072                    return false;
073            }
074            
075        /**
076         * @return Returns the extension.
077         */
078        public String[] getExtensions() {
079            return extensions;
080        }
081    }