package jdepend.service.avertcheat.framework;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import jdepend.framework.log.LogUtil;
import jdepend.framework.util.ThreadPool;
import jdepend.metadata.util.JavaClassCollection;
import jdepend.model.JavaClassUnit;
import jdepend.model.result.AnalysisResult;
import jdepend.service.AbstractAnalyseListener;
/**
* 基于类的防作弊器基类
*
* @author wangdg
*
*/
public abstract class JavaClassAvertCheat extends AbstractAnalyseListener implements AvertCheat {
@Override
public void onAnalyse(AnalysisResult result) {
LogUtil.getInstance(this.getClass()).systemLog("开始执行JavaClassAvertCheat:" + this.getName());
this.init(result);
ExecutorService pool = ThreadPool.getPool();
final Map<String, Collection<JavaClassUnit>> unitJavaClasses = JavaClassCollection
.unitTheadClassCollection(result.getClasses());
for (final String unit : unitJavaClasses.keySet()) {
pool.execute(new Runnable() {
@Override
public void run() {
for (JavaClassUnit javaClass : unitJavaClasses.get(unit)) {
handle(javaClass);
}
}
});
}
ThreadPool.awaitTermination(pool);
LogUtil.getInstance(this.getClass()).systemLog("结束执行JavaClassAvertCheat:" + this.getName());
}
protected abstract void handle(JavaClassUnit javaClassUnit);
protected void init(AnalysisResult result) {
}
}