package jdepend.framework;
import java.io.*;
import java.util.*;
/**
* The <code>PackageFilter</code> class is used to filter imported
* package names.
* <p>
* The default filter contains any packages declared in the
* <code>jdepend.properties</code> file, if such a file exists
* either in the user's home directory or somewhere in the classpath.
*
* @author <b>Mike Clark</b>
* @author Clarkware Consulting, Inc.
*/
public class PackageFilter {
private Collection filtered;
/**
* Constructs a <code>PackageFilter</code> instance containing
* the filters specified in the <code>jdepend.properties</code> file,
* if it exists.
*/
public PackageFilter() {
this(new ArrayList());
PropertyConfigurator config = new PropertyConfigurator();
addPackages(config.getFilteredPackages());
}
/**
* Constructs a <code>PackageFilter</code> instance containing
* the filters contained in the specified file.
*
* @param f Property file.
*/
public PackageFilter(File f) {
this(new ArrayList());
PropertyConfigurator config = new PropertyConfigurator(f);
addPackages(config.getFilteredPackages());
}
/**
* Constructs a <code>PackageFilter</code> instance with the
* specified collection of package names to filter.
*
* @param packageNames Package names to filter.
*/
public PackageFilter(Collection packageNames) {
filtered = new ArrayList();
addPackages(packageNames);
}
/**
* Returns the collection of filtered package names.
*
* @return Filtered package names.
*/
public Collection getFilters() {
return filtered;
}
/**
* Indicates whether the specified package name passes this package filter.
*
* @param packageName Package name.
* @return <code>true</code> if the package name should be included;
* <code>false</code> otherwise.
*/
public boolean accept(String packageName) {
for (Iterator i = getFilters().iterator(); i.hasNext();) {
String nameToFilter = (String)i.next();
if (packageName.startsWith(nameToFilter)) {
return false;
}
}
return true;
}
public void addPackages(Collection packageNames) {
for (Iterator i = packageNames.iterator(); i.hasNext();) {
addPackage((String)i.next());
}
}
public void addPackage(String packageName) {
if (packageName.endsWith("*")) {
packageName = packageName.substring(0, packageName.length() - 1);
}
if (packageName.length() > 0) {
getFilters().add(packageName);
}
}
}