01: package jdepend.framework;
02:
03: import java.io.*;
04: import java.util.*;
05:
06: /**
07: * The <code>PackageFilter</code> class is used to filter imported
08: * package names.
09: * <p>
10: * The default filter contains any packages declared in the
11: * <code>jdepend.properties</code> file, if such a file exists
12: * either in the user's home directory or somewhere in the classpath.
13: *
14: * @author <b>Mike Clark</b>
15: * @author Clarkware Consulting, Inc.
16: */
17:
18: public class PackageFilter {
19:
20: private Collection filtered;
21:
22: /**
23: * Constructs a <code>PackageFilter</code> instance containing
24: * the filters specified in the <code>jdepend.properties</code> file,
25: * if it exists.
26: */
27: public PackageFilter() {
28: this (new ArrayList());
29: PropertyConfigurator config = new PropertyConfigurator();
30: addPackages(config.getFilteredPackages());
31: }
32:
33: /**
34: * Constructs a <code>PackageFilter</code> instance containing
35: * the filters contained in the specified file.
36: *
37: * @param f Property file.
38: */
39: public PackageFilter(File f) {
40: this (new ArrayList());
41: PropertyConfigurator config = new PropertyConfigurator(f);
42: addPackages(config.getFilteredPackages());
43: }
44:
45: /**
46: * Constructs a <code>PackageFilter</code> instance with the
47: * specified collection of package names to filter.
48: *
49: * @param packageNames Package names to filter.
50: */
51: public PackageFilter(Collection packageNames) {
52: filtered = new ArrayList();
53: addPackages(packageNames);
54: }
55:
56: /**
57: * Returns the collection of filtered package names.
58: *
59: * @return Filtered package names.
60: */
61: public Collection getFilters() {
62: return filtered;
63: }
64:
65: /**
66: * Indicates whether the specified package name passes this package filter.
67: *
68: * @param packageName Package name.
69: * @return <code>true</code> if the package name should be included;
70: * <code>false</code> otherwise.
71: */
72: public boolean accept(String packageName) {
73: for (Iterator i = getFilters().iterator(); i.hasNext();) {
74: String nameToFilter = (String) i.next();
75: if (packageName.startsWith(nameToFilter)) {
76: return false;
77: }
78: }
79:
80: return true;
81: }
82:
83: public void addPackages(Collection packageNames) {
84: for (Iterator i = packageNames.iterator(); i.hasNext();) {
85: addPackage((String) i.next());
86: }
87: }
88:
89: public void addPackage(String packageName) {
90: if (packageName.endsWith("*")) {
91: packageName = packageName.substring(0,
92: packageName.length() - 1);
93: }
94:
95: if (packageName.length() > 0) {
96: getFilters().add(packageName);
97: }
98: }
99: }
|