- 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)) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
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());
|
||||
|
|
|
|||
|
|
@ -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<BulkInstruction<Material>> extractSheet(Sheet sheet) {
|
||||
headerGenerator.validateHeader(sheet, MaterialHeader.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<MatrixRate> extractSheet(Sheet sheet) {
|
||||
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.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<BulkInstruction<ExcelNode>> extractSheet(Sheet sheet) {
|
||||
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.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<BulkInstruction<ExcelPackaging>> extractSheet(Sheet sheet) {
|
||||
headerGenerator.validateHeader(sheet, PackagingHeader.class);
|
||||
Map<Integer, String> propertyMappingIds = getPropertyHeaders(sheet.getRow(0));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue