/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Collections;
import java.util.List;
import java.util.Set;
/**
* This is an implementation of the {@link FilenameFilter} interface which
* compares a file against a collection of Languages to see if the any are
* applicable.
*
* @author Pieter_Van_Raemdonck - Application Engineers NV/SA - www.ae.be
*/
public class LanguageFilenameFilter implements FilenameFilter {
private final Set<Language> languages;
/**
* Create a LanguageFilenameFilter for a single Language.
*
* @param language
* The Language.
*/
public LanguageFilenameFilter(Language language) {
this(Collections.singleton(language));
}
/**
* Create a LanguageFilenameFilter for a List of Languages.
*
* @param languages
* The List of Languages.
*/
public LanguageFilenameFilter(Set<Language> languages) {
this.languages = languages;
}
/**
* Check if a file should be checked by PMD. {@inheritDoc}
*/
@Override
public boolean accept(File dir, String name) {
// Any source file should have a '.' in its name...
int lastDotIndex = name.lastIndexOf('.');
if (lastDotIndex < 0) {
return false;
}
String extension = name.substring(1 + lastDotIndex).toUpperCase();
for (Language language : languages) {
for (String ext : language.getExtensions()) {
if (extension.equalsIgnoreCase(ext)) {
return true;
}
}
}
return false;
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder("(Extension is one of: ");
for (Language language : languages) {
List<String> extensions = language.getExtensions();
for (int i = 0; i < extensions.size(); i++) {
if (i > 0) {
buffer.append(", ");
}
buffer.append(extensions.get(i));
}
}
buffer.append(')');
return buffer.toString();
}
}