- Enhanching errors if wrong sheet is uploaded
This commit is contained in:
parent
fd8226d4c1
commit
cb51789a84
6 changed files with 84 additions and 5 deletions
|
|
@ -58,9 +58,16 @@ public class BulkImportService {
|
||||||
try (Workbook workbook = new XSSFWorkbook(in)) {
|
try (Workbook workbook = new XSSFWorkbook(in)) {
|
||||||
Sheet sheet = workbook.getSheet(BulkFileTypes.valueOf(type.name()).getSheetName());
|
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.");
|
throw new ExcelValidationError("Unable to import " + op.getFileType().getFileType() + ", because \"" + BulkFileTypes.valueOf(type.name()).getSheetName() + "\" sheet is missing. Please use correct template.");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case CONTAINER_RATE:
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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<ContainerRate> extractSheet(Sheet sheet) {
|
public List<ContainerRate> extractSheet(Sheet sheet) {
|
||||||
headerGenerator.validateHeader(sheet, ContainerRateHeader.class);
|
headerGenerator.validateHeader(sheet, ContainerRateHeader.class);
|
||||||
|
|
||||||
|
|
@ -108,12 +117,12 @@ public class ContainerRateExcelMapper {
|
||||||
var fromNode = nodeRepository.getByExternalMappingId(row.getCell(ContainerRateHeader.FROM_NODE.ordinal()).getStringCellValue());
|
var fromNode = nodeRepository.getByExternalMappingId(row.getCell(ContainerRateHeader.FROM_NODE.ordinal()).getStringCellValue());
|
||||||
var toNode = nodeRepository.getByExternalMappingId(row.getCell(ContainerRateHeader.TO_NODE.ordinal()).getStringCellValue());
|
var toNode = nodeRepository.getByExternalMappingId(row.getCell(ContainerRateHeader.TO_NODE.ordinal()).getStringCellValue());
|
||||||
|
|
||||||
if(fromNode.isEmpty() || fromNode.get().getDeprecated()) {
|
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.");
|
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()) {
|
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.");
|
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());
|
entity.setFromNodeId(fromNode.orElseThrow().getId());
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,13 @@ package de.avatic.lcc.service.excelMapper;
|
||||||
import de.avatic.lcc.model.bulk.BulkInstruction;
|
import de.avatic.lcc.model.bulk.BulkInstruction;
|
||||||
import de.avatic.lcc.model.bulk.BulkInstructionType;
|
import de.avatic.lcc.model.bulk.BulkInstructionType;
|
||||||
import de.avatic.lcc.model.bulk.header.MaterialHeader;
|
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.bulk.header.NodeHeader;
|
||||||
import de.avatic.lcc.model.materials.Material;
|
import de.avatic.lcc.model.materials.Material;
|
||||||
import de.avatic.lcc.repositories.MaterialRepository;
|
import de.avatic.lcc.repositories.MaterialRepository;
|
||||||
import de.avatic.lcc.service.bulk.helper.ConstraintGenerator;
|
import de.avatic.lcc.service.bulk.helper.ConstraintGenerator;
|
||||||
import de.avatic.lcc.service.bulk.helper.HeaderGenerator;
|
import de.avatic.lcc.service.bulk.helper.HeaderGenerator;
|
||||||
|
import de.avatic.lcc.util.exception.internalerror.ExcelValidationError;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.springframework.stereotype.Service;
|
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<BulkInstruction<Material>> extractSheet(Sheet sheet) {
|
public List<BulkInstruction<Material>> extractSheet(Sheet sheet) {
|
||||||
headerGenerator.validateHeader(sheet, MaterialHeader.class);
|
headerGenerator.validateHeader(sheet, MaterialHeader.class);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package de.avatic.lcc.service.excelMapper;
|
package de.avatic.lcc.service.excelMapper;
|
||||||
|
|
||||||
import de.avatic.lcc.model.bulk.HiddenTableType;
|
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.HiddenCountryHeader;
|
||||||
import de.avatic.lcc.model.bulk.header.MatrixRateHeader;
|
import de.avatic.lcc.model.bulk.header.MatrixRateHeader;
|
||||||
import de.avatic.lcc.model.country.IsoCode;
|
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.repositories.rates.MatrixRateRepository;
|
||||||
import de.avatic.lcc.service.bulk.helper.ConstraintGenerator;
|
import de.avatic.lcc.service.bulk.helper.ConstraintGenerator;
|
||||||
import de.avatic.lcc.service.bulk.helper.HeaderGenerator;
|
import de.avatic.lcc.service.bulk.helper.HeaderGenerator;
|
||||||
|
import de.avatic.lcc.util.exception.internalerror.ExcelValidationError;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
|
@ -37,6 +39,15 @@ public class MatrixRateExcelMapper {
|
||||||
headerGenerator.fixWidth(sheet, MatrixRateHeader.class);
|
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<MatrixRate> extractSheet(Sheet sheet) {
|
public List<MatrixRate> extractSheet(Sheet sheet) {
|
||||||
headerGenerator.validateHeader(sheet, MatrixRateHeader.class);
|
headerGenerator.validateHeader(sheet, MatrixRateHeader.class);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import de.avatic.lcc.model.bulk.BulkInstructionType;
|
||||||
import de.avatic.lcc.model.bulk.HiddenTableType;
|
import de.avatic.lcc.model.bulk.HiddenTableType;
|
||||||
import de.avatic.lcc.model.bulk.header.HiddenCountryHeader;
|
import de.avatic.lcc.model.bulk.header.HiddenCountryHeader;
|
||||||
import de.avatic.lcc.model.bulk.header.NodeHeader;
|
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.Country;
|
||||||
import de.avatic.lcc.model.country.IsoCode;
|
import de.avatic.lcc.model.country.IsoCode;
|
||||||
import de.avatic.lcc.model.nodes.Node;
|
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<BulkInstruction<ExcelNode>> extractSheet(Sheet sheet) {
|
public List<BulkInstruction<ExcelNode>> extractSheet(Sheet sheet) {
|
||||||
headerGenerator.validateHeader(sheet, NodeHeader.class);
|
headerGenerator.validateHeader(sheet, NodeHeader.class);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import de.avatic.lcc.model.bulk.BulkInstruction;
|
||||||
import de.avatic.lcc.model.bulk.BulkInstructionType;
|
import de.avatic.lcc.model.bulk.BulkInstructionType;
|
||||||
import de.avatic.lcc.model.bulk.HiddenTableType;
|
import de.avatic.lcc.model.bulk.HiddenTableType;
|
||||||
import de.avatic.lcc.model.bulk.header.HiddenNodeHeader;
|
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.bulk.header.PackagingHeader;
|
||||||
import de.avatic.lcc.model.packaging.Packaging;
|
import de.avatic.lcc.model.packaging.Packaging;
|
||||||
import de.avatic.lcc.model.packaging.PackagingDimension;
|
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.repositories.packaging.PackagingRepository;
|
||||||
import de.avatic.lcc.service.bulk.helper.ConstraintGenerator;
|
import de.avatic.lcc.service.bulk.helper.ConstraintGenerator;
|
||||||
import de.avatic.lcc.service.bulk.helper.HeaderGenerator;
|
import de.avatic.lcc.service.bulk.helper.HeaderGenerator;
|
||||||
|
import de.avatic.lcc.util.exception.internalerror.ExcelValidationError;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.springframework.stereotype.Service;
|
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<BulkInstruction<ExcelPackaging>> extractSheet(Sheet sheet) {
|
public List<BulkInstruction<ExcelPackaging>> extractSheet(Sheet sheet) {
|
||||||
headerGenerator.validateHeader(sheet, PackagingHeader.class);
|
headerGenerator.validateHeader(sheet, PackagingHeader.class);
|
||||||
Map<Integer, String> propertyMappingIds = getPropertyHeaders(sheet.getRow(0));
|
Map<Integer, String> propertyMappingIds = getPropertyHeaders(sheet.getRow(0));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue