package husacct.analyse.task;
import java.util.Date;
import org.apache.log4j.Logger;
import org.jdom2.Element;
import husacct.analyse.domain.IModelPersistencyService;
import husacct.analyse.domain.IModelQueryService;
import husacct.analyse.task.analyse.ApplicationAnalyser;
import husacct.analyse.task.reconstruct.ReconstructArchitecture;
import husacct.analyse.task.reconstruct.dto.ReconstructArchitectureDTO;
import husacct.common.dto.AnalysisStatisticsDTO;
import husacct.common.dto.ApplicationDTO;
import husacct.common.dto.DependencyDTO;
import husacct.common.dto.SoftwareUnitDTO;
public class AnalyseTaskControl {
private boolean isAnalysed;
private ApplicationAnalyser analyserService;
private IModelPersistencyService persistencyService;
private IModelQueryService queryService;
private DependencyReportController reportController;
private HistoryLogger historyLogger;
private ReconstructArchitecture reconstructArchitecture;
private final Logger logger = Logger.getLogger(AnalyseTaskControl.class);
public AnalyseTaskControl(IModelPersistencyService persistencyService, IModelQueryService queryService) {
this.isAnalysed = false;
this.persistencyService = persistencyService;
this.queryService = queryService;
this.analyserService = new ApplicationAnalyser();
this.reportController = new DependencyReportController(queryService);
this.historyLogger = new HistoryLogger();
}
public void analyseApplication(String[] paths, String programmingLanguage) {
queryService.clearModel();
analyserService.analyseApplication(paths, programmingLanguage);
queryService.buildCache();
this.isAnalysed = true;
// this.logger.info(new Date().toString() + " Finished: Analyse Application; ServiceListeners notified; State isAnalysed = true");
}
public Element exportAnalysisModel() {
this.logger.info(new Date().toString() + " Starting: Export Analysis Model");
Element exportElement = persistencyService.exportAnalysisModel();
this.logger.info(new Date().toString() + " Finished: Export Analysis Model");
return exportElement;
}
public String[] getAvailableLanguages() {
return analyserService.getAvailableLanguages();
}
public void importAnalysisModel(Element analyseElement) {
this.logger.info(new Date().toString() + " Starting: Import Analysis Model");
persistencyService.importAnalysisModel(analyseElement);
this.isAnalysed = true;
this.logger.info(new Date().toString() + " Finished: Import Analysis Model; State isAnalysed = true");
}
public boolean isAnalysed() {
return this.isAnalysed;
}
public void logHistory(ApplicationDTO applicationDTO, String workspaceName) {
historyLogger.logHistory(applicationDTO, workspaceName);
}
public void createDependencyReport(String path) {
reportController.createDependencyReport(path);
}
//method for RecontructArchitecture
public void reconstructArchitecture_Initiate() {
reconstructArchitecture = new ReconstructArchitecture(queryService);
}
public void reconstructArchitecture_Execute(ReconstructArchitectureDTO dto){
if (reconstructArchitecture == null) {
reconstructArchitecture = new ReconstructArchitecture(queryService);
}
reconstructArchitecture.reconstructArchitecture_Execute(dto);
}
public boolean getAlgorithmSucces(){
return reconstructArchitecture.getAlgorithmSucces();
}
public void reconstructArchitecture_Reverse(){
reconstructArchitecture.reverseReconstruction();
}
public void reconstructArchitecture_ClearAll(){
reconstructArchitecture.clearAllModules();
}
//Methods for AnalyseUIController
public SoftwareUnitDTO[] getSoftwareUnitsInRoot() {
return queryService.getSoftwareUnitsInRoot();
}
public SoftwareUnitDTO[] getChildUnitsOfSoftwareUnit(String from) {
return queryService.getChildUnitsOfSoftwareUnit(from);
}
public DependencyDTO[] getDependenciesFromSoftwareUnitToSoftwareUnit(String pathFrom, String pathTo) {
return queryService.getDependenciesFromSoftwareUnitToSoftwareUnit(pathFrom, pathTo);
}
public AnalysisStatisticsDTO getAnalysisStatistics(SoftwareUnitDTO selectedModule) {
return queryService.getAnalysisStatistics(selectedModule);
}
public ReconstructArchitectureDTO getReconstructArchitectureDTO(String approachId){
ReconstructArchitecture reconstructor = new ReconstructArchitecture(queryService);
return reconstructor.getReconstructArchitectureDTO(approachId);
}
}