package husacct.validate.domain.configuration;
import husacct.validate.domain.exception.SeverityChangedException;
import husacct.validate.domain.exception.SeverityNotFoundException;
import husacct.validate.domain.validation.DefaultSeverities;
import husacct.validate.domain.validation.Severity;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
class SeverityConfigRepository {
private List<Severity> currentSeverities;
private final List<Severity> defaultSeverities;
public SeverityConfigRepository() {
this.currentSeverities = new ArrayList<Severity>();
this.defaultSeverities = generateDefaultSeverities();
initializeCurrentSeverities();
}
void restoreToDefault() {
initializeCurrentSeverities();
}
private void initializeCurrentSeverities() {
this.currentSeverities = new ArrayList<Severity>(defaultSeverities.size());
for (Severity severity : defaultSeverities) {
currentSeverities.add(severity);
}
}
Severity getSeverityByName(String severityName) {
for (Severity customSeverity : currentSeverities) {
if (!severityName.isEmpty() && (severityName.toLowerCase().equals(customSeverity.getSeverityKey().toLowerCase()) || severityName.toLowerCase().equals(customSeverity.getSeverityKeyTranslated().toLowerCase()))) {
return customSeverity;
}
}
throw new SeverityNotFoundException(severityName);
}
int getSeverityValue(Severity severity) {
return currentSeverities.indexOf(severity);
}
List<Severity> getAllSeverities() {
return currentSeverities;
}
/**
* @throws SeverityChangedException
*/
void setSeverities(List<Severity> newSeverities) {
isSeverityKeyOrOrderChanged(newSeverities);
this.currentSeverities = newSeverities;
}
private void isSeverityKeyOrOrderChanged(List<Severity> newSeverities) {
if (newSeverities.size() != defaultSeverities.size()) {
for (int i = 0; i < newSeverities.size(); i++) {
Severity defaulSeverity = defaultSeverities.get(i);
Severity newSeverity = newSeverities.get(i);
if (!defaulSeverity.getSeverityKey().toLowerCase().equals(newSeverity.getSeverityKey().toLowerCase())) {
throw new SeverityChangedException(newSeverity.getSeverityKey());
}
}
}
}
private List<Severity> generateDefaultSeverities() {
List<Severity> newDefaultSeverities = new ArrayList<Severity>();
for (DefaultSeverities defaultSeverity : EnumSet.allOf(DefaultSeverities.class)) {
Severity severity = new Severity(defaultSeverity.toString(), defaultSeverity.getColor());
newDefaultSeverities.add(severity);
}
return newDefaultSeverities;
}
}