package jdepend.client.ui.analyzer;
import java.io.IOException;
import java.lang.reflect.Method;
import jdepend.client.report.ui.SelectClassDialog;
import jdepend.metadata.JavaClass;
import jdepend.model.JDependUnitMgr;
import jdepend.model.result.AnalysisResult;
import jdepend.util.analyzer.framework.Analyzer;
import jdepend.util.analyzer.framework.AnalyzerException;
import jdepend.util.analyzer.framework.AnalyzerExecutorListener;
import jdepend.util.analyzer.framework.AnalyzerWorker;
import jdepend.util.analyzer.framework.ClassAttribute;
public class AnalyzerUIWrapper implements Analyzer {
private Analyzer analyzer;
public AnalyzerUIWrapper(Analyzer analyzer) {
this.analyzer = analyzer;
}
public Analyzer getAnalyzer() {
return analyzer;
}
@Override
public int compareTo(Analyzer o) {
return analyzer.compareTo(((AnalyzerUIWrapper) o).analyzer);
}
@Override
public String getName() {
return analyzer.getName();
}
@Override
public String getTip() {
return analyzer.getTip();
}
@Override
public String getExplain() {
return analyzer.getExplain();
}
@Override
public String getType() {
return analyzer.getType();
}
@Override
public int getHeat() {
return analyzer.getHeat();
}
@Override
public void execute(final AnalysisResult result) throws AnalyzerException {
Method[] methods = analyzer.getClass().getDeclaredMethods();
Method theMethod = null;
for (final Method method : methods) {
if (method.getAnnotation(ClassAttribute.class) != null) {
theMethod = method;
break;
}
}
if (theMethod != null) {
final Method theMethod2 = theMethod;
SelectClassDialog d = new SelectClassDialog() {
@Override
protected void callback() {
JavaClass javaClass = JDependUnitMgr.getInstance().getResult().getTheClass(current).getJavaClass();
try {
theMethod2.invoke(analyzer, javaClass);
analyzer.execute(result);
} catch (Exception e) {
e.printStackTrace();
}
}
};
d.setModal(true);
d.setVisible(true);
} else {
analyzer.execute(result);
}
}
@Override
public void setWorker(AnalyzerWorker worker) {
this.analyzer.setWorker(worker);
}
@Override
public void setListener(AnalyzerExecutorListener listener) {
this.analyzer.setListener(listener);
}
@Override
public int getMaxProgress(AnalysisResult result) {
return this.analyzer.getMaxProgress(result);
}
@Override
public void init() throws AnalyzerException {
this.analyzer.init();
}
@Override
public void release() throws AnalyzerException {
this.analyzer.release();
}
@Override
public void save() throws IOException {
this.analyzer.save();
}
@Override
public boolean needSave() {
return this.analyzer.needSave();
}
}