diff --git a/src/main/java/de/avatic/lcc/service/bulk/BulkImportService.java b/src/main/java/de/avatic/lcc/service/bulk/BulkImportService.java index 8dba972..bcfdbbb 100644 --- a/src/main/java/de/avatic/lcc/service/bulk/BulkImportService.java +++ b/src/main/java/de/avatic/lcc/service/bulk/BulkImportService.java @@ -58,9 +58,16 @@ public class BulkImportService { try (Workbook workbook = new XSSFWorkbook(in)) { Sheet sheet = workbook.getSheet(BulkFileTypes.valueOf(type.name()).getSheetName()); - if(sheet == null) + if (sheet == null) { + + BulkFileTypes foundType = findSheetType(workbook.getSheetAt(0)); + + if(foundType != null && !foundType.equals(BulkFileTypes.valueOf(type.name()))) + throw new ExcelValidationError("Unable to import " + op.getFileType().getFileType() + ", because " + foundType.getSheetName() + " template was found"); + throw new ExcelValidationError("Unable to import " + op.getFileType().getFileType() + ", because \"" + BulkFileTypes.valueOf(type.name()).getSheetName() + "\" sheet is missing. Please use correct template."); + } switch (type) { case CONTAINER_RATE: @@ -92,5 +99,25 @@ public class BulkImportService { } + private BulkFileTypes findSheetType(Sheet sheet) { + + if(containerRateExcelMapper.isSheet(sheet)) + return BulkFileTypes.CONTAINER_RATE; + + if(matrixRateExcelMapper.isSheet(sheet)) + return BulkFileTypes.COUNTRY_MATRIX; + + if(materialExcelMapper.isSheet(sheet)) + return BulkFileTypes.MATERIAL; + + if(packagingExcelMapper.isSheet(sheet)) + return BulkFileTypes.PACKAGING; + + if(nodeExcelMapper.isSheet(sheet)) + return BulkFileTypes.NODE; + + return null; + } + } diff --git a/src/main/java/de/avatic/lcc/service/excelMapper/ContainerRateExcelMapper.java b/src/main/java/de/avatic/lcc/service/excelMapper/ContainerRateExcelMapper.java index bba5291..4c2124d 100644 --- a/src/main/java/de/avatic/lcc/service/excelMapper/ContainerRateExcelMapper.java +++ b/src/main/java/de/avatic/lcc/service/excelMapper/ContainerRateExcelMapper.java @@ -64,6 +64,15 @@ public class ContainerRateExcelMapper { } + public boolean isSheet(Sheet sheet) { + try { + headerGenerator.validateHeader(sheet, ContainerRateHeader.class); + } catch (ExcelValidationError e) { + return false; + } + return true; + } + public List extractSheet(Sheet sheet) { headerGenerator.validateHeader(sheet, ContainerRateHeader.class); @@ -108,12 +117,12 @@ public class ContainerRateExcelMapper { var fromNode = nodeRepository.getByExternalMappingId(row.getCell(ContainerRateHeader.FROM_NODE.ordinal()).getStringCellValue()); var toNode = nodeRepository.getByExternalMappingId(row.getCell(ContainerRateHeader.TO_NODE.ordinal()).getStringCellValue()); - if(fromNode.isEmpty() || fromNode.get().getDeprecated()) { - throw new ExcelValidationError("Unable to validate row " + (row.getRowNum() + 1) + " column " + toExcelLetter( ContainerRateHeader.FROM_NODE.ordinal()) + ": Node with mapping id " + row.getCell(ContainerRateHeader.FROM_NODE.ordinal()).getStringCellValue() + " not found."); + if (fromNode.isEmpty() || fromNode.get().getDeprecated()) { + throw new ExcelValidationError("Unable to validate row " + (row.getRowNum() + 1) + " column " + toExcelLetter(ContainerRateHeader.FROM_NODE.ordinal()) + ": Node with mapping id " + row.getCell(ContainerRateHeader.FROM_NODE.ordinal()).getStringCellValue() + " not found."); } - if(toNode.isEmpty() || toNode.get().getDeprecated()) { - throw new ExcelValidationError("Unable to validate row " + (row.getRowNum() + 1) + " column " + toExcelLetter( ContainerRateHeader.TO_NODE.ordinal()) + ": Node with mapping id " + row.getCell(ContainerRateHeader.TO_NODE.ordinal()).getStringCellValue() + " not found."); + if (toNode.isEmpty() || toNode.get().getDeprecated()) { + throw new ExcelValidationError("Unable to validate row " + (row.getRowNum() + 1) + " column " + toExcelLetter(ContainerRateHeader.TO_NODE.ordinal()) + ": Node with mapping id " + row.getCell(ContainerRateHeader.TO_NODE.ordinal()).getStringCellValue() + " not found."); } entity.setFromNodeId(fromNode.orElseThrow().getId()); diff --git a/src/main/java/de/avatic/lcc/service/excelMapper/MaterialExcelMapper.java b/src/main/java/de/avatic/lcc/service/excelMapper/MaterialExcelMapper.java index 3d6f10b..22b1b92 100644 --- a/src/main/java/de/avatic/lcc/service/excelMapper/MaterialExcelMapper.java +++ b/src/main/java/de/avatic/lcc/service/excelMapper/MaterialExcelMapper.java @@ -3,11 +3,13 @@ package de.avatic.lcc.service.excelMapper; import de.avatic.lcc.model.bulk.BulkInstruction; import de.avatic.lcc.model.bulk.BulkInstructionType; import de.avatic.lcc.model.bulk.header.MaterialHeader; +import de.avatic.lcc.model.bulk.header.MatrixRateHeader; import de.avatic.lcc.model.bulk.header.NodeHeader; import de.avatic.lcc.model.materials.Material; import de.avatic.lcc.repositories.MaterialRepository; import de.avatic.lcc.service.bulk.helper.ConstraintGenerator; import de.avatic.lcc.service.bulk.helper.HeaderGenerator; +import de.avatic.lcc.util.exception.internalerror.ExcelValidationError; import org.apache.poi.ss.usermodel.*; import org.springframework.stereotype.Service; @@ -53,6 +55,15 @@ public class MaterialExcelMapper { } + public boolean isSheet(Sheet sheet) { + try { + headerGenerator.validateHeader(sheet, MaterialHeader.class); + } catch (ExcelValidationError e) { + return false; + } + return true; + } + public List> extractSheet(Sheet sheet) { headerGenerator.validateHeader(sheet, MaterialHeader.class); diff --git a/src/main/java/de/avatic/lcc/service/excelMapper/MatrixRateExcelMapper.java b/src/main/java/de/avatic/lcc/service/excelMapper/MatrixRateExcelMapper.java index 9da5b57..cb9d014 100644 --- a/src/main/java/de/avatic/lcc/service/excelMapper/MatrixRateExcelMapper.java +++ b/src/main/java/de/avatic/lcc/service/excelMapper/MatrixRateExcelMapper.java @@ -1,6 +1,7 @@ package de.avatic.lcc.service.excelMapper; import de.avatic.lcc.model.bulk.HiddenTableType; +import de.avatic.lcc.model.bulk.header.ContainerRateHeader; import de.avatic.lcc.model.bulk.header.HiddenCountryHeader; import de.avatic.lcc.model.bulk.header.MatrixRateHeader; import de.avatic.lcc.model.country.IsoCode; @@ -9,6 +10,7 @@ import de.avatic.lcc.repositories.country.CountryRepository; import de.avatic.lcc.repositories.rates.MatrixRateRepository; import de.avatic.lcc.service.bulk.helper.ConstraintGenerator; import de.avatic.lcc.service.bulk.helper.HeaderGenerator; +import de.avatic.lcc.util.exception.internalerror.ExcelValidationError; import org.apache.poi.ss.usermodel.*; import org.springframework.stereotype.Service; @@ -37,6 +39,15 @@ public class MatrixRateExcelMapper { headerGenerator.fixWidth(sheet, MatrixRateHeader.class); } + public boolean isSheet(Sheet sheet) { + try { + headerGenerator.validateHeader(sheet, MatrixRateHeader.class); + } catch (ExcelValidationError e) { + return false; + } + return true; + } + public List extractSheet(Sheet sheet) { headerGenerator.validateHeader(sheet, MatrixRateHeader.class); diff --git a/src/main/java/de/avatic/lcc/service/excelMapper/NodeExcelMapper.java b/src/main/java/de/avatic/lcc/service/excelMapper/NodeExcelMapper.java index 16ea92b..5777334 100644 --- a/src/main/java/de/avatic/lcc/service/excelMapper/NodeExcelMapper.java +++ b/src/main/java/de/avatic/lcc/service/excelMapper/NodeExcelMapper.java @@ -6,6 +6,7 @@ import de.avatic.lcc.model.bulk.BulkInstructionType; import de.avatic.lcc.model.bulk.HiddenTableType; import de.avatic.lcc.model.bulk.header.HiddenCountryHeader; import de.avatic.lcc.model.bulk.header.NodeHeader; +import de.avatic.lcc.model.bulk.header.PackagingHeader; import de.avatic.lcc.model.country.Country; import de.avatic.lcc.model.country.IsoCode; import de.avatic.lcc.model.nodes.Node; @@ -93,6 +94,15 @@ public class NodeExcelMapper { } + public boolean isSheet(Sheet sheet) { + try { + headerGenerator.validateHeader(sheet, NodeHeader.class); + } catch (ExcelValidationError e) { + return false; + } + return true; + } + public List> extractSheet(Sheet sheet) { headerGenerator.validateHeader(sheet, NodeHeader.class); diff --git a/src/main/java/de/avatic/lcc/service/excelMapper/PackagingExcelMapper.java b/src/main/java/de/avatic/lcc/service/excelMapper/PackagingExcelMapper.java index 0dbfe40..e2d3ad3 100644 --- a/src/main/java/de/avatic/lcc/service/excelMapper/PackagingExcelMapper.java +++ b/src/main/java/de/avatic/lcc/service/excelMapper/PackagingExcelMapper.java @@ -6,6 +6,7 @@ import de.avatic.lcc.model.bulk.BulkInstruction; import de.avatic.lcc.model.bulk.BulkInstructionType; import de.avatic.lcc.model.bulk.HiddenTableType; import de.avatic.lcc.model.bulk.header.HiddenNodeHeader; +import de.avatic.lcc.model.bulk.header.MaterialHeader; import de.avatic.lcc.model.bulk.header.PackagingHeader; import de.avatic.lcc.model.packaging.Packaging; import de.avatic.lcc.model.packaging.PackagingDimension; @@ -19,6 +20,7 @@ import de.avatic.lcc.repositories.packaging.PackagingPropertiesRepository; import de.avatic.lcc.repositories.packaging.PackagingRepository; import de.avatic.lcc.service.bulk.helper.ConstraintGenerator; import de.avatic.lcc.service.bulk.helper.HeaderGenerator; +import de.avatic.lcc.util.exception.internalerror.ExcelValidationError; import org.apache.poi.ss.usermodel.*; import org.springframework.stereotype.Service; @@ -132,6 +134,15 @@ public class PackagingExcelMapper { } + public boolean isSheet(Sheet sheet) { + try { + headerGenerator.validateHeader(sheet, PackagingHeader.class); + } catch (ExcelValidationError e) { + return false; + } + return true; + } + public List> extractSheet(Sheet sheet) { headerGenerator.validateHeader(sheet, PackagingHeader.class); Map propertyMappingIds = getPropertyHeaders(sheet.getRow(0));