Refactor hidden sheet creation logic in export services
Consolidated hidden sheet creation logic into a unified structure to improve code maintainability and reduce duplication. Adjusted mappers to ensure bulk file-specific hidden sheets are created, styled, and protected consistently. Added support for a configurable sheet password and introduced a new method in BulkExportService for enhanced period handling.
This commit is contained in:
parent
af76f6821b
commit
1a57d7dc3d
2 changed files with 63 additions and 27 deletions
|
|
@ -2,12 +2,16 @@ package de.avatic.lcc.service.bulk;
|
|||
|
||||
import de.avatic.lcc.dto.bulk.BulkFileType;
|
||||
import de.avatic.lcc.model.bulk.BulkFileTypes;
|
||||
import de.avatic.lcc.model.bulk.HiddenTableType;
|
||||
import de.avatic.lcc.repositories.rates.ValidityPeriodRepository;
|
||||
import de.avatic.lcc.service.bulk.helper.HeaderCellStyleProvider;
|
||||
import de.avatic.lcc.service.bulk.mapper.ContainerRateExcelMapper;
|
||||
import de.avatic.lcc.service.bulk.mapper.*;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.SheetVisibility;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.io.InputStreamSource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
|
@ -16,37 +20,73 @@ public class BulkExportService {
|
|||
|
||||
private final HeaderCellStyleProvider headerCellStyleProvider;
|
||||
private final ContainerRateExcelMapper containerRateExcelMapper;
|
||||
private final ValidityPeriodRepository validityPeriodRepository;
|
||||
private final MatrixRateExcelMapper matrixRateExcelMapper;
|
||||
private final MaterialExcelMapper materialExcelMapper;
|
||||
private final PackagingExcelMapper packagingExcelMapper;
|
||||
private final NodeExcelMapper nodeExcelMapper;
|
||||
private final HiddenNodeExcelMapper hiddenNodeExcelMapper;
|
||||
private final HiddenCountryExcelMapper hiddenCountryExcelMapper;
|
||||
private final String sheetPassword;
|
||||
|
||||
public BulkExportService(HeaderCellStyleProvider headerCellStyleProvider, ContainerRateExcelMapper containerRateExcelMapper) {
|
||||
public BulkExportService(@Value("${lcc.bulk.sheet_password}") String sheetPassword, HeaderCellStyleProvider headerCellStyleProvider, ContainerRateExcelMapper containerRateExcelMapper, ValidityPeriodRepository validityPeriodRepository, MatrixRateExcelMapper matrixRateExcelMapper, MaterialExcelMapper materialExcelMapper, PackagingExcelMapper packagingExcelMapper, NodeExcelMapper nodeExcelMapper, HiddenNodeExcelMapper hiddenNodeExcelMapper, HiddenCountryExcelMapper hiddenCountryExcelMapper) {
|
||||
this.headerCellStyleProvider = headerCellStyleProvider;
|
||||
this.containerRateExcelMapper = containerRateExcelMapper;
|
||||
this.validityPeriodRepository = validityPeriodRepository;
|
||||
this.matrixRateExcelMapper = matrixRateExcelMapper;
|
||||
this.materialExcelMapper = materialExcelMapper;
|
||||
this.packagingExcelMapper = packagingExcelMapper;
|
||||
this.nodeExcelMapper = nodeExcelMapper;
|
||||
this.hiddenNodeExcelMapper = hiddenNodeExcelMapper;
|
||||
this.hiddenCountryExcelMapper = hiddenCountryExcelMapper;
|
||||
this.sheetPassword = sheetPassword;
|
||||
}
|
||||
|
||||
public InputStreamSource generateExport(BulkFileType bulkFileType) {
|
||||
return generateExport(bulkFileType, validityPeriodRepository.getValidPeriodId());
|
||||
}
|
||||
|
||||
public InputStreamSource generateExport(BulkFileType bulkFileType, Integer periodId) {
|
||||
Workbook workbook = new XSSFWorkbook();
|
||||
Sheet worksheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName());
|
||||
|
||||
CellStyle style = headerCellStyleProvider.createHeaderCellStyle(workbook);
|
||||
|
||||
|
||||
if(bulkFileType.equals(BulkFileType.COUNTRY_MATRIX) || bulkFileType.equals(BulkFileType.NODE))
|
||||
{
|
||||
var hiddenCountrySheet = workbook.createSheet(HiddenTableType.COUNTRY_HIDDEN_TABLE.getSheetName());
|
||||
hiddenCountryExcelMapper.fillSheet(hiddenCountrySheet, style);
|
||||
hiddenCountrySheet.protectSheet(sheetPassword);
|
||||
workbook.setSheetVisibility(workbook.getSheetIndex(hiddenCountrySheet), SheetVisibility.VERY_HIDDEN);
|
||||
}
|
||||
else if(bulkFileType.equals(BulkFileType.CONTAINER_RATE) || bulkFileType.equals(BulkFileType.PACKAGING))
|
||||
{
|
||||
var hiddenNodeSheet = workbook.createSheet(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName());
|
||||
hiddenNodeExcelMapper.fillSheet(hiddenNodeSheet, style, BulkFileType.PACKAGING.equals(bulkFileType));
|
||||
hiddenNodeSheet.protectSheet(sheetPassword);
|
||||
workbook.setSheetVisibility(workbook.getSheetIndex(hiddenNodeSheet), SheetVisibility.VERY_HIDDEN);
|
||||
}
|
||||
|
||||
// Create headers based on the bulk file type
|
||||
switch (bulkFileType) {
|
||||
case CONTAINER_RATE:
|
||||
containerRateExcelMapper.fillSheet();
|
||||
containerRateExcelMapper.fillSheet(worksheet, style, periodId);
|
||||
break;
|
||||
case COUNTRY_MATRIX:
|
||||
matrixRateExcelMapper.fillSheet(worksheet, style, periodId);
|
||||
break;
|
||||
case MATERIAL:
|
||||
materialExcelMapper.fillSheet(worksheet, style);
|
||||
break;
|
||||
case PACKAGING:
|
||||
packagingExcelMapper.fillSheet(worksheet, style);
|
||||
break;
|
||||
case NODE:
|
||||
nodeExcelMapper.fillSheet(worksheet, style);
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public InputStreamSource generateExport(BulkFileType bulkFileType, Integer validityPeriodId) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,22 @@ public class TemplateExportService {
|
|||
Sheet sheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName());
|
||||
|
||||
CellStyle style = headerCellStyleProvider.createHeaderCellStyle(workbook);
|
||||
Sheet hiddenSheet = null;
|
||||
|
||||
|
||||
if(bulkFileType.equals(BulkFileType.COUNTRY_MATRIX) || bulkFileType.equals(BulkFileType.NODE))
|
||||
{
|
||||
var hiddenCountrySheet = workbook.createSheet(HiddenTableType.COUNTRY_HIDDEN_TABLE.getSheetName());
|
||||
hiddenCountryExcelMapper.fillSheet(hiddenCountrySheet, style);
|
||||
hiddenCountrySheet.protectSheet(sheetPassword);
|
||||
workbook.setSheetVisibility(workbook.getSheetIndex(hiddenCountrySheet), SheetVisibility.VERY_HIDDEN);
|
||||
}
|
||||
else if(bulkFileType.equals(BulkFileType.CONTAINER_RATE) || bulkFileType.equals(BulkFileType.PACKAGING))
|
||||
{
|
||||
var hiddenNodeSheet = workbook.createSheet(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName());
|
||||
hiddenNodeExcelMapper.fillSheet(hiddenNodeSheet, style, BulkFileType.PACKAGING.equals(bulkFileType));
|
||||
hiddenNodeSheet.protectSheet(sheetPassword);
|
||||
workbook.setSheetVisibility(workbook.getSheetIndex(hiddenNodeSheet), SheetVisibility.VERY_HIDDEN);
|
||||
}
|
||||
|
||||
// Create headers and constraints based on the bulk file type
|
||||
switch (bulkFileType) {
|
||||
|
|
@ -79,25 +94,6 @@ public class TemplateExportService {
|
|||
throw new IllegalArgumentException("Unsupported bulk file type: " + bulkFileType);
|
||||
}
|
||||
|
||||
switch (bulkFileType) {
|
||||
case CONTAINER_RATE:
|
||||
case PACKAGING:
|
||||
var hiddenNodeSheet = workbook.createSheet(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName());
|
||||
hiddenNodeExcelMapper.fillSheet(hiddenNodeSheet, style, BulkFileType.PACKAGING.equals(bulkFileType));
|
||||
hiddenNodeSheet.protectSheet(sheetPassword);
|
||||
workbook.createName().setNameName(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName()+"_ref");
|
||||
break;
|
||||
case COUNTRY_MATRIX:
|
||||
case NODE:
|
||||
var hiddenCountrySheet = workbook.createSheet(HiddenTableType.COUNTRY_HIDDEN_TABLE.getSheetName());
|
||||
hiddenCountryExcelMapper.fillSheet(hiddenCountrySheet, style);
|
||||
hiddenCountrySheet.protectSheet(sheetPassword);
|
||||
workbook.setSheetVisibility(workbook.getSheetIndex(hiddenCountrySheet), SheetVisibility.VERY_HIDDEN);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Return the Excel file as an InputStreamSource
|
||||
return new ByteArrayResource(outputStream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue