package jdepend.framework; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.Properties; import java.util.StringTokenizer; /** * The <code>PropertyConfigurator</code> class contains configuration * information contained 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 PropertyConfigurator { private Properties properties; public static final String DEFAULT_PROPERTY_FILE = "jdepend.properties"; /** * Constructs a <code>PropertyConfigurator</code> instance * containing the properties specified in the file * <code>jdepend.properties</code>, if it exists. */ public PropertyConfigurator() { this(getDefaultPropertyFile()); } /** * Constructs a <code>PropertyConfigurator</code> instance * with the specified property set. * * @param p Property set. */ public PropertyConfigurator(Properties p) { this.properties = p; } /** * Constructs a <code>PropertyConfigurator</code> instance * with the specified property file. * * @param f Property file. */ public PropertyConfigurator(File f) { this(loadProperties(f)); } public Collection getFilteredPackages() { Collection packages = new ArrayList(); Enumeration e = properties.propertyNames(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); if (key.startsWith("ignore")) { String path = properties.getProperty(key); StringTokenizer st = new StringTokenizer(path, ","); while (st.hasMoreTokens()) { String name = (String) st.nextToken(); name = name.trim(); packages.add(name); } } } return packages; } public Collection getConfiguredPackages() { Collection packages = new ArrayList(); Enumeration e = properties.propertyNames(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); if (!key.startsWith("ignore") && (!key.equals("analyzeInnerClasses"))) { String v = properties.getProperty(key); packages.add(new JavaPackage(key, new Integer(v).intValue())); } } return packages; } public boolean getAnalyzeInnerClasses() { String key = "analyzeInnerClasses"; if (properties.containsKey(key)) { String value = properties.getProperty(key); return new Boolean(value).booleanValue(); } return true; } public static File getDefaultPropertyFile() { String home = System.getProperty("user.home"); return new File(home, DEFAULT_PROPERTY_FILE); } public static Properties loadProperties(File file) { Properties p = new Properties(); InputStream is = null; try { is = new FileInputStream(file); } catch (Exception e) { is = PropertyConfigurator.class.getResourceAsStream("/" + DEFAULT_PROPERTY_FILE); } try { if (is != null) { p.load(is); } } catch (IOException ignore) { } finally { try { if (is != null) { is.close(); } } catch (IOException ignore) { } } return p; } }