package husacct.control.task; import husacct.ServiceProvider; import husacct.analyse.IAnalyseService; import husacct.common.dto.ApplicationDTO; import husacct.common.dto.ProjectDTO; import husacct.common.dto.SoftwareUnitDTO; import husacct.control.presentation.util.ExportImportDialog; import husacct.control.presentation.util.Filename; import husacct.control.task.resources.IResource; import husacct.control.task.resources.ResourceFactory; import husacct.externalinterface.ViolationReportDTO; import husacct.validate.IValidateService; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import org.apache.log4j.Logger; import org.jdom2.Document; import org.jdom2.Element; public class ExportImportController { private MainController mainController; private Logger logger = Logger.getLogger(ExportImportController.class); public ExportImportController(MainController mainController){ this.mainController = mainController; } public void showExportAnalysisModelGui() { new ExportImportDialog(mainController, "ExportAnalysisModel"); } public void showExportArchitectureGui() { new ExportImportDialog(mainController, "ExportArchitecture"); } public void showExportViolationsGui() { new ExportImportDialog(mainController, "ExportViolations"); } public void showReportArchitectureGui(){ new ExportImportDialog(mainController, "ReportArchitecture"); } public void showReportDependenciesGui(){ new ExportImportDialog(mainController, "ReportDependencies"); } public void showReportViolationsGui() { new ExportImportDialog(mainController, "ReportViolations"); } public String showExportImportMojoGUI(boolean isExport) { String param = ""; if(isExport){ param = "ExportMojo"; } else{ param = "ImportMojo"; } ExportImportDialog dialog = new ExportImportDialog(mainController, "skipConstructor"); return dialog.SARExportImportDialog(mainController, param); } public void exportAnalysisModel(File file){ HashMap<String, Object> resourceData = new HashMap<String, Object>(); resourceData.put("file", file); IResource xmlResource = ResourceFactory.get("xml"); try { Element logicalData = ServiceProvider.getInstance().getAnalyseService().exportAnalysisModel(); Document doc = new Document(logicalData); xmlResource.save(doc, resourceData); } catch (Exception e) { if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to export analysis model: " + e.getMessage()); } else { logger.error("Unable to export analysis model: " + e.getMessage()); } } } public void exportArchitecture(File file){ HashMap<String, Object> resourceData = new HashMap<String, Object>(); resourceData.put("file", file); IResource xmlResource = ResourceFactory.get("xml"); try { Element logicalData = ServiceProvider.getInstance().getDefineService().exportIntendedArchitecture(); Document doc = new Document(logicalData); xmlResource.save(doc, resourceData); } catch (Exception e) { if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to export intended architecture: " + e.getMessage()); } else { logger.error("Unable to export intended architecture: " + e.getMessage()); } } } public void exportViolations(File file){ Filename filename = new Filename(file, '/', '.'); IValidateService validateService = ServiceProvider.getInstance().getValidateService(); try { validateService.exportViolations(file, filename.getExtension()); logger.info(String.format("Export violations to %s", file.getAbsolutePath())); } catch (Exception e){ if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to export violations: " + e.getMessage()); } else { logger.error("Unable to export violations: " + e.getMessage()); } } } public void reportArchitecture(File file){ try { ServiceProvider.getInstance().getDefineService().reportArchitecture(file.getAbsolutePath()); } catch (Exception e){ if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to create report: " + e.getMessage()); } else { logger.error("Unable to create report: " + e.getMessage()); } } } public void reportDependencies(File file){ IAnalyseService analyseService = ServiceProvider.getInstance().getAnalyseService(); try { analyseService.createDependencyReport(file.getAbsolutePath()); } catch (Exception e){ if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to create report: " + e.getMessage()); } else { logger.error("Unable to create report: " + e.getMessage()); } } } public String[] getExportExtensionsValidate(){ IValidateService validateService = ServiceProvider.getInstance().getValidateService(); return validateService.getExportExtentions(); } public void showImportArchitectureGui(){ new ExportImportDialog(mainController, "ImportArchitecture"); } public void showImportAnalyseModelGui(){ new ExportImportDialog(mainController, "ImportAnalysisModel"); } public void importArchitecture(File file){ HashMap<String, Object> resourceData = new HashMap<String, Object>(); resourceData.put("file", file); IResource xmlResource = ResourceFactory.get("xml"); try { Document doc = xmlResource.load(resourceData); Element logicalData = doc.getRootElement(); ServiceProvider.getInstance().getDefineService().importIntendedArchitecture(logicalData); } catch (Exception e) { if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to export intended architecture: " + e.getMessage()); } else { logger.error("Unable to export intended architecture: " + e.getMessage()); } } } public ViolationReportDTO getViolationReportData(File previousViolationsFile, boolean exportAllViolations, boolean exportNewViolations) { ViolationReportDTO violationReportDTO = new ViolationReportDTO(); IValidateService validateService = ServiceProvider.getInstance().getValidateService(); if (previousViolationsFile == null) { violationReportDTO = validateService.getViolationReportData(null, exportAllViolations, exportNewViolations); } else { HashMap<String, Object> resourceData = new HashMap<String, Object>(); resourceData.put("file", previousViolationsFile); IResource xmlResource = ResourceFactory.get("xml"); try { Document doc = xmlResource.load(resourceData); violationReportDTO = validateService.getViolationReportData(doc, exportAllViolations, exportNewViolations); } catch (Exception e){ if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to identify new violations based on previousViolationsFile: " + e.getMessage()); } else { //e.printStackTrace(); logger.error("Unable to identify new violations based on previousViolationsFile: " + e.getMessage()); } } } return violationReportDTO; } public void importAnalysisModel(File file){ HashMap<String, Object> resourceData = new HashMap<String, Object>(); resourceData.put("file", file); IResource xmlResource = ResourceFactory.get("xml"); try { Document doc = xmlResource.load(resourceData); Element logicalData = doc.getRootElement(); ServiceProvider.getInstance().getAnalyseService().importAnalysisModel(logicalData); ApplicationDTO applicationDTO = ServiceProvider.getInstance().getDefineService().getApplicationDetails(); for (int i = 0; i < applicationDTO.projects.size(); i++) { ProjectDTO currentProject = applicationDTO.projects.get(i); if (currentProject.paths.size() > 0) { // 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 applicationDTO.projects.remove(i); applicationDTO.projects.add(i, currentProject); } } mainController.getWorkspaceController().getCurrentWorkspace().setApplicationData(applicationDTO); ServiceProvider.getInstance().getDefineService().analyze(); mainController.getViewController().showApplicationOverviewGui(); } catch (Exception e) { if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { ServiceProvider.getInstance().getControlService().showErrorMessage("Unable to import analysis model: " + e.getMessage()); } else { logger.error("Unable to import analysis model: " + e.getMessage()); } } } }