package jdepend.parse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.Properties; import jdepend.framework.context.JDependContext; import jdepend.framework.log.LogUtil; import jdepend.metadata.profile.defaultvalue.DefaultJavaClassRelationItemProfile; import jdepend.metadata.relationtype.JavaClassRelationTypes; import jdepend.parse.impl.FilteredPackageConfigurator; import jdepend.parse.impl.PackageFilter; /** * 解析配置信息 * * @author wangdg * */ public class ParseConfigurator { private Map<String, String> properties; public transient static final String DEFAULT_PROPERTY_DIR = "conf"; public transient static final String DEFAULT_PROPERTY_FILE = "parse.properties"; private PackageFilter packageFilter; private JavaClassRelationTypes javaClassRelationTypes; private static final String analyzeInnerClasses = "analyzeInnerClasses"; private static final String parseDebug = "parseDebug"; private static final String everyClassBuild = "everyClassBuild"; private static final String ClassFileParser = "ClassFileParser"; private static final String httpInvokeClassNames = "httpInvokeClassNames"; private static final String analyzeModel = "analyzeModel"; public ParseConfigurator() { this(new DefaultJavaClassRelationItemProfile().getJavaClassRelationTypes()); } public ParseConfigurator(JavaClassRelationTypes javaClassRelationTypes) { this(getDefaultPropertyFile()); // 装载全局过滤包列表 this.packageFilter = (new FilteredPackageConfigurator()).getPackageFilter(); this.javaClassRelationTypes = javaClassRelationTypes; } public ParseConfigurator(Map<String, String> p) { this.properties = p; } private ParseConfigurator(File f) { this(loadProperties(f)); } public PackageFilter getPackageFilter() { return packageFilter; } public void setPackageFilter(PackageFilter packageFilter) { this.packageFilter = packageFilter; } public Map<String, String> getProperties() { return properties; } public boolean getAnalyzeInnerClasses() { if (properties.containsKey(analyzeInnerClasses)) { String value = properties.get(analyzeInnerClasses); return new Boolean(value).booleanValue(); } return true; } public boolean getParseDebug() { if (properties.containsKey(parseDebug)) { String value = properties.get(parseDebug); return new Boolean(value).booleanValue(); } return false; } public boolean getEveryClassBuild() { if (properties.containsKey(everyClassBuild)) { String value = properties.get(everyClassBuild); return new Boolean(value).booleanValue(); } return false; } public String getClassFileParser() { if (properties.containsKey(ClassFileParser)) { return properties.get(ClassFileParser); } return null; } public String[] getHttpInvokeClassNames() { if (properties.containsKey(httpInvokeClassNames)) { String value = properties.get(httpInvokeClassNames); return value.split(","); } return null; } public String getAnalyzeModel() { if (properties.containsKey(analyzeModel)) { return properties.get(analyzeModel); } return null; } public JavaClassRelationTypes getJavaClassRelationTypes() { return javaClassRelationTypes; } public void setJavaClassRelationTypes(JavaClassRelationTypes javaClassRelationTypes) { this.javaClassRelationTypes = javaClassRelationTypes; } private static File getDefaultPropertyFile() { String home = JDependContext.getWorkspacePath() + "/" + ParseConfigurator.DEFAULT_PROPERTY_DIR; return new File(home, DEFAULT_PROPERTY_FILE); } private static Map<String, String> loadProperties(File file) { Properties p = new Properties(); InputStream is = null; try { is = new FileInputStream(file); } catch (Exception e) { is = ParseConfigurator.class.getResourceAsStream("/" + DEFAULT_PROPERTY_FILE); if (is == null) { is = ParseConfigurator.class.getResourceAsStream(DEFAULT_PROPERTY_FILE); } } try { if (is != null) { InputStreamReader in = new InputStreamReader(is, "UTF-8"); p.load(in); } else { LogUtil.getInstance(ParseConfigurator.class).systemError("没有读取到parse.properties配置文件。"); } } catch (IOException ignore) { ignore.printStackTrace(); LogUtil.getInstance(ParseConfigurator.class).systemError("读取parse.properties配置文件出错。"); } finally { try { if (is != null) { is.close(); } } catch (IOException ignore) { } } return new HashMap<String, String>((Map) p); } }