package jdepend.client.core.analyzer; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import jdepend.framework.exception.JDependException; import jdepend.framework.log.LogUtil; import jdepend.util.analyzer.framework.Analyzer; import jdepend.util.analyzer.framework.Analyzers; /** * 客户端分析管理器 * * @author wangdg * */ public final class AnalyzerMgr { private static AnalyzerMgr mgr; private List<String> types; private Map<String, List<Analyzer>> analyzers; private AnalyzerMgr() { this.init(); } public static AnalyzerMgr getInstance() { if (mgr == null) { mgr = new AnalyzerMgr(); } return mgr; } public void refresh() { this.init(); } public void save() { for (String type : types) { for (Analyzer analyzer : this.analyzers.get(type)) { if (!analyzer.needSave()) { continue; } LogUtil.getInstance(AnalyzerMgr.class).systemLog("保存分析器[" + analyzer.getName() + "]配置。。。"); try { analyzer.save(); } catch (IOException e) { e.printStackTrace(); } } } } protected void init() { this.analyzers = Analyzers.getStaticAnalyzers(); this.types = new ArrayList<String>(); for (String type : analyzers.keySet()) { this.types.add(type); for (Analyzer analyzer : analyzers.get(type)) { try { analyzer.init(); } catch (JDependException e) { e.printStackTrace(); LogUtil.getInstance(AnalyzerMgr.class).systemError("分析器[" + analyzer.getName() + "]启动失败"); } } } // 按热度排序 for (String type : types) { Collections.sort(this.analyzers.get(type)); } } public void delete(String className) throws JDependException { for (String type : this.types) { for (Analyzer analyzer : this.analyzers.get(type)) { if (analyzer.getClass().getName().equals(className)) { analyzer.release(); this.getAnalyzers(type).remove(analyzer); break; } } } } public List<String> getTypes() { return this.types; } public List<Analyzer> getAnalyzers(String type) { return this.analyzers.get(type); } public Map<String, List<Analyzer>> getAnalyzers() { return analyzers; } public boolean containsAnalyzer(Analyzer analyzer) { for (String type : this.analyzers.keySet()) { for (Analyzer obj : this.analyzers.get(type)) { if (obj.equals(analyzer)) { return true; } } } return false; } public void addAnalyzer(Analyzer analyzer) { this.analyzers.get(analyzer.getType()).add(analyzer); } }