001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 SonarSource
004     * mailto:contact AT sonarsource DOT com
005     *
006     * Sonar is free software; you can redistribute it and/or
007     * modify it under the terms of the GNU Lesser General Public
008     * License as published by the Free Software Foundation; either
009     * version 3 of the License, or (at your option) any later version.
010     *
011     * Sonar is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014     * Lesser General Public License for more details.
015     *
016     * You should have received a copy of the GNU Lesser General Public
017     * License along with Sonar; if not, write to the Free Software
018     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019     */
020    
021    package net.sourceforge.pmd.util.filter;
022    
023    import java.io.File;
024    
025    public class FileExtensionFilter implements Filter<File> {
026            protected final String[] extensions;
027            protected final boolean ignoreCase;
028    
029            /**
030             * Matches any files with the given extensions, ignoring case
031             */
032            public FileExtensionFilter(String... extensions) {
033                    this(true, extensions);
034            }
035    
036            /**
037             * Matches any files with the given extensions, optionally ignoring case.
038             */
039            public FileExtensionFilter(boolean ignoreCase, String... extensions) {
040                    this.extensions = extensions;
041                    this.ignoreCase = ignoreCase;
042                    if (ignoreCase) {
043                            for (int i = 0; i < this.extensions.length; i++) {
044                                    this.extensions[i] = this.extensions[i].toUpperCase();
045                            }
046                    }
047            }
048    
049            public boolean filter(File file) {
050                    boolean accept = extensions == null;
051                    if (!accept) {
052                            for (String extension : extensions) {
053                                    String name = file.getName();
054                                    if (ignoreCase ? name.toUpperCase().endsWith(extension) : name.endsWith(extension)) {
055                                            accept = true;
056                                            break;
057                                    }
058                            }
059                    }
060                    return accept;
061            }
062    }