diff --git a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierTemplateControllerV2.java b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierTemplateControllerV2.java index c7a56bc04..9793ff987 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierTemplateControllerV2.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierTemplateControllerV2.java @@ -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); } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/DossierTemplateResource.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/DossierTemplateResource.java index 15a9ce5e9..0283e562a 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/DossierTemplateResource.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/DossierTemplateResource.java @@ -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") diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentMappingService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentMappingService.java index 82400e741..845f21b6c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentMappingService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentMappingService.java @@ -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); }