RED-9375: fix component mapping endpoint validation
This commit is contained in:
parent
e382e4e833
commit
5dd27f682b
@ -204,29 +204,32 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource {
|
||||
@Override
|
||||
@SneakyThrows
|
||||
@PreAuthorize("hasAuthority('" + WRITE_RULES + "')")
|
||||
public ComponentMappingMetadataModel uploadMapping(String dossierTemplateId, MultipartFile file, String name, String encoding, char delimiter) {
|
||||
public ComponentMappingMetadataModel uploadMapping(String dossierTemplateId, MultipartFile file, String name, String encoding, String delimiter) {
|
||||
|
||||
dossierTemplatePersistenceService.checkDossierTemplateExistsOrElseThrow404(dossierTemplateId);
|
||||
|
||||
String nameToUse = Strings.isNullOrEmpty(name) ? file.getName().split("\\.")[0] : name;
|
||||
String nameToUse = Strings.isNullOrEmpty(name) ? file.getOriginalFilename() : name;
|
||||
|
||||
if (Strings.isNullOrEmpty(nameToUse)) {
|
||||
throw new BadRequestException("The provided file name is not valid!");
|
||||
}
|
||||
|
||||
if (Strings.isNullOrEmpty(delimiter) || delimiter.length() != 1) {
|
||||
throw new BadRequestException("The provided delimiter is not valid! Only a single character is allowed.");
|
||||
}
|
||||
char cleanDelimiter = delimiter.charAt(0);
|
||||
|
||||
Path mappingFile = saveToFile(file);
|
||||
String fileName = file.getOriginalFilename() == null ? nameToUse + ".csv" : file.getOriginalFilename();
|
||||
try {
|
||||
String fileName = file.getOriginalFilename() == null ? nameToUse + ".csv" : file.getOriginalFilename();
|
||||
|
||||
ComponentMappingMetadata metaData = componentMappingService.create(dossierTemplateId,
|
||||
nameToUse,
|
||||
fileName,
|
||||
delimiter,
|
||||
encoding,
|
||||
mappingFile.toFile());
|
||||
ComponentMappingMetadata metaData = componentMappingService.create(dossierTemplateId, nameToUse, fileName, cleanDelimiter, encoding, mappingFile.toFile());
|
||||
|
||||
Files.deleteIfExists(mappingFile);
|
||||
return componentMappingMapper.toModel(metaData);
|
||||
} finally {
|
||||
Files.deleteIfExists(mappingFile);
|
||||
}
|
||||
|
||||
return componentMappingMapper.toModel(metaData);
|
||||
}
|
||||
|
||||
|
||||
@ -239,15 +242,13 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource {
|
||||
|
||||
Path mappingFile = saveToFile(file);
|
||||
|
||||
com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentMappingMetadata resultMetaData = componentMappingService.update(dossierTemplateId,
|
||||
componentMappingId,
|
||||
encoding,
|
||||
delimiter,
|
||||
mappingFile.toFile());
|
||||
try {
|
||||
ComponentMappingMetadata resultMetaData = componentMappingService.update(dossierTemplateId, componentMappingId, encoding, delimiter, mappingFile.toFile());
|
||||
|
||||
Files.deleteIfExists(mappingFile);
|
||||
|
||||
return componentMappingMapper.toModel(resultMetaData);
|
||||
return componentMappingMapper.toModel(resultMetaData);
|
||||
} finally {
|
||||
Files.deleteIfExists(mappingFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -279,7 +280,11 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource {
|
||||
|
||||
dossierTemplatePersistenceService.checkDossierTemplateExistsOrElseThrow404(dossierTemplateId);
|
||||
|
||||
componentMappingService.delete(dossierTemplateId, componentMappingId);
|
||||
try {
|
||||
componentMappingService.delete(dossierTemplateId, componentMappingId);
|
||||
} catch (Exception ignored) {
|
||||
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@ -140,7 +140,7 @@ public interface DossierTemplateResource {
|
||||
@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file,
|
||||
@Parameter(name = MAPPING_NAME_PARAM, description = "String of what the mapping should be accessible under. If left empty, the name of the file without the ending will be used as name.") @RequestParam(value = MAPPING_NAME_PARAM, required = false, defaultValue = "") String name,
|
||||
@Parameter(name = ENCODING_PARAM, description = "The encoding of the file. Default is UTF-8.") @RequestParam(value = ENCODING_PARAM, required = false, defaultValue = "UTF-8") String encoding,
|
||||
@Parameter(name = DELIMITER_PARAM, description = "The delimiter used in the file. Default is ','") @RequestParam(value = DELIMITER_PARAM, required = false, defaultValue = ",") char delimiter);
|
||||
@Parameter(name = DELIMITER_PARAM, description = "The delimiter used in the file. Default is ','") @RequestParam(value = DELIMITER_PARAM, required = false, defaultValue = ",") String delimiter);
|
||||
|
||||
|
||||
@Operation(summary = "Update an existing component mapping of a DossierTemplate.", description = "None")
|
||||
|
||||
@ -124,7 +124,7 @@ public class ComponentMappingService {
|
||||
}
|
||||
|
||||
|
||||
private static CsvStats sortCSVFile(char delimiter, File mappingFile, Charset charset) throws CsvException, BadRequestException, IOException {
|
||||
private static CsvStats sortCSVFile(char delimiter, File mappingFile, Charset charset) throws BadRequestException, IOException {
|
||||
|
||||
Path tempFile = Files.createTempFile("mapping", ".tmp");
|
||||
|
||||
@ -150,10 +150,12 @@ public class ComponentMappingService {
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new BadRequestException("Error while sorting the csv file", e);
|
||||
} catch (CsvException e) {
|
||||
throw new BadRequestException("The file could not be parsed as a csv file", e);
|
||||
} finally {
|
||||
Files.deleteIfExists(tempFile);
|
||||
}
|
||||
|
||||
Files.deleteIfExists(tempFile);
|
||||
|
||||
return new CsvStats(Arrays.asList(columnLabels), numberOfLines);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user