package com.example.reporting.services.impl.pdf; import static com.example.reporting.util.ResourceUtils.OTHER_RESOURCE_CODES; import static com.example.reporting.util.DateUtil.formatDate; import static com.example.reporting.util.ReportUtil.getRegionName; import static com.example.reporting.util.Constants.*; import static com.example.reporting.util.NumberUtils.getStringFromBigDecimal; import static com.example.reporting.util.NumberUtils.getStringFromLong; import static com.example.reporting.util.PdfUtil.formatDocumentType; import static com.example.reporting.util.PdfUtil.getPdfPCell; import static com.example.reporting.util.PdfUtil.getPdfPCellSpaningAcross; import static com.example.reporting.util.PdfUtil.getPdfPTable; import static com.example.reporting.util.ReferenceUtil.getResourceLabel; import static com.example.reporting.util.StringUtils.getYesNo; import static com.example.reporting.util.StringUtils.MONTHS; import java.awt.Color; import java.io.IOException; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.HibernateException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.server.ResponseStatusException; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; import com.example.reporting.dto.ReportDataDto; import com.example.reporting.dto.database.*; import com.example.reporting.dto.reference.*; import com.example.reporting.services.IReferenceListService; import com.example.reporting.services.database.ITeamService; /** * Abstract class for PDF converter for reports */ public abstract class PdfConverterReport extends PdfConverter { protected final ITeamService teamService; protected final IReferenceListService referenceListService; protected Map referenceList9498; protected Map referenceListResources4435; protected Map referenceList9480; protected Map referenceListSubstances9147; protected Map referenceListComponents5193; protected Map referenceListResources4860; /** * Creates a new instance of PdfConverterReport. */ public static PdfConverterReport of(ReportDto reportDto, ITeamService teamService, IReferenceListService referenceListService) throws DocumentException, IOException { switch (reportDto.getType()) { case TYPE_A: return new PdfConverterTypeA(teamService, referenceListService); case TYPE_B: return new PdfConverterTypeB(teamService, referenceListService); case TYPE_C: return new PdfConverterTypeC(teamService, referenceListService); default: throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, "Unknown type: " + reportDto.getType()); } } protected PdfConverterReport(ITeamService teamService, IReferenceListService referenceListService) throws DocumentException, IOException { super(); this.teamService = teamService; this.referenceListService = referenceListService; } @Override public ResponseEntity convert(ReportParameter param) throws IOException { return this.convert(param.submitDto(), param.headers(), param.isNotReadOnly()); } ResponseEntity convert(ReportDataDto submitDto, HttpHeaders headers, boolean isNotReadOnly) throws IOException { PdfWriter writer = null; try { loadReferenceLists(submitDto.getReportDto().getReportRoot().getYear(), isNotReadOnly); writer = PdfWriter.getInstance(document, baos); generateTitlePage(submitDto.getReportDto(), writer); generateStatusPage(submitDto.getReportDto()); generateMasterDataPage(submitDto.getReportDto(), submitDto.getContactPersonList()); generateEntityDataPage(submitDto.getReportDto(), submitDto.getCapacityDtoList(), submitDto.getSubUnitDtoList(), submitDto.getClassificationDtoList(), submitDto.getLineDtoList()); generateResourcesPage(submitDto.getResourceInputDtoList(), submitDto.getResourceComponentDtoList(), submitDto.getReportDto(), submitDto.getResourceDesignationDtoList()); generateDataPage(submitDto); generateValidationPage(submitDto.getReportDto(), submitDto.getExternalContributorDtoList()); generateAttachmentsPage(submitDto.getDocumentDtoList()); generateConclusionPage(submitDto.getReportDto()); } finally { document.close(); if (writer != null) { writer.close(); } } return new ResponseEntity<>(baos.toByteArray(), headers, HttpStatus.OK); } protected abstract void generateDataPage(ReportDataDto submitDto); // Rest of the class follows similar pattern with generic naming... // [Additional methods would continue with similar transformations] private void loadReferenceLists(String year, boolean isNotReadOnly) { this.referenceList9498 = referenceListService.getEntityTypes9498(year); this.referenceListResources4435 = referenceListService.getReferenceListResourceComponents4435(year, isNotReadOnly); this.referenceList9480 = referenceListService.getReferenceListSystems9480(year, isNotReadOnly); // Additional reference list loading... } @Override protected Paragraph getPdfTitle(ReportDto reportDto) { return new Paragraph("Report for the year " + reportDto.getReportRoot().getYear(), fontBold22); } }