LanguageFilenameFilter.java
01 package net.sourceforge.pmd.lang;
02 
03 import java.io.File;
04 import java.io.FilenameFilter;
05 import java.util.Collections;
06 import java.util.List;
07 
08 /**
09  * This is an implementation of the {@link FilenameFilter} interface which
10  * compares a file against a collection of Languages to see if the any are
11  * applicable.
12  *
13  @author Pieter_Van_Raemdonck - Application Engineers NV/SA - www.ae.be
14  */
15 public class LanguageFilenameFilter implements FilenameFilter {
16 
17     private final List<Language> languages;
18 
19     /**
20      * Create a LanguageFilenameFilter for a single Language.
21      @param language The Language.
22      */
23     public LanguageFilenameFilter(Language language) {
24   this(Collections.singletonList(language));
25     }
26 
27     /**
28      * Create a LanguageFilenameFilter for a List of Languages.
29      @param languages The List of Languages.
30      */
31     public LanguageFilenameFilter(List<Language> languages) {
32   this.languages = languages;
33     }
34 
35     /**
36      * Check if a file should be checked by PMD.
37      * {@inheritDoc}
38      */
39     public boolean accept(File dir, String name) {
40   // Any source file should have a '.' in its name...
41   int lastDotIndex = name.lastIndexOf('.');
42   if (lastDotIndex < 0) {
43       return false;
44   }
45 
46   String extension = name.substring(+ lastDotIndex).toUpperCase();
47   for (Language language : languages) {
48       for (String ext : language.getExtensions()) {
49     if (extension.equalsIgnoreCase(ext)) {
50         return true;
51     }
52       }
53   }
54   return false;
55     }
56 
57     public String toString() {
58   StringBuilder buffer = new StringBuilder("(Extension is one of: ");
59   for (Language language : languages) {
60       List<String> extensions = language.getExtensions();
61       for (int i = 0; i < extensions.size(); i++) {
62     if (i > 0) {
63         buffer.append(", ");
64     }
65     buffer.append(extensions.get(i));
66       }
67   }
68   buffer.append(")");
69   return buffer.toString();
70     }
71 }