package husacct.validate.task.workspace.importing.xml;
import husacct.validate.domain.validation.Severity;
import husacct.validate.domain.validation.Violation;
import husacct.validate.domain.validation.ViolationHistory;
import husacct.validate.domain.validation.logicalmodule.LogicalModules;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.UUID;
import org.apache.log4j.Logger;
import org.jdom2.Element;
public class ImportViolationsHistory extends XmlImportUtils {
private Logger logger = Logger.getLogger(ImportViolationsHistory.class);
public List<ViolationHistory> importViolationsHistory(Element violationHistoriesElement) {
List<ViolationHistory> violationHistories = new ArrayList<ViolationHistory>();
for (Element violationHistoryElement : violationHistoriesElement.getChildren("violationHistory")) {
List<Severity> severities = new ArrayList<Severity>();
List<Violation> violations = new ArrayList<Violation>();
// severities
for (Element severityElement : violationHistoryElement.getChild("severities").getChildren()) {
String stringUUID = severityElement.getChildText("id");
if (isValidUUID(stringUUID)) {
Severity severity = new Severity(UUID.fromString(severityElement.getChildText("id")), severityElement.getChildText("severityKey"), new Color(Integer.parseInt(severityElement.getChildText("color"))));
severities.add(severity);
} else {
logger.error(String.format("%s is not a valid UUID severity will be ignored", stringUUID));
}
}
// date
final String validationDateString = violationHistoryElement.getAttributeValue("date");
Calendar validationDate = getCalendar(validationDateString);
// description
final String description = violationHistoryElement.getChildText("description");
// violations
for (Element violationElement : violationHistoryElement.getChild("violations").getChildren()) {
final int lineNumber = Integer.parseInt(violationElement.getChildText("lineNumber"));
final String ruleTypeKey = violationElement.getChildText("ruletypeKey");
final String violationTypeKey = violationElement.getChildText("violationtypeKey");
final String classPathFrom = violationElement.getChildText("classPathFrom");
final String classPathTo = violationElement.getChildText("classPathTo");
final LogicalModules logicalModules = getLogicalModules(violationElement.getChild("logicalModules"));
final boolean isIndirect = Boolean.parseBoolean(violationElement.getChildText("isIndirect"));
final String stringCalendar = violationElement.getChildText("occured");
final Calendar date = getCalendar(stringCalendar);
// search the appropiate severity of the violation by the uuid.
final String stringUUID = violationElement.getChildText("severityId");
boolean found = false;
for (Severity severity : severities) {
if (isValidUUID(stringUUID)) {
UUID id = UUID.fromString(stringUUID);
if (id.equals(severity.getId())) {
Violation violation = new Violation()
.setOccured(date)
.setLineNumber(lineNumber)
.setSeverity(severity.clone())
.setRuletypeKey(ruleTypeKey)
.setViolationTypeKey(violationTypeKey)
.setClassPathFrom(classPathFrom)
.setClassPathTo(classPathTo)
.setInDirect(isIndirect)
.setLogicalModules(logicalModules);
violations.add(violation);
found = true;
break;
}
} else {
logger.error(String.format("%s is not a valid severity UUID, violation will not be added", stringUUID));
break;
}
}
if (!found) {
logger.error("Severity for the violation was not found (UUID: " + stringUUID);
}
}
violationHistories.add(new ViolationHistory(violations, severities, validationDate, description));
}
return violationHistories;
}
private boolean isValidUUID(String stringUUID) {
try {
UUID.fromString(stringUUID);
} catch (IllegalArgumentException e) {
return false;
}
return true;
}
}