package husacct.validate.task;
import husacct.ServiceProvider;
import husacct.analyse.IAnalyseService;
import husacct.common.dto.RuleDTO;
import husacct.common.dto.ViolationDTO;
import husacct.externalinterface.ViolationReportDTO;
import husacct.validate.domain.DomainServiceImpl;
import husacct.validate.domain.configuration.ActiveRuleType;
import husacct.validate.domain.configuration.ConfigurationServiceImpl;
import husacct.validate.domain.exception.SeverityChangedException;
import husacct.validate.domain.validation.Severity;
import husacct.validate.domain.validation.Violation;
import husacct.validate.domain.validation.ViolationHistory;
import husacct.validate.domain.validation.ViolationType;
import husacct.validate.domain.validation.internaltransferobjects.FilterSettingsDTO;
import husacct.validate.domain.validation.ruletype.RuleType;
import husacct.validate.task.imexporting.ViolationReportDtoFactory;
import husacct.validate.task.workspace.exporting.ExportController;
import husacct.validate.task.workspace.importing.ImportController;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Observer;
import java.util.Set;
import javax.xml.datatype.DatatypeConfigurationException;
import org.jdom2.Document;
import org.jdom2.Element;
public class TaskServiceImpl {
private final FilterController filterController;
private final ConfigurationServiceImpl configuration;
private final DomainServiceImpl domain;
private final IAnalyseService analyseService = ServiceProvider.getInstance().getAnalyseService();
private final ExportController exportController;
private final ImportController importController;
public TaskServiceImpl(ConfigurationServiceImpl configuration, DomainServiceImpl domain) {
this.configuration = configuration;
this.domain = domain;
this.exportController = new ExportController();
this.importController = new ImportController(configuration);
this.filterController = new FilterController(configuration);
}
public SimpleEntry<Calendar, List<Violation>> getAllViolations() {
return configuration.getAllViolations();
}
public ViolationDTO[] getViolationsByLogicalPath(String logicalpathFrom, String logicalpathTo) {
return filterController.getViolationsByLogicalPath(logicalpathFrom, logicalpathTo);
}
public ViolationDTO[] getViolationsByPhysicalPath(String physicalPathFrom, String physicalPathTo) {
return filterController.getViolationsByPhysicalPath(physicalPathFrom, physicalPathTo);
}
public ViolationDTO[] getViolationsByRule(RuleDTO appliedRule) {
return filterController.getViolationsByRule(appliedRule);
}
public List<Violation> getViolationsByRule(String moduleFrom, String moduleTo, String ruleTypeKey) {
return configuration.getViolationsByRule(moduleFrom, moduleTo, ruleTypeKey);
}
public LinkedHashMap<Severity, Integer> getViolationsPerSeverity(List<Violation> shownViolations, List<Severity> severities) {
return filterController.getViolationsPerSeverity(shownViolations, severities);
}
public void setFilterValues(FilterSettingsDTO dto, Calendar date) {
filterController.setFilterValues(dto, getHistoryViolations(date));
}
public ArrayList<String> getEnabledFilterRuleTypes() {
return filterController.getEnabledFilterRuleTypes();
}
public ArrayList<String> getEnabledFilterViolations() {
return filterController.getEnabledFilterViolations();
}
public ArrayList<String> getEnabledFilterPaths() {
return filterController.getEnabledFilterPaths();
}
public ArrayList<Violation> applyFilterViolations(List<Violation> violations) {
return filterController.filterViolations(violations);
}
public ArrayList<String> loadRuletypesForFilter(Calendar date) {
List<Violation> violations = getHistoryViolations(date);
return filterController.loadRuletypes(violations);
}
public ArrayList<String> loadViolationtypesForFilter(Calendar date) {
List<Violation> violations = getHistoryViolations(date);
return filterController.loadViolationtypes(violations);
}
public HashMap<String, List<RuleType>> getRuletypes(String language) {
return domain.getAllRuleTypes(language);
}
public List<Severity> getAllSeverities() {
return configuration.getAllSeverities();
}
public String[] getAvailableLanguages() {
return analyseService.getAvailableLanguages();
}
/**
* @throws SeverityChangedException
*/
public void addSeverities(List<Severity> severities) {
configuration.setSeverities(severities);
}
public void updateSeverityPerType(HashMap<String, Severity> map, String language) {
configuration.setSeveritiesPerTypesPerProgrammingLanguages(language, map);
}
public Map<String, List<ViolationType>> getViolationTypes(String language) {
return domain.getAllViolationTypes(language);
}
public Severity getSeverityFromKey(String language, String key) {
return configuration.getSeverityFromKey(language, key);
}
public ViolationReportDTO getViolationReportData(Document previousViolations, boolean exportAllViolations, boolean exportNewViolations) {
ViolationReportDTO returnValue = new ViolationReportDtoFactory(this).getViolationReportData(previousViolations, exportAllViolations, exportNewViolations);
return returnValue;
}
public void importValidationWorkspace(Element element) throws DatatypeConfigurationException {
importController.importWorkspace(element);
}
public Element exportValidationWorkspace() {
return exportController.exportAllData(configuration);
}
public void restoreAllKeysToDefaultSeverities(String language) {
configuration.restoreAllKeysToDefaultSeverities(language);
}
public void restoreKeyToDefaultSeverity(String language, String key) {
configuration.restoreKeyToDefaultSeverity(language, key);
}
public void restoreSeveritiesToDefault() {
configuration.restoreSeveritiesToDefault();
}
public List<Violation> getHistoryViolations(Calendar date) {
for (ViolationHistory violationHistory : configuration.getViolationHistory()) {
if (violationHistory.getDate().equals(date)) {
return violationHistory.getViolations();
}
}
return getAllViolations().getValue();
}
public Calendar[] getViolationHistoryDates() {
Calendar[] calendars = new Calendar[configuration.getViolationHistory().size()];
int i = 0;
for (ViolationHistory violationHistory : configuration.getViolationHistory()) {
calendars[i] = violationHistory.getDate();
i++;
}
return calendars;
}
public void createHistoryPoint(String description) {
configuration.createHistoryPoint(description);
}
public Set<String> getViolatedRules() {
return configuration.getViolatedRules();
}
public void removeViolationHistory(Calendar date) {
configuration.removeViolationHistory(date);
}
public ViolationHistory getViolationHistoryByDate(Calendar date) {
return configuration.getViolationHistoryByDate(date);
}
public List<ViolationHistory> getViolationHistories() {
return configuration.getViolationHistories();
}
public Map<String, List<ActiveRuleType>> getActiveViolationTypes() {
return configuration.getActiveViolationTypes();
}
public void setActiveViolationTypes(String language, List<ActiveRuleType> activeViolations) {
configuration.setActiveViolationTypes(language, activeViolations);
}
public String getMessage(Violation violation) {
return domain.getMessage(violation);
}
public void subscribe(Observer frame) {
configuration.addObserver(frame);
}
}