package husacct.validate.task.imexporting.reporting;
import husacct.ServiceProvider;
import husacct.common.dto.ApplicationDTO;
import husacct.common.enums.ExtensionTypes;
import husacct.define.IDefineService;
import husacct.validate.domain.exception.ReportException;
import husacct.validate.domain.validation.Severity;
import husacct.validate.domain.validation.Violation;
import husacct.validate.task.TaskServiceImpl;
import husacct.validate.task.imexporting.UnknownStorageTypeException;
import husacct.validate.task.imexporting.exporting.ExportAllViolations;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.AbstractMap.SimpleEntry;
import java.util.Calendar;
import java.util.List;
import org.jdom2.Document;
import com.itextpdf.text.DocumentException;
public class ExportReportFactory {
private final TaskServiceImpl taskServiceImpl;
private Report report;
private ReportWriter writer;
private final IDefineService defineService = ServiceProvider.getInstance().getDefineService();
public ExportReportFactory(TaskServiceImpl taskServiceImpl) {
this.taskServiceImpl = taskServiceImpl;
}
public void exportReport(String fileType, SimpleEntry<Calendar, List<Violation>> violations, String name, String path, List<Severity> severities) {
initializeReport(violations, path, severities);
try {
if (fileType.toLowerCase().equals(ExtensionTypes.XML.getExtension().toLowerCase())) {
writer = new ExportAllViolations(report, path, name, taskServiceImpl);
} else if (fileType.toLowerCase().equals(ExtensionTypes.XLS.getExtension().toLowerCase())) {
writer = new ExcelReportWriter(report, path, name, taskServiceImpl);
} else if (fileType.toLowerCase().equals(ExtensionTypes.HTML.getExtension().toLowerCase())) {
writer = new HTMLReportWriter(report, path, name, taskServiceImpl);
} else if (fileType.toLowerCase().equals(ExtensionTypes.PDF.getExtension().toLowerCase())) {
writer = new PDFReportWriter(report, path, name, taskServiceImpl);
}
if (writer == null) {
throw new UnknownStorageTypeException("Storage type " + fileType + " doesn't exist or is not implemented");
}
writer.createReport();
} catch (IOException e) {
createException(e);
} catch (UnknownStorageTypeException e) {
createException(e);
} catch (URISyntaxException e) {
createException(e);
} catch (DocumentException e) {
createException(e);
}
}
public Document createAllViolationsXmlDocument(SimpleEntry<Calendar, List<Violation>> violations, List<Severity> severities) {
initializeReport(violations, "", severities);
ExportAllViolations documentWriter = new ExportAllViolations(report, "", "", taskServiceImpl);
Document document = documentWriter.createReportDocument();
return document;
}
private void initializeReport(SimpleEntry<Calendar, List<Violation>> violations, String path, List<Severity> severities) {
final ApplicationDTO applicationDetails = defineService.getApplicationDetails();
report = new Report(applicationDetails.name, applicationDetails.version, violations, path, severities);
}
private void createException(Exception exception) {
throw new ReportException(exception.getMessage(), exception);
}
}