package jdepend.client.ui.command;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JComponent;
import jdepend.client.core.command.CommandAdapter;
import jdepend.client.core.command.CommandAdapterMgr;
import jdepend.client.ui.JDependCooper;
import jdepend.client.ui.result.framework.ResultPanel;
import jdepend.client.ui.result.panel.JDependReport;
import jdepend.core.score.ScoreFacade;
import jdepend.framework.config.PropertyConfigurator;
import jdepend.framework.exception.JDependException;
import jdepend.framework.log.LogUtil;
import jdepend.framework.ui.action.AsynAction;
import jdepend.framework.ui.component.JDependFrame;
import jdepend.model.JDependUnitMgr;
import jdepend.model.result.AnalysisResult;
public final class CommandAction extends AsynAction {
private JDependCooper frame;
private CommandAdapter adapter;
private JDependReport reportRender;
private AnalysisResult result;
private String group;
private String command;
public CommandAction(JDependFrame frame, String group, String command) throws JDependException {
super(frame, command);
this.frame = (JDependCooper) frame;
this.group = group;
this.command = command;
this.adapter = CommandAdapterMgr.getInstance().getTheCommandAdapter(group, command);
}
@Override
protected void analyse(ActionEvent e) throws JDependException {
result = adapter.execute();
// 创建UI结果
this.addResults(reportRender.createReport(result));
}
@Override
protected void showResultLater() {
// 保存分数
if ((new PropertyConfigurator()).isAutoSaveScore()) {
try {
ScoreFacade.saveScore(result);
} catch (JDependException e1) {
e1.printStackTrace();
addResults(createErrorResult(e1));
}
}
// 输出日志
Map<String, JComponent> logReport = new HashMap<String, JComponent>();
if (adapter.getLog() != null && adapter.getLog().length() != 0) {
logReport.put("log", ResultPanel.createTextViewer(adapter.getLog()));
}
frame.getResultPanel().appendResult(logReport);
// 刷新TODOList
frame.getPropertyPanel().showTODOList();
// 清空缓存
adapter.clear();
reportRender.clear();
}
@Override
protected void stopProgressLater() {
frame.showStatusMessage("分析了 "
+ JDependUnitMgr.getInstance().getResult().getRunningContext().getJavaClasses().size() + " classes "
+ JDependUnitMgr.getInstance().getResult().getRunningContext().getJavaPackages().size() + " packages.");
}
@Override
protected void beforeAnalyse() throws JDependException {
frame.clearPriorResult();
LogUtil.getInstance(CommandPanel.class).systemLog("准备运行环境");
adapter.addParseListener(frame);
reportRender = new JDependReport(group, command);
reportRender.setFrame(frame);
reportRender.addReportListener(frame);
}
@Override
protected int getProcess() throws JDependException {
return adapter.getTaskSize();
}
}