package org.ovirt.engine.core.utils.violation; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import org.ovirt.engine.core.utils.ReplacementUtils; public final class DetailedViolation implements ViolationRenderer { private final String violationName; private final Map<String, ViolatingEntityDetails> violations; public DetailedViolation(String violationName) { Objects.requireNonNull(violationName, "violationName cannot be null"); this.violationName = violationName; this.violations = new LinkedHashMap<>(); } public void add(String violatingEntity, String detailName, String detailValue) { ViolatingEntityDetails violatingEntityDetails = violations.get(violatingEntity); if (violatingEntityDetails == null) { violatingEntityDetails = new ViolatingEntityDetails(detailName, detailValue); violations.put(violatingEntity, violatingEntityDetails); } else { violatingEntityDetails.addDetail(detailName, detailValue); } } @Override public List<String> render() { final List<String> violationMessages = new ArrayList<>(); for (Entry<String, ViolatingEntityDetails> violationEntry : violations.entrySet()) { final String violatingEntity = violationEntry.getKey(); final ViolatingEntityDetails violationEntityDetails = violationEntry.getValue(); violationMessages.add(violationName); violationMessages.add(ReplacementUtils.createSetVariableString(violationName + Violation.LIST_SUFFIX, violatingEntity)); violationMessages.addAll(violationEntityDetails.render()); } return violationMessages; } }