0dba93ea2a647e382b5930a1263c3028e4f83872
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / structure / Filter.java
1 package eu.svjatoslav.inspector.java.structure;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import eu.svjatoslav.commons.string.WildCardMatcher;
7
8 public class Filter {
9
10         /**
11          * This class implements filter of classes that will be included or excluded
12          * from resulting graph.
13          * 
14          * Filtering is done by lists of whitelist and blacklist patterns using
15          * wildcards.
16          * 
17          * Filtering logic is such that if at least single whitelist entry is
18          * defined then every class that is not whitelisted is automatically
19          * excluded from graph.
20          * 
21          * Otherwise every class in included in graph that is not blacklisted.
22          */
23
24         private static final List<String> blacklistClassPatterns = new ArrayList<String>();
25
26         private static final List<String> whitelistClassPatterns = new ArrayList<String>();
27
28         public void blacklistClassPattern(final String pattern) {
29                 blacklistClassPatterns.add(pattern);
30         }
31
32         public boolean isClassShown(final String className) {
33                 for (final String pattern : blacklistClassPatterns)
34                         if (WildCardMatcher.match(className, pattern))
35                                 return false;
36
37                 if (!whitelistClassPatterns.isEmpty()) {
38                         for (final String pattern : whitelistClassPatterns)
39                                 if (WildCardMatcher.match(className, pattern))
40                                         return true;
41                         return false;
42                 }
43
44                 return true;
45         }
46
47         public void whitelistClassPattern(final String pattern) {
48                 whitelistClassPatterns.add(pattern);
49         }
50
51 }