package husacct.validate.task.imexporting.exporting; import husacct.common.enums.ExtensionTypes; import husacct.common.imexport.XmlConversionUtils; import husacct.externalinterface.ViolationImExportDTO; import husacct.validate.domain.validation.Violation; import husacct.validate.domain.validation.internaltransferobjects.ViolationsPerSeverity; import husacct.validate.task.TaskServiceImpl; import husacct.validate.task.imexporting.reporting.Report; import husacct.validate.task.imexporting.reporting.ReportWriter; import java.io.FileWriter; import java.io.IOException; import org.jdom2.Comment; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; public class ExportAllViolations extends ReportWriter { public ExportAllViolations(Report report, String path, String fileName, TaskServiceImpl taskServiceImpl) { super(report, path, fileName, ExtensionTypes.XML, taskServiceImpl); } @Override public void createReport() throws IOException { Document document = createReportDocument(); XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); FileWriter fileWriter = new FileWriter(getFileName()); outputter.output(document, fileWriter); fileWriter.close(); } public Document createReportDocument() { Document document = new Document(); Element reportElement = new Element("report"); document.setRootElement(reportElement); Element projectName = new Element("projectName"); projectName.setText(report.getProjectName()); reportElement.addContent(projectName); Element projectVersion = new Element("version"); projectVersion.setText(report.getVersion()); reportElement.addContent(projectVersion); Element totalViolations = new Element("totalViolations"); totalViolations.setText("" + report.getViolations().getValue().size()); reportElement.addContent(totalViolations); Element violationGeneratedOn = new Element("violationsGeneratedOn"); violationGeneratedOn.setText(report.getFormattedDate()); reportElement.addContent(violationGeneratedOn); Element violationsPerSeverity = new Element("violationsPerSeverity"); // violationsPerSeverity.setAttribute(new Attribute("totalViolations", "" + report.getViolations().getValue().size())); for (ViolationsPerSeverity violationPerSeverity : report.getViolationsPerSeverity()) { Element violationPerSeverityElement = new Element(violationPerSeverity.getSeverity().getSeverityKey()); violationPerSeverityElement.setText("" + violationPerSeverity.getAmount()); violationsPerSeverity.addContent(violationPerSeverityElement); } reportElement.addContent(violationsPerSeverity); Element violations = new Element("violations"); reportElement.addContent(violations); Comment comment1 = new Comment("from = path of from-class"); violations.addContent(comment1); Comment comment2 = new Comment("to = path of to-class"); violations.addContent(comment2); Comment comment3 = new Comment("line = Line in the source of the fromClass that contains the violating code construct"); violations.addContent(comment3); Comment comment4 = new Comment("depType = DependencyType (for dependency-related rule types) or visibilityType, etc."); violations.addContent(comment4); Comment comment5 = new Comment("depSubType = DependencySubType (for dependency-related rule types)"); violations.addContent(comment5); Comment comment6 = new Comment("indirect = Direct/indirect dependency (for dependency-related rule types)"); violations.addContent(comment6); Comment comment7 = new Comment("severity = Key of the severity"); violations.addContent(comment7); Comment comment8 = new Comment("message = Short explanation of the violated rule"); violations.addContent(comment8); Comment comment9 = new Comment("The following three identify the violated rule: ruleTypeKey + logicalModuleFrom + logicalModuleTo"); violations.addContent(comment9); Comment comment10 = new Comment("ruleType = Identifier of RuleType; the type of violated rule"); violations.addContent(comment10); Comment comment11 = new Comment("fromMod = ModuleFrom of the violated rule; not of the from-to software units"); violations.addContent(comment11); Comment comment12 = new Comment("toMod = ModuleTo of the violated rule; not of the from-to software units"); violations.addContent(comment12); for (Violation violation : report.getViolations().getValue()) { ViolationImExportDTO violationImExportDTO = new ViolationImExportDTO(); violationImExportDTO.setFrom(violation.getClassPathFrom()); violationImExportDTO.setTo(violation.getClassPathTo()); violationImExportDTO.setLine(violation.getLinenumber()); violationImExportDTO.setDepType(violation.getViolationTypeKey()); violationImExportDTO.setDepSubType(violation.getDependencySubType()); violationImExportDTO.setFrom(violation.getClassPathFrom()); violationImExportDTO.setIndirect(violation.getIsIndirect()); violationImExportDTO.setSeverity(violation.getSeverity().getSeverityKey()); violationImExportDTO.setMessage(taskServiceImpl.getMessage(violation)); violationImExportDTO.setRuleType(violation.getRuletypeKey()); violationImExportDTO.setFromMod(violation.getLogicalModules().getLogicalModuleFrom().getLogicalModulePath()); violationImExportDTO.setToMod(violation.getLogicalModules().getLogicalModuleTo().getLogicalModulePath()); Element xmlViolation = XmlConversionUtils.writeDtoToXml("violation", violationImExportDTO); violations.addContent(xmlViolation); } return document; } }