package husacct.validate.domain.configuration;
import husacct.ServiceProvider;
import husacct.validate.domain.exception.SeverityChangedException;
import husacct.validate.domain.factory.ruletype.RuleTypesFactory;
import husacct.validate.domain.validation.Severity;
import husacct.validate.domain.validation.Violation;
import husacct.validate.domain.validation.ViolationHistory;
import java.util.AbstractMap.SimpleEntry;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import java.util.Set;
public final class ConfigurationServiceImpl extends Observable {
private final SeverityConfigRepository severityConfig;
private final SeverityPerTypeRepository severityPerTypeRepository;
private final ViolationRepository violationRepository;
private final RuleTypesFactory ruletypeFactory;
private final ViolationHistoryRepository violationHistoryRepository;
private final ActiveViolationTypesRepository activeViolationTypesRepository;
public ConfigurationServiceImpl() {
this.severityConfig = new SeverityConfigRepository();
this.violationRepository = new ViolationRepository();
this.severityPerTypeRepository = new SeverityPerTypeRepository(this.ruletypeFactory = new RuleTypesFactory(this), this);
this.activeViolationTypesRepository = new ActiveViolationTypesRepository(this.ruletypeFactory);
this.severityPerTypeRepository.initializeDefaultSeverities();
this.violationHistoryRepository = new ViolationHistoryRepository();
}
public void clearViolations() {
violationRepository.clear();
}
public int getSeverityValue(Severity severity) {
return severityConfig.getSeverityValue(severity);
}
public List<Severity> getAllSeverities() {
return severityConfig.getAllSeverities();
}
/**
* @throws SeverityChangedException
*/
public void setSeverities(List<Severity> severities) {
severityConfig.setSeverities(severities);
notifyServiceListeners();
}
public Severity getSeverityByName(String severityName) {
return severityConfig.getSeverityByName(severityName);
}
public SimpleEntry<Calendar, List<Violation>> getAllViolations() {
return violationRepository.getAllViolations();
}
// returns a List of Violations; it is empty if no Violation is registered for the specific combination of from-to
public List<Violation> getViolationsFromTo(String physicalPathFrom, String physicalPathTo) {
return violationRepository.getViolationsFromTo(physicalPathFrom, physicalPathTo);
}
public Set<String> getViolatedRules() {
return violationRepository.getViolatedRules();
}
public List<Violation> getViolationsByRule(String moduleFrom, String moduleTo, String ruleTypeKey) {
return violationRepository.getViolationsByRule(moduleFrom, moduleTo, ruleTypeKey);
}
public void addViolations(List<Violation> violations) {
violationRepository.addViolation(violations);
}
public void filterAndSortAllViolations(){
violationRepository.filterAndSortAllViolations();
}
public HashMap<String, HashMap<String, Severity>> getAllSeveritiesPerTypesPerProgrammingLanguages() {
return severityPerTypeRepository.getSeveritiesPerTypePerProgrammingLanguage();
}
public void setSeveritiesPerTypesPerProgrammingLanguages(HashMap<String, HashMap<String, Severity>> severitiesPerTypesPerProgrammingLanguages) {
severityPerTypeRepository.setSeverityMap(severitiesPerTypesPerProgrammingLanguages);
notifyServiceListeners();
}
public void setSeveritiesPerTypesPerProgrammingLanguages(String language, HashMap<String, Severity> severitiesPerTypesPerProgrammingLanguages) {
severityPerTypeRepository.setSeverityMap(language, severitiesPerTypesPerProgrammingLanguages);
notifyServiceListeners();
}
public Severity getSeverityFromKey(String language, String key) {
return severityPerTypeRepository.getSeverity(language, key);
}
public void restoreAllKeysToDefaultSeverities(String language) {
severityPerTypeRepository.restoreAllKeysToDefaultSeverities(language);
setChanged();
notifyObservers();
notifyServiceListeners();
}
public void restoreKeyToDefaultSeverity(String language, String key) {
severityPerTypeRepository.restoreKeyToDefaultSeverity(language, key);
setChanged();
notifyObservers();
notifyServiceListeners();
}
public void restoreSeveritiesToDefault() {
severityConfig.restoreToDefault();
notifyServiceListeners();
}
public RuleTypesFactory getRuleTypesFactory() {
return ruletypeFactory;
}
public List<ViolationHistory> getViolationHistory() {
return violationHistoryRepository.getViolationHistory();
}
public void setViolationHistory(List<ViolationHistory> list) {
violationHistoryRepository.setViolationHistories(list);
}
public Map<String, List<ActiveRuleType>> getActiveViolationTypes() {
return activeViolationTypesRepository.getActiveViolationTypes();
}
public void setActiveViolationTypes(String programmingLanguage, List<ActiveRuleType> activeViolationTypes) {
activeViolationTypesRepository.setActiveViolationTypes(programmingLanguage, activeViolationTypes);
}
public void setActiveViolationTypes(Map<String, List<ActiveRuleType>> activeViolationTypes) {
activeViolationTypesRepository.setActiveViolationTypes(activeViolationTypes);
}
public void createHistoryPoint(String description) {
SimpleEntry<Calendar, List<Violation>> violationsResult = getAllViolations();
Calendar date = violationsResult.getKey();
List<Violation> violations = violationsResult.getValue();
ViolationHistory violationHistory = new ViolationHistory(violations, getAllSeverities(), date, description);
violationHistoryRepository.addViolationHistory(violationHistory);
}
public void removeViolationHistory(Calendar date) {
violationHistoryRepository.removeViolationHistory(date);
}
public ViolationHistory getViolationHistoryByDate(Calendar date) {
return violationHistoryRepository.getViolationHistoryByDate(date);
}
public List<ViolationHistory> getViolationHistories() {
return violationHistoryRepository.getViolationHistory();
}
public boolean isViolationEnabled(String programmingLanguage, String ruleTypeKey, String violationTypeKey) {
if (activeViolationTypesRepository != null) {
getActiveViolationTypes();
return activeViolationTypesRepository.isEnabled(programmingLanguage, ruleTypeKey, violationTypeKey);
} else {
return true;
}
}
public void attachViolationHistoryRepositoryObserver(Observer observer) {
violationHistoryRepository.addObserver(observer);
}
private void notifyServiceListeners() {
ServiceProvider.getInstance().getValidateService().notifyServiceListeners();
}
}