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.dto.bulk.BulkFileType;
|
||||||
import de.avatic.lcc.model.bulk.BulkFileTypes;
|
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.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.CellStyle;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
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.ss.usermodel.Workbook;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.core.io.InputStreamSource;
|
import org.springframework.core.io.InputStreamSource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
|
@ -16,37 +20,73 @@ public class BulkExportService {
|
||||||
|
|
||||||
private final HeaderCellStyleProvider headerCellStyleProvider;
|
private final HeaderCellStyleProvider headerCellStyleProvider;
|
||||||
private final ContainerRateExcelMapper containerRateExcelMapper;
|
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.headerCellStyleProvider = headerCellStyleProvider;
|
||||||
this.containerRateExcelMapper = containerRateExcelMapper;
|
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) {
|
public InputStreamSource generateExport(BulkFileType bulkFileType) {
|
||||||
|
return generateExport(bulkFileType, validityPeriodRepository.getValidPeriodId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStreamSource generateExport(BulkFileType bulkFileType, Integer periodId) {
|
||||||
Workbook workbook = new XSSFWorkbook();
|
Workbook workbook = new XSSFWorkbook();
|
||||||
Sheet worksheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName());
|
Sheet worksheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName());
|
||||||
|
|
||||||
CellStyle style = headerCellStyleProvider.createHeaderCellStyle(workbook);
|
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
|
// Create headers based on the bulk file type
|
||||||
switch (bulkFileType) {
|
switch (bulkFileType) {
|
||||||
case CONTAINER_RATE:
|
case CONTAINER_RATE:
|
||||||
containerRateExcelMapper.fillSheet();
|
containerRateExcelMapper.fillSheet(worksheet, style, periodId);
|
||||||
break;
|
break;
|
||||||
case COUNTRY_MATRIX:
|
case COUNTRY_MATRIX:
|
||||||
|
matrixRateExcelMapper.fillSheet(worksheet, style, periodId);
|
||||||
break;
|
break;
|
||||||
case MATERIAL:
|
case MATERIAL:
|
||||||
|
materialExcelMapper.fillSheet(worksheet, style);
|
||||||
break;
|
break;
|
||||||
case PACKAGING:
|
case PACKAGING:
|
||||||
|
packagingExcelMapper.fillSheet(worksheet, style);
|
||||||
break;
|
break;
|
||||||
case NODE:
|
case NODE:
|
||||||
|
nodeExcelMapper.fillSheet(worksheet, style);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
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());
|
Sheet sheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName());
|
||||||
|
|
||||||
CellStyle style = headerCellStyleProvider.createHeaderCellStyle(workbook);
|
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
|
// Create headers and constraints based on the bulk file type
|
||||||
switch (bulkFileType) {
|
switch (bulkFileType) {
|
||||||
|
|
@ -79,25 +94,6 @@ public class TemplateExportService {
|
||||||
throw new IllegalArgumentException("Unsupported bulk file type: " + bulkFileType);
|
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 the Excel file as an InputStreamSource
|
||||||
return new ByteArrayResource(outputStream.toByteArray());
|
return new ByteArrayResource(outputStream.toByteArray());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue