package husacct.control.task;
import husacct.ServiceProvider;
import husacct.common.dto.AnalysisStatisticsDTO;
import husacct.common.dto.ApplicationDTO;
import husacct.common.dto.ProjectDTO;
import husacct.common.dto.SoftwareUnitDTO;
import husacct.control.presentation.util.LoadingDialog;
import java.util.ArrayList;
import java.util.Date;
import org.apache.log4j.Logger;
public class AnalyseTask implements Runnable {
private final Logger logger = Logger.getLogger(AnalyseTask.class);
private final MainController mainController;
private final ApplicationDTO applicationDTO;
public AnalyseTask(MainController mainController, ApplicationDTO applicationDTO) {
this.applicationDTO = applicationDTO;
this.mainController = mainController;
}
@Override
public void run() {
try {
if ((this.applicationDTO.projects.size() > 0) && (this.applicationDTO.projects.get(0).paths.size() > 0)) {
this.mainController.getStateController().setAnalysing(true);
Thread.sleep(1);
LoadingDialog loadingDialog = mainController.getApplicationController().getCurrentLoadingDialog();
if (loadingDialog != null) {
loadingDialog.setAmountOfProcesses(this.applicationDTO.projects.size());
}
for (int i = 0; i < this.applicationDTO.projects.size(); i++) {
ProjectDTO currentProject = this.applicationDTO.projects.get(i);
if (currentProject.paths.size() > 0) {
if (loadingDialog != null) {
loadingDialog.setCurrentProcess(i);
}
this.logger.info(new Date().toString() + " Control-AnalyseTask is Starting: Analyse project " + currentProject);
mainController.getActionLogController().addAction("Analysing project " + currentProject);
ServiceProvider.getInstance().getAnalyseService().analyseApplication(currentProject);
// Add analysed root modules to project
currentProject.analysedModules = new ArrayList<SoftwareUnitDTO>();
SoftwareUnitDTO[] analysedRootModules = ServiceProvider.getInstance().getAnalyseService().getSoftwareUnitsInRoot();
for (SoftwareUnitDTO analysedModule : analysedRootModules) {
currentProject.analysedModules.add(analysedModule);
}
// Update project with analysedRootModules
this.applicationDTO.projects.remove(i);
this.applicationDTO.projects.add(i, currentProject);
}
}
mainController.getWorkspaceController().getCurrentWorkspace().setApplicationData(applicationDTO);
ServiceProvider.getInstance().getDefineService().analyze();
AnalysisStatisticsDTO statistics = ServiceProvider.getInstance().getAnalyseService().getAnalysisStatistics(null);
logger.info(new Date().toString() + " Finished: Analyse application. Added: " + statistics.totalNrOfPackages + " packages; " + statistics.totalNrOfClasses + " classes; " + statistics.totalNrOfDependencies + " dependencies");
mainController.getActionLogController().addAction("Analysing finished, added: " + statistics.totalNrOfPackages + " packages; " + statistics.totalNrOfClasses + " classes; " + statistics.totalNrOfDependencies + " dependencies");
String workspaceName = mainController.getWorkspaceController().getCurrentWorkspace().getName();
ServiceProvider.getInstance().getAnalyseService().logHistory(applicationDTO, workspaceName);
if (!mainController.getStateController().isAnalysing()) {
ServiceProvider.getInstance().resetAnalyseService();
}
this.mainController.getStateController().setAnalysing(false);
this.mainController.getViewController().showApplicationOverviewGui();
} else {
logger.info(new Date().toString() + " No project specified, or no project path specified");
}
} catch (InterruptedException exception) {
this.logger.debug(" Exception: " + exception.getMessage());
ServiceProvider.getInstance().resetAnalyseService();
this.mainController.getStateController().setAnalysing(false);
}
}
}