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
|
@Override
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@PreAuthorize("hasAuthority('" + WRITE_RULES + "')")
|
@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);
|
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)) {
|
if (Strings.isNullOrEmpty(nameToUse)) {
|
||||||
throw new BadRequestException("The provided file name is not valid!");
|
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);
|
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,
|
ComponentMappingMetadata metaData = componentMappingService.create(dossierTemplateId, nameToUse, fileName, cleanDelimiter, encoding, mappingFile.toFile());
|
||||||
nameToUse,
|
|
||||||
fileName,
|
|
||||||
delimiter,
|
|
||||||
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);
|
Path mappingFile = saveToFile(file);
|
||||||
|
|
||||||
com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentMappingMetadata resultMetaData = componentMappingService.update(dossierTemplateId,
|
try {
|
||||||
componentMappingId,
|
ComponentMappingMetadata resultMetaData = componentMappingService.update(dossierTemplateId, componentMappingId, encoding, delimiter, mappingFile.toFile());
|
||||||
encoding,
|
|
||||||
delimiter,
|
|
||||||
mappingFile.toFile());
|
|
||||||
|
|
||||||
Files.deleteIfExists(mappingFile);
|
return componentMappingMapper.toModel(resultMetaData);
|
||||||
|
} finally {
|
||||||
return componentMappingMapper.toModel(resultMetaData);
|
Files.deleteIfExists(mappingFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -279,7 +280,11 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource {
|
|||||||
|
|
||||||
dossierTemplatePersistenceService.checkDossierTemplateExistsOrElseThrow404(dossierTemplateId);
|
dossierTemplatePersistenceService.checkDossierTemplateExistsOrElseThrow404(dossierTemplateId);
|
||||||
|
|
||||||
componentMappingService.delete(dossierTemplateId, componentMappingId);
|
try {
|
||||||
|
componentMappingService.delete(dossierTemplateId, componentMappingId);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
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,
|
@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 = 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 = 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")
|
@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");
|
Path tempFile = Files.createTempFile("mapping", ".tmp");
|
||||||
|
|
||||||
@ -150,10 +150,12 @@ public class ComponentMappingService {
|
|||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new BadRequestException("Error while sorting the csv file", 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);
|
return new CsvStats(Arrays.asList(columnLabels), numberOfLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user