diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java index b766c71fb..139e438f2 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/PersistenceServiceExternalApiConfiguration.java @@ -3,7 +3,6 @@ package com.iqser.red.persistence.service.v1.external.api.impl; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; - @Configuration @ComponentScan public class PersistenceServiceExternalApiConfiguration { diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java index 2526597c0..47e7c759f 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java @@ -3,7 +3,6 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_APP_CONFIG; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_APP_CONFIG; - import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -31,7 +30,7 @@ public class ApplicationConfigurationController implements ApplicationConfigurat public ApplicationConfig createOrUpdateAppConfig(@Valid @RequestBody ApplicationConfig appConfig) { return MagicConverter.convert(applicationConfigService.saveApplicationConfiguration(MagicConverter.convert(appConfig, ApplicationConfigurationEntity.class)), - ApplicationConfig.class); + ApplicationConfig.class); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java index b8b7f6476..5af7be054 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java @@ -36,11 +36,11 @@ public class AuditController implements AuditResource { var auditModels = convert(auditPersistenceService.search(auditSearchRequest), AuditModel.class); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(auditSearchRequest.getObjectId()) - .category(AuditCategory.AUDIT.name()) - .message("Audit Log has been viewed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(auditSearchRequest.getObjectId()) + .category(AuditCategory.AUDIT.name()) + .message("Audit Log has been viewed.") + .build()); return new AuditResponse(auditModels.getElements(), auditModels.getTotalHits(), auditModels.getPage(), auditModels.getPageSize()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java index 28081d69b..56e093a9b 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ComponentLogController.java @@ -68,7 +68,8 @@ public class ComponentLogController implements ComponentLogResource { componentOverrideService.addOverrides(dossierId, fileId, componentsOverrides); - componentsOverrides.getComponentOverrides().forEach((componentName, overrideValue) -> auditOverride(dossierId, fileId, componentName, overrideValue, allComponents)); + componentsOverrides.getComponentOverrides() + .forEach((componentName, overrideValue) -> auditOverride(dossierId, fileId, componentName, overrideValue, allComponents)); } @@ -95,63 +96,68 @@ public class ComponentLogController implements ComponentLogResource { componentOverrideService.revertOverrides(dossierId, fileId, revertOverrideRequest); - revertOverrideRequest.getComponents().forEach(componentNameToRevert -> auditOverrideRevert(dossierId, fileId, componentNameToRevert, allComponents)); + revertOverrideRequest.getComponents() + .forEach(componentNameToRevert -> auditOverrideRevert(dossierId, fileId, componentNameToRevert, allComponents)); } private void auditOverride(String dossierId, String fileId, String componentName, String overrideValue, List allComponentLogEntries) { - Optional component = allComponentLogEntries.stream().filter(c -> c.getName().equals(componentName)).findFirst(); + Optional component = allComponentLogEntries.stream() + .filter(c -> c.getName().equals(componentName)) + .findFirst(); String originalValue = getOriginalValue(component); String value = getValue(component); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("The component is overwritten with value") - .details(Map.of(DOSSIER_ID, - dossierId, - FILE_ID, - fileId, - "ComponentName", - componentName, - "Action", - "MODIFY", - "OriginalValue", - originalValue, - "OldValue", - value, - "NewValue", - overrideValue)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("The component is overwritten with value") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + "ComponentName", + componentName, + "Action", + "MODIFY", + "OriginalValue", + originalValue, + "OldValue", + value, + "NewValue", + overrideValue)) + .build()); } private void auditOverrideRevert(String dossierId, String fileId, String componentNameToRevert, List allComponentLogEntries) { - Optional component = allComponentLogEntries.stream().filter(c -> c.getName().equals(componentNameToRevert)).findFirst(); + Optional component = allComponentLogEntries.stream() + .filter(c -> c.getName().equals(componentNameToRevert)) + .findFirst(); String originalValue = getOriginalValue(component); String value = getValue(component); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("The component override for was reverted") - .details(Map.of(DOSSIER_ID, - dossierId, - FILE_ID, - fileId, - "ComponentName", - componentNameToRevert, - "Action", - "REVERT", - "OriginalValue", - originalValue, - "OldValue", - value, - "NewValue", - originalValue)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("The component override for was reverted") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + "ComponentName", + componentNameToRevert, + "Action", + "REVERT", + "OriginalValue", + originalValue, + "OldValue", + value, + "NewValue", + originalValue)) + .build()); } @@ -159,7 +165,9 @@ public class ComponentLogController implements ComponentLogResource { return component.map(ComponentLogEntry::getComponentValues) .stream() - .map(a -> a.stream().map(ComponentLogEntryValue::getValue).collect(Collectors.joining(", "))) + .map(a -> a.stream() + .map(ComponentLogEntryValue::getValue) + .collect(Collectors.joining(", "))) .findFirst() .orElse(""); } @@ -169,7 +177,9 @@ public class ComponentLogController implements ComponentLogResource { return component.map(ComponentLogEntry::getComponentValues) .stream() - .map(a -> a.stream().map(ComponentLogEntryValue::getOriginalValue).collect(Collectors.joining(", "))) + .map(a -> a.stream() + .map(ComponentLogEntryValue::getOriginalValue) + .collect(Collectors.joining(", "))) .findFirst() .orElse(""); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java index bdb313aef..f513966e4 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java @@ -1,4 +1,4 @@ - package com.iqser.red.persistence.service.v1.external.api.impl.controller; +package com.iqser.red.persistence.service.v1.external.api.impl.controller; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -10,7 +10,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; - import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -68,12 +67,12 @@ public class DictionaryController implements DictionaryResource { addEntries(type, dossierTemplateId, entries, removeCurrent, dossierId, dictionaryEntryType); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary entries were added.") - .details(Map.of("Type", type, "Number", entries.size())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary entries were added.") + .details(Map.of("Type", type, "Number", entries.size())) + .build()); } @@ -98,12 +97,12 @@ public class DictionaryController implements DictionaryResource { deleteEntries(type, dossierTemplateId, Arrays.asList(entry), dossierId, dictionaryEntryType); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary entry was deleted.") - .details(Map.of("Type", type, "Value", entry)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary entry was deleted.") + .details(Map.of("Type", type, "Value", entry)) + .build()); } @@ -122,12 +121,12 @@ public class DictionaryController implements DictionaryResource { } auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary entries were deleted.") - .details(Map.of("Type", type, "Number", entries.size())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary entries were deleted.") + .details(Map.of("Type", type, "Number", entries.size())) + .build()); } @@ -139,12 +138,12 @@ public class DictionaryController implements DictionaryResource { dictionaryService.updateGlobalType(type, dossierTemplateId, typeValue); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary type was updated.") - .details(Map.of("Type", type)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary type was updated.") + .details(Map.of("Type", type)) + .build()); } @@ -154,36 +153,34 @@ public class DictionaryController implements DictionaryResource { Type result = dictionaryService.addGlobalType(typeValue); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(typeValue.getDossierTemplateId()) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary type was added.") - .details(Map.of("Type", typeValue.getType())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(typeValue.getDossierTemplateId()) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary type was added.") + .details(Map.of("Type", typeValue.getType())) + .build()); return MagicConverter.convert(result, TypeValue.class, new TypeValueMapper()); } @Override - public void deleteType(@PathVariable(TYPE_PARAMETER_NAME) String type, - @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { + public void deleteType(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { dictionaryService.deleteGlobalType(type, dossierTemplateId); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary type was deleted.") - .details(Map.of("Type", type)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary type was deleted.") + .details(Map.of("Type", type)) + .build()); } @Override - public void deleteTypes(@RequestBody List types, - @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { + public void deleteTypes(@RequestBody List types, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { List errorIds = new ArrayList<>(); @@ -192,12 +189,12 @@ public class DictionaryController implements DictionaryResource { dictionaryService.deleteGlobalType(type, dossierTemplateId); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary type was deleted.") - .details(Map.of("Type", type)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary type was deleted.") + .details(Map.of("Type", type)) + .build()); } catch (FeignException e) { errorIds.add(type); } @@ -235,19 +232,25 @@ public class DictionaryController implements DictionaryResource { validateFile(file); try { - addEntries(type, dossierTemplateId, new String(file.getBytes(), StandardCharsets.UTF_8).lines().collect(Collectors.toList()), true, dossierId, dictionaryEntryType); + addEntries(type, + dossierTemplateId, + new String(file.getBytes(), StandardCharsets.UTF_8).lines() + .collect(Collectors.toList()), + true, + dossierId, + dictionaryEntryType); } catch (IOException e) { log.debug(e.getMessage(), e); throw new BadRequestException("Could not upload file.", e); } auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DICTIONARY.name()) - .message("Dictionary has been uploaded.") - .details(Map.of("Type", type)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DICTIONARY.name()) + .message("Dictionary has been uploaded.") + .details(Map.of("Type", type)) + .build()); } @@ -296,26 +299,27 @@ public class DictionaryController implements DictionaryResource { return dictionaryService.getDictionaryForType(type, dossierTemplateId, dossierId); } + @Override public Dictionary getMergedDictionaries(@PathVariable(TYPE_PARAMETER_NAME) String type, - @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, - @RequestParam(value = DOSSIER_ID_PARAMETER_NAME) String dossierId) { + @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @RequestParam(value = DOSSIER_ID_PARAMETER_NAME) String dossierId) { + return dictionaryService.getMergedDictionaryForType(type, dossierTemplateId, dossierId); } - @Override public void setColors(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody Colors colors) { dictionaryService.setColors(dossierTemplateId, colors); auditClient.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Colors have been changed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Colors have been changed.") + .build()); } } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java index 631e592c5..a3ee69f2a 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DigitalSignatureController.java @@ -52,11 +52,11 @@ public class DigitalSignatureController implements DigitalSignatureResource { digitalSignatureTypeService.setActiveDigitalSignatureType(digitalSignatureType); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(DIGITAL_SIGNATURE_AUDIT_ID) - .category(AuditCategory.SETTINGS.name()) - .message("Digital signature type has been updated.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(DIGITAL_SIGNATURE_AUDIT_ID) + .category(AuditCategory.SETTINGS.name()) + .message("Digital signature type has been updated.") + .build()); } @@ -66,11 +66,11 @@ public class DigitalSignatureController implements DigitalSignatureResource { DigitalSignatureViewModel digitalSignatureViewModel = convertToView(digitalSignatureService.saveDigitalSignature(convert(digitalSignatureModel))); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(DIGITAL_SIGNATURE_AUDIT_ID) - .category(AuditCategory.SETTINGS.name()) - .message("Digital signature has been saved.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(DIGITAL_SIGNATURE_AUDIT_ID) + .category(AuditCategory.SETTINGS.name()) + .message("Digital signature has been saved.") + .build()); return digitalSignatureViewModel; } @@ -82,11 +82,11 @@ public class DigitalSignatureController implements DigitalSignatureResource { digitalSignatureService.updateDigitalSignature(convert(digitalSignatureModel)); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(DIGITAL_SIGNATURE_AUDIT_ID) - .category(AuditCategory.SETTINGS.name()) - .message("Digital signature has been updated.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(DIGITAL_SIGNATURE_AUDIT_ID) + .category(AuditCategory.SETTINGS.name()) + .message("Digital signature has been updated.") + .build()); } @@ -104,11 +104,11 @@ public class DigitalSignatureController implements DigitalSignatureResource { digitalSignatureService.deleteDigitalSignature(); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(DIGITAL_SIGNATURE_AUDIT_ID) - .category(AuditCategory.SETTINGS.name()) - .message("Digital signature has been deleted.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(DIGITAL_SIGNATURE_AUDIT_ID) + .category(AuditCategory.SETTINGS.name()) + .message("Digital signature has been deleted.") + .build()); } @@ -118,11 +118,11 @@ public class DigitalSignatureController implements DigitalSignatureResource { DigitalSignatureKmsViewModel result = convert(digitalSignatureKmsService.saveDigitalSignature(digitalSignature)); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(DIGITAL_SIGNATURE_AUDIT_ID) - .category(AuditCategory.SETTINGS.name()) - .message("Digital KMS signature has been saved.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(DIGITAL_SIGNATURE_AUDIT_ID) + .category(AuditCategory.SETTINGS.name()) + .message("Digital KMS signature has been saved.") + .build()); return result; } @@ -141,11 +141,11 @@ public class DigitalSignatureController implements DigitalSignatureResource { digitalSignatureKmsService.deleteDigitalSignature(); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(DIGITAL_SIGNATURE_AUDIT_ID) - .category(AuditCategory.SETTINGS.name()) - .message("Digital KMS signature has been deleted.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(DIGITAL_SIGNATURE_AUDIT_ID) + .category(AuditCategory.SETTINGS.name()) + .message("Digital KMS signature has been deleted.") + .build()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java index 10d545a50..ec33c855d 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java @@ -50,13 +50,15 @@ public class DossierAttributesController implements DossierAttributesResource { public DossierAttributesConfig setDossierAttributesConfig(String dossierTemplateId, DossierAttributesConfig dossierAttributesConfig) { var result = MagicConverter.convert(dossierAttributeConfigPersistenceService.setDossierAttributesConfig(dossierTemplateId, - MagicConverter.convert(dossierAttributesConfig.getDossierAttributeConfigs(), DossierAttributeConfigEntity.class)), DossierAttributeConfig.class); + MagicConverter.convert(dossierAttributesConfig.getDossierAttributeConfigs(), + DossierAttributeConfigEntity.class)), + DossierAttributeConfig.class); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Changed dossier attributes base configuration.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Changed dossier attributes base configuration.") + .build()); return new DossierAttributesConfig(result); } @@ -68,13 +70,15 @@ public class DossierAttributesController implements DossierAttributesResource { @RequestBody DossierAttributeConfig dossierAttribute) { var result = MagicConverter.convert(dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, - MagicConverter.convert(dossierAttribute, DossierAttributeConfigEntity.class)), DossierAttributeConfig.class); + MagicConverter.convert(dossierAttribute, + DossierAttributeConfigEntity.class)), + DossierAttributeConfig.class); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier attributes added/updated") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier attributes added/updated") + .build()); return result; } @@ -86,12 +90,12 @@ public class DossierAttributesController implements DossierAttributesResource { dossierAttributeConfigPersistenceService.deleteDossierAttribute(dossierAttributeId); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier attributes removed") - .details(Map.of("DossierAttributeId", dossierAttributeId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier attributes removed") + .details(Map.of("DossierAttributeId", dossierAttributeId)) + .build()); } @@ -101,12 +105,12 @@ public class DossierAttributesController implements DossierAttributesResource { dossierAttributeConfigPersistenceService.deleteDossierAttributes(dossierAttributeIds); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier attributes removed") - .details(Map.of("DossierAttributeId", dossierAttributeIds)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier attributes removed") + .details(Map.of("DossierAttributeId", dossierAttributeIds)) + .build()); } @@ -125,11 +129,11 @@ public class DossierAttributesController implements DossierAttributesResource { accessControlService.verifyUserIsDossierOwner(dossierId); var result = dossierAttributesManagementService.setDossierAttributes(dossierId, dossierAttributes.getDossierAttributeList()); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Changed dossier attributes.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Changed dossier attributes.") + .build()); return new DossierAttributes(result); } @@ -142,11 +146,11 @@ public class DossierAttributesController implements DossierAttributesResource { accessControlService.verifyUserIsDossierOwner(dossierId); DossierAttribute result = dossierAttributesManagementService.addOrUpdateDossierAttribute(dossierId, dossierAttribute); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Added or updated dossier attributes.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Added or updated dossier attributes.") + .build()); return new DossierAttributes(List.of(result)); // TODO should be single Object??? } @@ -162,11 +166,11 @@ public class DossierAttributesController implements DossierAttributesResource { result = dossierAttributesManagementService.getDossierAttributes(dossierId); } auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Got dossier attributes.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Got dossier attributes.") + .build()); return new DossierAttributes(result); } @@ -179,11 +183,11 @@ public class DossierAttributesController implements DossierAttributesResource { accessControlService.verifyUserIsDossierOwner(dossierId); dossierAttributesManagementService.deleteDossierAttribute(dossierId, dossierAttributeId); auditPersistenceService.insertRecord(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Changed dossier attributes.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Changed dossier attributes.") + .build()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java index bbece0f07..29e1953ec 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierController.java @@ -112,8 +112,8 @@ public class DossierController implements DossierResource { Set approvers = getAndValidateMembers(ownerId, dossierRequest.getApproverIds()); members.addAll(approvers); - if ((dossierRequest.getDownloadFileTypes() == null || dossierRequest.getDownloadFileTypes() - .isEmpty()) && (dossierRequest.getReportTemplateIds() == null || dossierRequest.getReportTemplateIds().isEmpty())) { + if ((dossierRequest.getDownloadFileTypes() == null || dossierRequest.getDownloadFileTypes().isEmpty()) && (dossierRequest.getReportTemplateIds() == null + || dossierRequest.getReportTemplateIds().isEmpty())) { throw new BadRequestException("Download and report types cannot both be empty"); } @@ -128,16 +128,16 @@ public class DossierController implements DossierResource { // update using data from request and computed owner/members/approvers Dossier updatedDossier = dossierManagementService.updateDossier(CreateOrUpdateDossierRequest.builder() - .dossierName(dossierRequest.getDossierName()) - .description(dossierRequest.getDescription()) - .dossierTemplateId(dossierRequest.getDossierTemplateId()) - .downloadFileTypes(dossierRequest.getDownloadFileTypes()) - .dueDate(dossierRequest.getDueDate()) - .reportTemplateIds(new ArrayList<>(dossierRequest.getReportTemplateIds())) - .watermarkId(dossierRequest.getWatermarkId()) - .previewWatermarkId(dossierRequest.getPreviewWatermarkId()) - .dossierStatusId(dossierRequest.getDossierStatusId()) - .build(), existingDossier.getId()); + .dossierName(dossierRequest.getDossierName()) + .description(dossierRequest.getDescription()) + .dossierTemplateId(dossierRequest.getDossierTemplateId()) + .downloadFileTypes(dossierRequest.getDownloadFileTypes()) + .dueDate(dossierRequest.getDueDate()) + .reportTemplateIds(new ArrayList<>(dossierRequest.getReportTemplateIds())) + .watermarkId(dossierRequest.getWatermarkId()) + .previewWatermarkId(dossierRequest.getPreviewWatermarkId()) + .dossierStatusId(dossierRequest.getDossierStatusId()) + .build(), existingDossier.getId()); dossierACLService.updateDossierACL(members, approvers, ownerId, updatedDossier.getId()); dossierACLService.enhanceDossierWithACLData(updatedDossier); @@ -145,28 +145,28 @@ public class DossierController implements DossierResource { updateFileStatusForDossierFiles(updatedDossier.getId(), members); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(updatedDossier.getId()) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier has been updated.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(updatedDossier.getId()) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier has been updated.") + .build()); if (existingDossier.getOwnerId() == null || !existingDossier.getOwnerId().equals(ownerId)) { if (ownerId != null && !ownerId.equals(KeycloakSecurity.getUserId())) { notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(ownerId) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.DOSSIER_OWNER_SET.name()) - .target(Map.of("dossierId", dossierRequest.getDossierId())) - .build()); + .userId(ownerId) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.DOSSIER_OWNER_SET.name()) + .target(Map.of("dossierId", dossierRequest.getDossierId())) + .build()); } if (existingDossier.getOwnerId() != null && !existingDossier.getOwnerId().equals(KeycloakSecurity.getUserId())) { notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(existingDossier.getOwnerId()) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.DOSSIER_OWNER_REMOVED.name()) - .target(Map.of("dossierId", dossierRequest.getDossierId())) - .build()); + .userId(existingDossier.getOwnerId()) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.DOSSIER_OWNER_REMOVED.name()) + .target(Map.of("dossierId", dossierRequest.getDossierId())) + .build()); } } @@ -174,46 +174,48 @@ public class DossierController implements DossierResource { uniqueMembers.addAll(approvers); uniqueMembers.stream() - .filter(member -> !member.equals(ownerId) && !member.equals(KeycloakSecurity.getUserId()) && (existingDossier.getMemberIds() == null || !existingDossier.getMemberIds() - .contains(member))) + .filter(member -> !member.equals(ownerId) && !member.equals(KeycloakSecurity.getUserId()) && (existingDossier.getMemberIds() == null + || !existingDossier.getMemberIds().contains(member))) .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(member) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.USER_BECOMES_DOSSIER_MEMBER.name()) - .target(Map.of("dossierId", dossierRequest.getDossierId())) - .build())); + .userId(member) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.USER_BECOMES_DOSSIER_MEMBER.name()) + .target(Map.of("dossierId", dossierRequest.getDossierId())) + .build())); if (existingDossier.getMemberIds() != null) { existingDossier.getMemberIds() .stream() .filter(member -> !members.contains(member) && !approvers.contains(member) && !member.equals(KeycloakSecurity.getUserId())) .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(member) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.USER_REMOVED_AS_DOSSIER_MEMBER.name()) - .target(Map.of("dossierId", dossierRequest.getDossierId())) - .build())); + .userId(member) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.USER_REMOVED_AS_DOSSIER_MEMBER.name()) + .target(Map.of("dossierId", dossierRequest.getDossierId())) + .build())); } approvers.stream() .filter(approver -> !KeycloakSecurity.getUserId().equals(approver) && existingDossier.getMemberIds() != null && existingDossier.getMemberIds() .contains(approver) && (existingDossier.getApproverIds() == null || !existingDossier.getApproverIds().contains(approver))) .forEach(approver -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(approver) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.USER_PROMOTED_TO_APPROVER.name()) - .target(Map.of("dossierId", dossierRequest.getDossierId())) - .build())); + .userId(approver) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.USER_PROMOTED_TO_APPROVER.name()) + .target(Map.of("dossierId", dossierRequest.getDossierId())) + .build())); members.stream() - .filter(member -> !member.equals(KeycloakSecurity.getUserId()) && existingDossier.getApproverIds() != null && existingDossier.getApproverIds() - .contains(member) && !approvers.contains(member)) + .filter(member -> !member.equals(KeycloakSecurity.getUserId()) + && existingDossier.getApproverIds() != null + && existingDossier.getApproverIds().contains(member) + && !approvers.contains(member)) .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(member) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.USER_DEGRADED_TO_REVIEWER.name()) - .target(Map.of("dossierId", dossierRequest.getDossierId())) - .build())); + .userId(member) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.USER_DEGRADED_TO_REVIEWER.name()) + .target(Map.of("dossierId", dossierRequest.getDossierId())) + .build())); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); @@ -223,11 +225,11 @@ public class DossierController implements DossierResource { Dossier created = createNewDossier(dossierRequest, ownerId, members, approvers); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(created.getId()) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier has been created.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(created.getId()) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier has been created.") + .build()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); @@ -254,7 +256,9 @@ public class DossierController implements DossierResource { } // check he has a manager role, thus he can be the owner - if (user.isPresent() && user.get().getRoles().stream().noneMatch(ApplicationRoles.RED_MANAGER_ROLE::equals)) { + if (user.isPresent() && user.get().getRoles() + .stream() + .noneMatch(ApplicationRoles.RED_MANAGER_ROLE::equals)) { throw new BadRequestException("Make sure provided user id has the manager role."); } @@ -266,7 +270,8 @@ public class DossierController implements DossierResource { private Set getAndValidateMembers(String ownerId, Set memberIds) { Set actualMemberIds = memberIds == null ? new TreeSet<>() : memberIds; - if (actualMemberIds.stream().anyMatch(Objects::isNull)) { + if (actualMemberIds.stream() + .anyMatch(Objects::isNull)) { throw new BadRequestException("Member IDs cannot be null"); } @@ -280,7 +285,10 @@ public class DossierController implements DossierResource { Set deletedUserIds = userService.removeDeletedUsers(actualMemberIds); actualMemberIds.removeAll(deletedUserIds); } - if (users.stream().anyMatch(u -> u.getRoles().stream().noneMatch(VALID_MEMBER_ROLES::contains))) { + if (users.stream() + .anyMatch(u -> u.getRoles() + .stream() + .noneMatch(VALID_MEMBER_ROLES::contains))) { throw new BadRequestException("Make sure each provided member id has the permission to be a member of a dossier."); } return actualMemberIds; @@ -299,12 +307,15 @@ public class DossierController implements DossierResource { private void updateFileStatusForDossierFiles(String dossierId, Collection members) { - fileStatusManagementService.getDossierStatus(dossierId).stream().filter(fileStatus -> !fileStatus.isSoftOrHardDeleted()).forEach(f -> { + fileStatusManagementService.getDossierStatus(dossierId) + .stream() + .filter(fileStatus -> !fileStatus.isSoftOrHardDeleted()) + .forEach(f -> { - if (f.getAssignee() != null && !members.contains(f.getAssignee())) { - fileStatusManagementService.setCurrentFileAssignee(dossierId, f.getId(), null); - } - }); + if (f.getAssignee() != null && !members.contains(f.getAssignee())) { + fileStatusManagementService.setCurrentFileAssignee(dossierId, f.getId(), null); + } + }); } @@ -312,16 +323,17 @@ public class DossierController implements DossierResource { private Dossier createNewDossier(DossierRequest dossier, String ownerId, Set members, Set approvers) { Dossier newDossier = dossierCreatorService.addDossier(CreateOrUpdateDossierRequest.builder() - .dossierName(dossier.getDossierName().trim()) - .description(dossier.getDescription()) - .dossierTemplateId(dossier.getDossierTemplateId()) - .downloadFileTypes(dossier.getDownloadFileTypes()) - .dueDate(dossier.getDueDate()) - .reportTemplateIds(dossier.getReportTemplateIds() != null ? new ArrayList<>(dossier.getReportTemplateIds()) : Lists.newArrayList()) - .watermarkId(dossier.getWatermarkId()) - .previewWatermarkId(dossier.getPreviewWatermarkId()) - .dossierStatusId(dossier.getDossierStatusId()) - .build(), members, approvers, ownerId); + .dossierName(dossier.getDossierName().trim()) + .description(dossier.getDescription()) + .dossierTemplateId(dossier.getDossierTemplateId()) + .downloadFileTypes(dossier.getDownloadFileTypes()) + .dueDate(dossier.getDueDate()) + .reportTemplateIds(dossier.getReportTemplateIds() + != null ? new ArrayList<>(dossier.getReportTemplateIds()) : Lists.newArrayList()) + .watermarkId(dossier.getWatermarkId()) + .previewWatermarkId(dossier.getPreviewWatermarkId()) + .dossierStatusId(dossier.getDossierStatusId()) + .build(), members, approvers, ownerId); dossierACLService.enhanceDossierWithACLData(newDossier); @@ -358,21 +370,21 @@ public class DossierController implements DossierResource { dossierManagementService.delete(dossierId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier moved to trash.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier moved to trash.") + .build()); dossier.getMemberIds() .stream() .filter(m -> !KeycloakSecurity.getUserId().equals(m)) .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(member) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.DOSSIER_DELETED.name()) - .target(Map.of("dossierId", dossierId, "dossierName", dossier.getDossierName())) - .build())); + .userId(member) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.DOSSIER_DELETED.name()) + .target(Map.of("dossierId", dossierId, "dossierName", dossier.getDossierName())) + .build())); } @@ -393,7 +405,10 @@ public class DossierController implements DossierResource { public List getDossiers(@RequestParam(name = INCLUDE_ARCHIVED_PARAM, defaultValue = "false", required = false) boolean includeArchived, @RequestParam(name = INCLUDE_DELETED_PARAM, defaultValue = "false", required = false) boolean includeDeleted) { - return dossierManagementService.getAllDossiers(includeArchived, includeDeleted).stream().map(dossierACLService::enhanceDossierWithACLData).collect(Collectors.toList()); + return dossierManagementService.getAllDossiers(includeArchived, includeDeleted) + .stream() + .map(dossierACLService::enhanceDossierWithACLData) + .collect(Collectors.toList()); } @@ -414,7 +429,10 @@ public class DossierController implements DossierResource { @PostFilter("hasPermission(filterObject.id, 'Dossier', 'VIEW_OBJECT')") public List getSoftDeletedDossiers() { - return dossierManagementService.getSoftDeletedDossiers().stream().map(dossierACLService::enhanceDossierWithACLData).collect(Collectors.toList()); + return dossierManagementService.getSoftDeletedDossiers() + .stream() + .map(dossierACLService::enhanceDossierWithACLData) + .collect(Collectors.toList()); } @@ -423,7 +441,10 @@ public class DossierController implements DossierResource { @PostFilter("hasPermission(filterObject.id, 'Dossier', 'VIEW_OBJECT')") public List getArchivedDossiers() { - return dossierManagementService.getArchivedDossiers().stream().map(dossierACLService::enhanceDossierWithACLData).collect(Collectors.toList()); + return dossierManagementService.getArchivedDossiers() + .stream() + .map(dossierACLService::enhanceDossierWithACLData) + .collect(Collectors.toList()); } @@ -449,11 +470,11 @@ public class DossierController implements DossierResource { for (String dossierId : dossierIds) { auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier archived.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier archived.") + .build()); } } @@ -466,11 +487,11 @@ public class DossierController implements DossierResource { for (String dossierId : dossierIds) { auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier restored from archive.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier restored from archive.") + .build()); } } @@ -486,11 +507,11 @@ public class DossierController implements DossierResource { for (String dossierId : filteredDossierIds) { auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier permanently deleted.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier permanently deleted.") + .build()); } } @@ -506,11 +527,11 @@ public class DossierController implements DossierResource { for (String dossierId : filteredDossierIds) { auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Dossier restored from trash.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Dossier restored from trash.") + .build()); } } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java index 860a6cd5c..905b653eb 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatsController.java @@ -44,7 +44,9 @@ public class DossierStatsController implements DossierStatsResource { @PreFilter("hasPermission(filterObject, 'Dossier', 'VIEW_OBJECT')") public List getDossierStats(@RequestBody Set dossierIds) { - return dossierIds.stream().map(dossierStatsService::getDossierStats).collect(Collectors.toList()); + return dossierIds.stream() + .map(dossierStatsService::getDossierStats) + .collect(Collectors.toList()); } } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java index 15fff1353..d2a8efc4d 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java @@ -50,13 +50,13 @@ public class DossierStatusController implements DossierStatusResource { throw new BadRequestException("The rank must not be negative"); } var response = dossierStatusPersistenceService.createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest.builder() - .dossierStatusId(dossierStatusRequest.getDossierStatusId()) - .name(dossierStatusRequest.getName()) - .description(dossierStatusRequest.getDescription()) - .dossierTemplateId(dossierStatusRequest.getDossierTemplateId()) - .rank(dossierStatusRequest.getRank()) - .color(dossierStatusRequest.getColor()) - .build()); + .dossierStatusId(dossierStatusRequest.getDossierStatusId()) + .name(dossierStatusRequest.getName()) + .description(dossierStatusRequest.getDescription()) + .dossierTemplateId(dossierStatusRequest.getDossierTemplateId()) + .rank(dossierStatusRequest.getRank()) + .color(dossierStatusRequest.getColor()) + .build()); return MagicConverter.convert(response, DossierStatusInfo.class); } @@ -94,8 +94,4 @@ public class DossierStatusController implements DossierStatusResource { dossierStatusPersistenceService.deleteDossierStatus(dossierStatusId, replaceDossierStatusId); } - - - - } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java index a90da71b6..1ca33b9e9 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierTemplateController.java @@ -77,11 +77,11 @@ public class DossierTemplateController implements DossierTemplateResource { DossierTemplateModel response = convert(dossierTemplateManagementService.createOrUpdateDossierTemplate(dossierTemplate)); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(response.getDossierTemplateId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier Template has been added or updated") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(response.getDossierTemplateId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier Template has been added or updated") + .build()); return response; } catch (FeignException e) { throw processFeignException(e); @@ -94,7 +94,10 @@ public class DossierTemplateController implements DossierTemplateResource { @PreAuthorize("hasAuthority('" + READ_DOSSIER_TEMPLATES + "')") public List getAllDossierTemplates() { - return dossierTemplateManagementService.getAllDossierTemplates().stream().map(this::convert).collect(Collectors.toList()); + return dossierTemplateManagementService.getAllDossierTemplates() + .stream() + .map(this::convert) + .collect(Collectors.toList()); } @@ -117,17 +120,18 @@ public class DossierTemplateController implements DossierTemplateResource { String userId = KeycloakSecurity.getUserId(); List dossiers = dossierManagementService.getAllDossiers(true, false); - if (dossiers != null && dossiers.stream().anyMatch(dossier -> dossier.getDossierTemplateId().equals(dossierTemplateId))) { + if (dossiers != null && dossiers.stream() + .anyMatch(dossier -> dossier.getDossierTemplateId().equals(dossierTemplateId))) { throw new ConflictException("Can not delete dossier template because there are dossiers based on it"); } dossierTemplateManagementService.deleteDossierTemplate(dossierTemplateId, userId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier Template has been deleted") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier Template has been deleted") + .build()); } @@ -141,17 +145,18 @@ public class DossierTemplateController implements DossierTemplateResource { for (String dossierTemplateId : dossierTemplateIds) { try { List dossiers = dossierManagementService.getAllDossiers(true, false); - if (dossiers != null && dossiers.stream().anyMatch(dossier -> dossier.getDossierTemplateId().equals(dossierTemplateId))) { + if (dossiers != null && dossiers.stream() + .anyMatch(dossier -> dossier.getDossierTemplateId().equals(dossierTemplateId))) { throw new ConflictException("Can not delete dossier template because there are dossiers based on it"); } dossierTemplateManagementService.deleteDossierTemplate(dossierTemplateId, userId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier template has been deleted") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier template has been deleted") + .build()); } catch (FeignException e) { errorIds.add(dossierTemplateId); } @@ -174,11 +179,11 @@ public class DossierTemplateController implements DossierTemplateResource { DossierTemplateModel response = convert(dossierTemplateManagementService.cloneDossierTemplate(dossierTemplateId, cloneDossierTemplateRequest)); auditPersistenceService.audit(AuditRequest.builder() - .userId(userId) - .objectId(response.getDossierTemplateId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier Template has been cloned") - .build()); + .userId(userId) + .objectId(response.getDossierTemplateId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier Template has been cloned") + .build()); return response; } catch (FeignException e) { throw processFeignException(e); @@ -221,12 +226,12 @@ public class DossierTemplateController implements DossierTemplateResource { ExportDownloadRequest request = ExportDownloadRequest.builder().dossierTemplateId(dossierTemplateId).userId(KeycloakSecurity.getUserId()).build(); var response = dossierTemplateManagementService.prepareExportDownload(request); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(response.getValue()) - .category(AuditCategory.DOWNLOAD.name()) - .message("Export Download was prepared") - .details(Map.of("dossierTemplateId", request.getDossierTemplateId())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(response.getValue()) + .category(AuditCategory.DOWNLOAD.name()) + .message("Export Download was prepared") + .details(Map.of("dossierTemplateId", request.getDossierTemplateId())) + .build()); return new DownloadResponse(response.getValue()); } catch (FeignException e) { throw processFeignException(e); @@ -262,12 +267,12 @@ public class DossierTemplateController implements DossierTemplateResource { .build(); DossierTemplate loadedDossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(loadedDossierTemplate.getId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Dossier template was imported") - .details(Map.of("dossierTemplateId", loadedDossierTemplate.getId())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(loadedDossierTemplate.getId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Dossier template was imported") + .details(Map.of("dossierTemplateId", loadedDossierTemplate.getId())) + .build()); return convert(loadedDossierTemplate); } catch (IOException e) { throw new BadRequestException(e.getMessage(), e); @@ -283,7 +288,8 @@ public class DossierTemplateController implements DossierTemplateResource { private void enhanceDossierTemplateStatsWithACLMemberDetails(DossierTemplateStats stats) { Set members = new HashSet<>(); - stats.getDossiersInTemplate().forEach(d -> members.addAll(dossierACLService.getMembers(d))); + stats.getDossiersInTemplate() + .forEach(d -> members.addAll(dossierACLService.getMembers(d))); stats.setNumberOfPeople(members.size()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java index 12e5b973c..e743db082 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DownloadController.java @@ -127,12 +127,12 @@ public class DownloadController implements DownloadResource { var response = downloadService.prepareDownload(convert(request)); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(response.getValue()) - .category(AuditCategory.DOWNLOAD.name()) - .message("Download was prepared") - .details(Map.of("dossierId", request.getDossierId())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(response.getValue()) + .category(AuditCategory.DOWNLOAD.name()) + .message("Download was prepared") + .details(Map.of("dossierId", request.getDossierId())) + .build()); return new DownloadResponse(response.getValue()); } @@ -152,23 +152,33 @@ public class DownloadController implements DownloadResource { List validFiles = fileStatusService.getDossierStatus(request.getDossierId()); var fileIds = request.getFileIds(); if (fileIds != null && !fileIds.isEmpty()) { // validate the ids provided - validFiles = validFiles.stream().filter(f -> fileIds.contains(f.getId())).collect(Collectors.toList()); + validFiles = validFiles.stream() + .filter(f -> fileIds.contains(f.getId())) + .collect(Collectors.toList()); if (validFiles.isEmpty()) { throw new NotFoundException("No file id provided is found"); } } // otherwise consider the files from dossier - var validFilesAndNotProcessed = validFiles.stream().filter(f -> !(f.getAnalysisVersion() > 0 && f.getNumberOfAnalyses() > 0)).collect(Collectors.toList()); + var validFilesAndNotProcessed = validFiles.stream() + .filter(f -> !(f.getAnalysisVersion() > 0 && f.getNumberOfAnalyses() > 0)) + .collect(Collectors.toList()); if (!validFilesAndNotProcessed.isEmpty()) { throw new BadRequestException("At least a file is in its initial analysis process"); } - request.setFileIds(validFiles.stream().map(FileModel::getId).collect(Collectors.toList())); - var approvedFiles = validFiles.stream().filter(f -> f.getWorkflowStatus().equals(WorkflowStatus.APPROVED)).toList(); + request.setFileIds(validFiles.stream() + .map(FileModel::getId) + .collect(Collectors.toList())); + var approvedFiles = validFiles.stream() + .filter(f -> f.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) + .toList(); // special corner case: unapproved files, no reports and only REDACTED type selected - if (approvedFiles.isEmpty() && (request.getReportTemplateIds() == null || request.getReportTemplateIds() - .isEmpty()) && request.getDownloadFileTypes() != null && request.getDownloadFileTypes().size() == 1 && request.getDownloadFileTypes() - .contains(DownloadFileType.REDACTED)) { + if (approvedFiles.isEmpty() + && (request.getReportTemplateIds() == null || request.getReportTemplateIds().isEmpty()) + && request.getDownloadFileTypes() != null + && request.getDownloadFileTypes().size() == 1 + && request.getDownloadFileTypes().contains(DownloadFileType.REDACTED)) { throw new BadRequestException("Unapproved files in redacted state with no reports cannot be included"); } } @@ -192,28 +202,29 @@ public class DownloadController implements DownloadResource { @PreAuthorize("hasAuthority('" + PROCESS_DOWNLOAD + "')") public void deleteDownloadStatus(@RequestBody RemoveDownloadRequest removeDownloadRequest) { - removeDownloadRequest.getStorageIds().forEach(storageId -> { - downloadService.deleteDownloadStatus(JSONPrimitive.of(storageId)); + removeDownloadRequest.getStorageIds() + .forEach(storageId -> { + downloadService.deleteDownloadStatus(JSONPrimitive.of(storageId)); - fileManagementStorageService.deleteObject(storageId); + fileManagementStorageService.deleteObject(storageId); - if (storageBackend.equals("s3")) { - var storageIdForS3 = generateReportJsonStorageIdForS3(storageId); - log.info("Deleting Report Json from S3 Storage {}", storageIdForS3); - fileManagementStorageService.deleteObject(storageIdForS3); - } else { - var storageIdForAzure = generateReportJsonStorageIdForAzure(storageId); - log.info("Deleting Report Json from Azure Storage {}", storageIdForAzure); - fileManagementStorageService.deleteObject(storageIdForAzure); - } + if (storageBackend.equals("s3")) { + var storageIdForS3 = generateReportJsonStorageIdForS3(storageId); + log.info("Deleting Report Json from S3 Storage {}", storageIdForS3); + fileManagementStorageService.deleteObject(storageIdForS3); + } else { + var storageIdForAzure = generateReportJsonStorageIdForAzure(storageId); + log.info("Deleting Report Json from Azure Storage {}", storageIdForAzure); + fileManagementStorageService.deleteObject(storageIdForAzure); + } - auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(storageId) - .category(AuditCategory.DOWNLOAD.name()) - .message("Remove Prepared Download") - .build()); - }); + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(storageId) + .category(AuditCategory.DOWNLOAD.name()) + .message("Remove Prepared Download") + .build()); + }); } @@ -249,7 +260,9 @@ public class DownloadController implements DownloadResource { private DownloadStatus getDownloadStatus(String storageId, String userId) { // TODO Add endpoint to get single download status for userId and storageId. var downloadStatusResponse = downloadService.getDownloadStatus(userId); - Optional downloadStatusOptional = downloadStatusResponse.stream().filter(ds -> ds.getStorageId().equals(storageId)).findFirst(); + Optional downloadStatusOptional = downloadStatusResponse.stream() + .filter(ds -> ds.getStorageId().equals(storageId)) + .findFirst(); return downloadStatusOptional.orElseThrow(() -> new NotFoundException("Download status not found for this user")); } @@ -261,11 +274,11 @@ public class DownloadController implements DownloadResource { var response = storageService.getObject(TenantContext.getTenantId(), storageId); auditPersistenceService.audit(AuditRequest.builder() - .userId(userId) - .objectId(storageId) - .category(AuditCategory.DOWNLOAD.name()) - .message("File was downloaded.") - .build()); + .userId(userId) + .objectId(storageId) + .category(AuditCategory.DOWNLOAD.name()) + .message("File was downloaded.") + .build()); downloadService.setDownloaded(JSONPrimitive.of(storageId)); return new InputStreamResource(new BufferedInputStream(response.getInputStream())); @@ -286,8 +299,7 @@ public class DownloadController implements DownloadResource { @Override @SneakyThrows - public void downloadFileUsingOTT(@PathVariable(OTT) String oneTimeToken, - @RequestParam(value = "tenantId") String tenantId) { + public void downloadFileUsingOTT(@PathVariable(OTT) String oneTimeToken, @RequestParam(value = "tenantId") String tenantId) { TenantContext.setTenantId(tenantId); var token = oneTimeTokenDownloadService.getToken(oneTimeToken); diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java index 6b3f05688..93a123e9d 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ExternalControllerAdvice.java @@ -8,9 +8,11 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotAl import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.knecon.fforesight.tenantcommons.TenantContext; import com.mchange.rmi.NotAuthorizedException; + import io.swagger.v3.oas.annotations.Hidden; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.quartz.JobDataMap; import org.quartz.JobKey; import org.quartz.Scheduler; @@ -50,6 +52,7 @@ public class ExternalControllerAdvice { /* error handling */ + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.BAD_REQUEST) @@ -59,6 +62,7 @@ public class ExternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.CONFLICT) @@ -68,6 +72,7 @@ public class ExternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @ResponseBody @ResponseStatus(value = HttpStatus.FORBIDDEN) @ExceptionHandler({AccessDeniedException.class}) @@ -76,10 +81,12 @@ public class ExternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @ResponseBody @ResponseStatus(value = HttpStatus.UNAUTHORIZED) @ExceptionHandler({NotAuthorizedException.class}) public ErrorMessage handleNotAuthorizedException(NotAuthorizedException e) { + return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } @@ -92,6 +99,7 @@ public class ExternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) @@ -108,6 +116,7 @@ public class ExternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.BAD_REQUEST) @@ -115,10 +124,13 @@ public class ExternalControllerAdvice { public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { var errorList = e.getFieldErrors(); - String errorListAsString = errorList.stream().map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()).collect(Collectors.joining(", ")); + String errorListAsString = errorList.stream() + .map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()) + .collect(Collectors.joining(", ")); return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString)); } + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.BAD_REQUEST) @@ -128,6 +140,7 @@ public class ExternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @Hidden @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java index 317648c87..6d7c18f24 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java @@ -57,15 +57,16 @@ public class FileAttributesController implements FileAttributesResource { throw new BadRequestException("Invalid encoding setting"); } fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId, - MagicConverter.convert(fileAttributesConfig, FileAttributesGeneralConfigurationEntity.class)); + MagicConverter.convert(fileAttributesConfig, FileAttributesGeneralConfigurationEntity.class)); var result = fileAttributeConfigPersistenceService.setFileAttributesConfig(dossierTemplateId, - MagicConverter.convert(fileAttributesConfig.getFileAttributeConfigs(), FileAttributeConfigEntity.class)); + MagicConverter.convert(fileAttributesConfig.getFileAttributeConfigs(), + FileAttributeConfigEntity.class)); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Changed file attributes base configuration & attribute configuration ( CSV Import )") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Changed file attributes base configuration & attribute configuration ( CSV Import )") + .build()); return FileAttributesConfig.builder() .filenameMappingColumnHeaderName(fileAttributesConfig.getFilenameMappingColumnHeaderName()) .delimiter(fileAttributesConfig.getDelimiter()) @@ -82,12 +83,15 @@ public class FileAttributesController implements FileAttributesResource { var result = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, MagicConverter.convert(fileAttribute, FileAttributeConfigEntity.class)); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("File attributes added/updated") - .details(Map.of("FileAttributeName", fileAttribute.getLabel() != null ? fileAttribute.getLabel() : "", "dossierTemplateId", dossierTemplateId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("File attributes added/updated") + .details(Map.of("FileAttributeName", + fileAttribute.getLabel() != null ? fileAttribute.getLabel() : "", + "dossierTemplateId", + dossierTemplateId)) + .build()); return MagicConverter.convert(result, FileAttributeConfig.class); } @@ -99,12 +103,12 @@ public class FileAttributesController implements FileAttributesResource { fileAttributeConfigPersistenceService.deleteFileAttribute(fileAttributeId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("File attributes removed") - .details(Map.of("FileAttributeId", fileAttributeId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("File attributes removed") + .details(Map.of("FileAttributeId", fileAttributeId)) + .build()); } @@ -114,12 +118,12 @@ public class FileAttributesController implements FileAttributesResource { fileAttributeConfigPersistenceService.deleteFileAttributes(fileAttributeIds); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("File attributes removed") - .details(Map.of("FileAttributeId", fileAttributeIds)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("File attributes removed") + .details(Map.of("FileAttributeId", fileAttributeIds)) + .build()); } @@ -130,7 +134,7 @@ public class FileAttributesController implements FileAttributesResource { FileAttributesGeneralConfiguration generalConfig = new FileAttributesGeneralConfiguration(); try { generalConfig = MagicConverter.convert(fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplateId), - FileAttributesGeneralConfiguration.class); + FileAttributesGeneralConfiguration.class); } catch (Exception e) { log.debug("No general config defined", e); } @@ -158,11 +162,11 @@ public class FileAttributesController implements FileAttributesResource { accessControlService.verifyUserIsMemberOrApprover(dossierId); fileAttributesManagementService.setFileAttributes(dossierId, fileId, fileAttributes.getAttributeIdToValue()); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("File attributes has been edited for a document.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("File attributes has been edited for a document.") + .build()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java index 90174cd1c..ae016518e 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/HighlightsController.java @@ -53,7 +53,7 @@ public class HighlightsController implements HighlightsResource { fileStatusService.getStatus(fileId); if (storageService.objectExists(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) { - try(InputStream stream = fileManagementStorageService.getObject(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) { + try (InputStream stream = fileManagementStorageService.getObject(TenantContext.getTenantId(), getStorageId(dossierId, fileId, FileType.TEXT_HIGHLIGHTS))) { Highlights highlights = objectMapper.readValue(stream, Highlights.class); stream.close(); return highlights; diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java index 50e89cba3..b935643db 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java @@ -37,11 +37,11 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId, legalBasisNames); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Legal basis mapping has been changed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Legal basis mapping has been changed.") + .build()); } @@ -51,11 +51,11 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { legalBasisMappingPersistenceService.addOrUpdateLegalBasis(dossierTemplateId, legalBasis); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Legal basis mapping has been changed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Legal basis mapping has been changed.") + .build()); } @@ -64,13 +64,14 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, legalBasisMapping); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Legal basis mapping has been changed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Legal basis mapping has been changed.") + .build()); } + @Transactional @PreAuthorize("hasAuthority('" + READ_LEGAL_BASIS + "')") public List getLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java index 12ff2536f..f4a07150a 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LicenseReportController.java @@ -33,11 +33,11 @@ public class LicenseReportController implements LicenseReportResource { LicenseReport licenseReport = licenseReportService.getLicenseReport(reportRequest); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(LICENSE_AUDIT_KEY) - .category(AuditCategory.LICENSE.name()) - .message("License report has been viewed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(LICENSE_AUDIT_KEY) + .category(AuditCategory.LICENSE.name()) + .message("License report has been viewed.") + .build()); return licenseReport; } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java index 4c5ab4cea..b4b18a813 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java @@ -120,7 +120,8 @@ public class ManualRedactionController implements ManualRedactionResource { accessControlService.checkDossierExistenceAndViewPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); - return manualRedactionService.getManualRedactions(fileId, ManualChangesQueryOptions.builder().includeOnlyUnprocessed(unprocessed).includeDictChanges(includeDictChanges).build()); + return manualRedactionService.getManualRedactions(fileId, + ManualChangesQueryOptions.builder().includeOnlyUnprocessed(unprocessed).includeDictChanges(includeDictChanges).build()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java index 206385c4f..d154b65df 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java @@ -68,6 +68,7 @@ public class MigrationStatusController implements MigrationStatusResource { return ResponseEntity.ok().build(); } + @Override public ResponseEntity revertMigrationForFile(String dossierId, String fileId) { @@ -101,7 +102,10 @@ public class MigrationStatusController implements MigrationStatusResource { private static boolean migrationIsFinished(MigrationStatusResponse migrationStatus) { - return migrationStatus.getFilesInStatus().entrySet().stream().filter(e -> e.getValue() > 0).allMatch(e -> e.getKey().equals(FINISHED) || e.getKey().equals(ERROR)); + return migrationStatus.getFilesInStatus().entrySet() + .stream() + .filter(e -> e.getValue() > 0) + .allMatch(e -> e.getKey().equals(FINISHED) || e.getKey().equals(ERROR)); } } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java index f3ef07499..1f59eb77b 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java @@ -35,38 +35,48 @@ public class NotificationController implements NotificationResource { return JSONPrimitive.of(notificationPersistenceService.hasNewNotificationsSince(KeycloakSecurity.getUserId(), since.getValue())); } + @PreAuthorize("hasAuthority('" + UPDATE_NOTIFICATIONS + "')") public void toggleNotificationSeen(@RequestBody List notificationIds, @RequestParam(SET_SEEN_PARAM) boolean setSeen) { - notificationIds.stream().map(Long::valueOf).forEach(notificationId -> { - if (setSeen) { - notificationPersistenceService.setSeenDate(KeycloakSecurity.getUserId(), notificationId, OffsetDateTime.now()); - } else { - notificationPersistenceService.setSeenDate(KeycloakSecurity.getUserId(), notificationId, null); - } - }); + notificationIds.stream() + .map(Long::valueOf) + .forEach(notificationId -> { + if (setSeen) { + notificationPersistenceService.setSeenDate(KeycloakSecurity.getUserId(), notificationId, OffsetDateTime.now()); + } else { + notificationPersistenceService.setSeenDate(KeycloakSecurity.getUserId(), notificationId, null); + } + }); } + @PreAuthorize("hasAuthority('" + UPDATE_NOTIFICATIONS + "')") public void toggleNotificationRead(@RequestBody List notificationIds, @RequestParam(SET_READ_PARAM) boolean setRead) { - notificationIds.stream().map(Long::valueOf).forEach(notificationId -> { - if (setRead) { - notificationPersistenceService.setReadDate(KeycloakSecurity.getUserId(), notificationId, OffsetDateTime.now()); - } else { - notificationPersistenceService.setReadDate(KeycloakSecurity.getUserId(), notificationId, null); - } - }); + notificationIds.stream() + .map(Long::valueOf) + .forEach(notificationId -> { + if (setRead) { + notificationPersistenceService.setReadDate(KeycloakSecurity.getUserId(), notificationId, OffsetDateTime.now()); + } else { + notificationPersistenceService.setReadDate(KeycloakSecurity.getUserId(), notificationId, null); + } + }); } + @PreAuthorize("hasAuthority('" + UPDATE_NOTIFICATIONS + "')") public void delete(@RequestBody List notificationIds) { - notificationIds.stream().map(Long::valueOf).forEach(notificationId -> { - notificationPersistenceService.softDelete(KeycloakSecurity.getUserId(), notificationId); - }); + notificationIds.stream() + .map(Long::valueOf) + .forEach(notificationId -> { + notificationPersistenceService.softDelete(KeycloakSecurity.getUserId(), notificationId); + }); } + @PreAuthorize("hasAuthority('" + READ_NOTIFICATIONS + "')") public NotificationResponse getNotifications(@RequestParam(INCLUDE_SEEN_PARAM) boolean includeSeen) { diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java index ce468c250..3f3a82478 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java @@ -3,7 +3,6 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_NOTIFICATIONS; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.UPDATE_NOTIFICATIONS; - import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; @@ -29,6 +28,7 @@ public class NotificationPreferencesController implements NotificationPreference @Override @PreAuthorize("hasAuthority('" + READ_NOTIFICATIONS + "')") public NotificationPreferences getNotificationPreferences() { + return notificationPreferencesService.getOrCreateNotificationPreferences(KeycloakSecurity.getUserId()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSComponentLogController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSComponentLogController.java index 03d9b4915..7a75cb402 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSComponentLogController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSComponentLogController.java @@ -62,7 +62,9 @@ public class RSSComponentLogController implements RSSResource { dossierFiles = List.of(statusController.getFileStatus(dossierId, fileId)); } - List fileResponses = dossierFiles.stream().map(this::getRssResponse).toList(); + List fileResponses = dossierFiles.stream() + .map(this::getRssResponse) + .toList(); return new RSSResponse(fileResponses); @@ -75,18 +77,21 @@ public class RSSComponentLogController implements RSSResource { Map results = new LinkedHashMap<>(); - componentLog.getComponentLogEntries().forEach(entry -> { - if (entry.getComponentValues().size() <= 1) { - results.put(entry.getName(), entry.getComponentValues().get(0).getValue()); - return; - } + componentLog.getComponentLogEntries() + .forEach(entry -> { + if (entry.getComponentValues().size() <= 1) { + results.put(entry.getName(), + entry.getComponentValues() + .get(0).getValue()); + return; + } - List componentValues = entry.getComponentValues(); - for (int i = 0, componentValuesSize = componentValues.size(); i < componentValuesSize; i++) { - ComponentLogEntryValue v = componentValues.get(i); - results.put(entry.getName() + "_" + (i + 1), v.getValue()); - } - }); + List componentValues = entry.getComponentValues(); + for (int i = 0, componentValuesSize = componentValues.size(); i < componentValuesSize; i++) { + ComponentLogEntryValue v = componentValues.get(i); + results.put(entry.getName() + "_" + (i + 1), v.getValue()); + } + }); return RSSFileResponse.builder().filename(file.getFilename()).result(results).build(); @@ -103,7 +108,9 @@ public class RSSComponentLogController implements RSSResource { dossierFiles = List.of(statusController.getFileStatus(dossierId, fileId)); } - List fileResponses = dossierFiles.stream().map(this::getDetailedRssResponse).toList(); + List fileResponses = dossierFiles.stream() + .map(this::getDetailedRssResponse) + .toList(); return new DetailedRSSResponse(fileResponses); } @@ -115,18 +122,21 @@ public class RSSComponentLogController implements RSSResource { Map results = new LinkedHashMap<>(); - componentLog.getComponentLogEntries().forEach(entry -> { - if (entry.getComponentValues().size() <= 1) { - results.put(entry.getName(), toSCMComponent(entry.getComponentValues().get(0))); - return; - } + componentLog.getComponentLogEntries() + .forEach(entry -> { + if (entry.getComponentValues().size() <= 1) { + results.put(entry.getName(), + toSCMComponent(entry.getComponentValues() + .get(0))); + return; + } - List componentValues = entry.getComponentValues(); - for (int i = 0, componentValuesSize = componentValues.size(); i < componentValuesSize; i++) { - ComponentLogEntryValue v = componentValues.get(i); - results.put(entry.getName() + "_" + (i + 1), toSCMComponent(v)); - } - }); + List componentValues = entry.getComponentValues(); + for (int i = 0, componentValuesSize = componentValues.size(); i < componentValuesSize; i++) { + ComponentLogEntryValue v = componentValues.get(i); + results.put(entry.getName() + "_" + (i + 1), toSCMComponent(v)); + } + }); return DetailedRSSFileResponse.builder().filename(file.getFilename()).result(results).build(); } @@ -138,7 +148,10 @@ public class RSSComponentLogController implements RSSResource { .value(v.getValue().equals(v.getOriginalValue()) ? null : v.getValue()) .originalValue(v.getOriginalValue()) .transformation(v.getValueDescription()) - .scmAnnotations(v.getComponentLogEntityReferences().stream().map(this::toScmAnnotation).toList()) + .scmAnnotations(v.getComponentLogEntityReferences() + .stream() + .map(this::toScmAnnotation) + .toList()) .build(); } @@ -163,7 +176,8 @@ public class RSSComponentLogController implements RSSResource { componentOverrideService.addOverrides(dossierId, fileId, componentsOverrides); - componentsOverrides.getComponentOverrides().forEach((componentName, overrideValue) -> auditOverride(dossierId, fileId, componentName, overrideValue, allComponents)); + componentsOverrides.getComponentOverrides() + .forEach((componentName, overrideValue) -> auditOverride(dossierId, fileId, componentName, overrideValue, allComponents)); } @@ -182,63 +196,68 @@ public class RSSComponentLogController implements RSSResource { componentOverrideService.revertOverrides(dossierId, fileId, revertOverrideRequest); - revertOverrideRequest.getComponents().forEach(componentNameToRevert -> auditOverrideRevert(dossierId, fileId, componentNameToRevert, allComponents)); + revertOverrideRequest.getComponents() + .forEach(componentNameToRevert -> auditOverrideRevert(dossierId, fileId, componentNameToRevert, allComponents)); } private void auditOverride(String dossierId, String fileId, String componentName, String overrideValue, List allComponentLogEntries) { - Optional component = allComponentLogEntries.stream().filter(c -> c.getName().equals(componentName)).findFirst(); + Optional component = allComponentLogEntries.stream() + .filter(c -> c.getName().equals(componentName)) + .findFirst(); String originalValue = getOriginalValue(component); String value = getValue(component); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("The component is overwritten with value") - .details(Map.of(DOSSIER_ID, - dossierId, - FILE_ID, - fileId, - "ComponentName", - componentName, - "Action", - "MODIFY", - "OriginalValue", - originalValue, - "OldValue", - value, - "NewValue", - overrideValue)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("The component is overwritten with value") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + "ComponentName", + componentName, + "Action", + "MODIFY", + "OriginalValue", + originalValue, + "OldValue", + value, + "NewValue", + overrideValue)) + .build()); } private void auditOverrideRevert(String dossierId, String fileId, String componentNameToRevert, List allComponentLogEntries) { - Optional component = allComponentLogEntries.stream().filter(c -> c.getName().equals(componentNameToRevert)).findFirst(); + Optional component = allComponentLogEntries.stream() + .filter(c -> c.getName().equals(componentNameToRevert)) + .findFirst(); String originalValue = getOriginalValue(component); String value = getValue(component); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("The component override for was reverted") - .details(Map.of(DOSSIER_ID, - dossierId, - FILE_ID, - fileId, - "ComponentName", - componentNameToRevert, - "Action", - "REVERT", - "OriginalValue", - originalValue, - "OldValue", - value, - "NewValue", - originalValue)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("The component override for was reverted") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + "ComponentName", + componentNameToRevert, + "Action", + "REVERT", + "OriginalValue", + originalValue, + "OldValue", + value, + "NewValue", + originalValue)) + .build()); } @@ -246,7 +265,9 @@ public class RSSComponentLogController implements RSSResource { return component.map(ComponentLogEntry::getComponentValues) .stream() - .map(a -> a.stream().map(ComponentLogEntryValue::getValue).collect(Collectors.joining(", "))) + .map(a -> a.stream() + .map(ComponentLogEntryValue::getValue) + .collect(Collectors.joining(", "))) .findFirst() .orElse(""); } @@ -256,7 +277,9 @@ public class RSSComponentLogController implements RSSResource { return component.map(ComponentLogEntry::getComponentValues) .stream() - .map(a -> a.stream().map(ComponentLogEntryValue::getOriginalValue).collect(Collectors.joining(", "))) + .map(a -> a.stream() + .map(ComponentLogEntryValue::getOriginalValue) + .collect(Collectors.joining(", "))) .findFirst() .orElse(""); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java index 0769dbf3a..87a8dc4fd 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RSSController.java @@ -49,7 +49,10 @@ public class RSSController implements RSSResource { @PreAuthorize("hasAuthority('" + GET_RSS + "')") private RSSResponse convert(com.iqser.red.service.redaction.report.v1.api.model.rss.RSSResponse rssResponse) { - return new RSSResponse(rssResponse.getFiles().stream().map(this::convert).collect(Collectors.toList())); + return new RSSResponse(rssResponse.getFiles() + .stream() + .map(this::convert) + .collect(Collectors.toList())); } @@ -72,31 +75,33 @@ public class RSSController implements RSSResource { public void addOverrides(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody ComponentsOverrides componentsOverrides) { var rssReport = rssReportClient.getDetailedRSS(dossierId, fileId); - var components = rssReport.getFiles().get(0).getResult(); + var components = rssReport.getFiles() + .get(0).getResult(); componentOverrideService.addOverrides(dossierId, fileId, componentsOverrides); componentsOverrides.getComponentOverrides() .forEach((key, value) -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("The component is overwritten with value") - .details(Map.of(DOSSIER_ID, - dossierId, - FILE_ID, - fileId, - "ComponentName", - key, - "Action", - "MODIFY", - "OriginalValue", - components.get(key).getOriginalValue(), - "OldValue", - components.get(key).getValue() != null ? components.get(key).getValue() : components.get(key).getOriginalValue(), - "NewValue", - value)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("The component is overwritten with value") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + "ComponentName", + key, + "Action", + "MODIFY", + "OriginalValue", + components.get(key).getOriginalValue(), + "OldValue", + components.get(key).getValue() != null ? components.get(key) + .getValue() : components.get(key).getOriginalValue(), + "NewValue", + value)) + .build())); } @@ -111,31 +116,33 @@ public class RSSController implements RSSResource { public void revertOverrides(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody RevertOverrideRequest revertOverrideRequest) { var rssReport = rssReportClient.getDetailedRSS(dossierId, fileId); - var components = rssReport.getFiles().get(0).getResult(); + var components = rssReport.getFiles() + .get(0).getResult(); componentOverrideService.revertOverrides(dossierId, fileId, revertOverrideRequest); revertOverrideRequest.getComponents() .forEach(component -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("The component override for was reverted") - .details(Map.of(DOSSIER_ID, - dossierId, - FILE_ID, - fileId, - "ComponentName", - component, - "Action", - "REVERT", - "OriginalValue", - components.get(component).getOriginalValue(), - "OldValue", - components.get(component).getValue() != null ? components.get(component).getValue() : components.get(component).getOriginalValue(), - "NewValue", - components.get(component).getOriginalValue())) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("The component override for was reverted") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + "ComponentName", + component, + "Action", + "REVERT", + "OriginalValue", + components.get(component).getOriginalValue(), + "OldValue", + components.get(component).getValue() != null ? components.get(component) + .getValue() : components.get(component).getOriginalValue(), + "NewValue", + components.get(component).getOriginalValue())) + .build())); } } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java index f7bf38f13..666ab8e7e 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java @@ -41,6 +41,7 @@ public class ReanalysisController implements ReanalysisResource { private final AuditPersistenceService auditPersistenceService; private final AccessControlService accessControlService; + @PreAuthorize("hasAuthority('" + REANALYZE_DOSSIER + "')") public void reanalyzeDossier(@PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force) { @@ -48,14 +49,15 @@ public class ReanalysisController implements ReanalysisResource { reanalysisService.reanalyzeDossier(dossierId, force); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("Reanalyse dossier was triggered") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("Reanalyse dossier was triggered") + .build()); } + @PreAuthorize("hasAuthority('" + REANALYZE_FILE + "')") public void reanalyzeFile(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -64,12 +66,12 @@ public class ReanalysisController implements ReanalysisResource { accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); reanalysisService.reanalyzeFiles(dossierId, Sets.newHashSet(fileId), force); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOCUMENT.name()) - .message("Reanalyse file was triggered") - .details(Map.of(DOSSIER_ID, dossierId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOCUMENT.name()) + .message("Reanalyse file was triggered") + .details(Map.of(DOSSIER_ID, dossierId)) + .build()); } @@ -83,12 +85,12 @@ public class ReanalysisController implements ReanalysisResource { reanalysisService.reanalyzeFiles(dossierId, new HashSet<>(fileIds), force); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOCUMENT.name()) - .message("Reanalyse files was triggered") - .details(Map.of(DOSSIER_ID, dossierId, "number", fileIds.size())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOCUMENT.name()) + .message("Reanalyse files was triggered") + .details(Map.of(DOSSIER_ID, dossierId, "number", fileIds.size())) + .build()); } @@ -102,11 +104,11 @@ public class ReanalysisController implements ReanalysisResource { reanalysisService.ocrDossier(dossierId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("OCR and reanalyse dossier was triggered") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("OCR and reanalyse dossier was triggered") + .build()); } @@ -121,12 +123,12 @@ public class ReanalysisController implements ReanalysisResource { validateOCR(dossierId, fileId); reanalysisService.ocrFile(dossierId, fileId, force); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOCUMENT.name()) - .message("OCR and reanalyse file was triggered") - .details(Map.of(DOSSIER_ID, dossierId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOCUMENT.name()) + .message("OCR and reanalyse file was triggered") + .details(Map.of(DOSSIER_ID, dossierId)) + .build()); } @@ -139,15 +141,16 @@ public class ReanalysisController implements ReanalysisResource { fileIds.forEach(fileId -> validateOCR(dossierId, fileId)); reanalysisService.ocrFiles(dossierId, fileIds); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOCUMENT.name()) - .message("OCR and reanalyse was triggered") - .details(Map.of(DOSSIER_ID, dossierId, "number", fileIds.size())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOCUMENT.name()) + .message("OCR and reanalyse was triggered") + .details(Map.of(DOSSIER_ID, dossierId, "number", fileIds.size())) + .build()); } + @PreAuthorize("hasAuthority('" + EXCLUDE_INCLUDE_FILE + "')") public void toggleAutomaticAnalysis(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -158,11 +161,11 @@ public class ReanalysisController implements ReanalysisResource { fileStatusManagementService.toggleAutomaticAnalysis(dossierId, fileId, excludedFromAutomaticAnalysis); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Toggle Exclusion status: File excluded from automatic analysis: " + excludedFromAutomaticAnalysis) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Toggle Exclusion status: File excluded from automatic analysis: " + excludedFromAutomaticAnalysis) + .build()); } @@ -181,14 +184,15 @@ public class ReanalysisController implements ReanalysisResource { fileStatusManagementService.toggleExclusion(dossierId, fileId, excluded); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Toggle Exclusion status: File excluded from analysis: " + excluded) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Toggle Exclusion status: File excluded from analysis: " + excluded) + .build()); } + @PreAuthorize("hasAuthority('" + EXCLUDE_INCLUDE_FILE + "')") public void toggleAutomaticAnalysisForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody Set fileIds, @@ -207,6 +211,7 @@ public class ReanalysisController implements ReanalysisResource { } } + @PreAuthorize("hasAuthority('" + EXCLUDE_INCLUDE_FILE + "')") public void toggleExclusionForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody Set fileIds, @@ -241,11 +246,11 @@ public class ReanalysisController implements ReanalysisResource { fileStatusManagementService.excludePages(dossierId, fileId, excludedPages); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Page exclusions added for file") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Page exclusions added for file") + .build()); } @@ -265,11 +270,11 @@ public class ReanalysisController implements ReanalysisResource { fileStatusManagementService.includePages(dossierId, fileId, includePages); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Page inclusions added for file") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Page inclusions added for file") + .build()); } @@ -282,11 +287,11 @@ public class ReanalysisController implements ReanalysisResource { reanalysisService.reindex(dossierId, dropIndex, new HashSet<>(fileIds)); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId("redaction") - .category(AuditCategory.INDEX.name()) - .message("Reindexing has been triggered" + (dropIndex ? " (with drop index)." : ".")) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId("redaction") + .category(AuditCategory.INDEX.name()) + .message("Reindexing has been triggered" + (dropIndex ? " (with drop index)." : ".")) + .build()); } @@ -294,7 +299,7 @@ public class ReanalysisController implements ReanalysisResource { private void validateOCR(String dossierId, String fileId) { var status = fileStatusManagementService.getFileStatus(fileId); - if(status.isSoftOrHardDeleted()) { + if (status.isSoftOrHardDeleted()) { throw new NotFoundException("File does not exist"); } if (status.getWorkflowStatus() == WorkflowStatus.APPROVED) { diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java index 3abeaba7b..b9008295f 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Map; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; + import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.springframework.core.io.InputStreamResource; @@ -76,7 +77,6 @@ public class ReportTemplateController implements ReportTemplateResource { private final FileManagementStorageService fileManagementStorageService; - @Override @PreAuthorize("hasAuthority('" + GET_REPORT_TEMPLATES + "')") public List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody JSONPrimitive placeholder) { @@ -111,12 +111,12 @@ public class ReportTemplateController implements ReportTemplateResource { .build(); var reportTemplate = reportTemplateService.uploadTemplate(reportTemplateUploadRequest); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(reportTemplate.getTemplateId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Report template was uploaded.") - .details(Map.of("DossierTemplateId", dossierTemplateId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(reportTemplate.getTemplateId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Report template was uploaded.") + .details(Map.of("DossierTemplateId", dossierTemplateId)) + .build()); return reportTemplate; } else { throw new BadRequestException("Could not upload file, no filename provided."); @@ -175,12 +175,12 @@ public class ReportTemplateController implements ReportTemplateResource { storageService.deleteObject(TenantContext.getTenantId(), storageId); reportTemplatePersistenceService.delete(templateId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(templateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Report template was deleted.") - .details(Map.of("DossierTemplateId", dossierTemplateId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(templateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Report template was deleted.") + .details(Map.of("DossierTemplateId", dossierTemplateId)) + .build()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java index fee293156..80e216554 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java @@ -99,11 +99,11 @@ public class RulesController implements RulesResource { rulesPersistenceService.setRules(rulesUploadRequest.getRules(), rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(rulesUploadRequest.getDossierTemplateId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message(String.format("%s Rules have been updated", rulesUploadRequest.getRuleFileType())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(rulesUploadRequest.getDossierTemplateId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", rulesUploadRequest.getRuleFileType())) + .build()); return ResponseEntity.ok(droolsSyntaxValidationResponse); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java index 51673e378..626d7bd66 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java @@ -174,39 +174,39 @@ public class StatusController implements StatusResource { fileStatusManagementService.setCurrentFileAssignee(dossierId, fileId, assigneeId); if (assigneeId == null) { auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Reviewer was unassigned from document") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Reviewer was unassigned from document") + .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) + .build()); } else { auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Reviewer was assigned to document") - .details(Map.of(DOSSIER_ID, dossierId, "reviewer", assigneeId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Reviewer was assigned to document") + .details(Map.of(DOSSIER_ID, dossierId, "reviewer", assigneeId)) + .build()); } if (assigneeId != null && !assigneeId.equals(KeycloakSecurity.getUserId())) { notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(assigneeId) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(WorkflowStatus.APPROVED.equals(fileStatus.getWorkflowStatus()) ? NotificationType.ASSIGN_APPROVER.name() : NotificationType.ASSIGN_REVIEWER.name()) - .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) - .build()); + .userId(assigneeId) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(WorkflowStatus.APPROVED.equals(fileStatus.getWorkflowStatus()) ? NotificationType.ASSIGN_APPROVER.name() : NotificationType.ASSIGN_REVIEWER.name()) + .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) + .build()); } if (assigneeId == null || fileStatus.getAssignee() != null && !fileStatus.getAssignee().equals(assigneeId) && !KeycloakSecurity.getUserId() .equals(fileStatus.getAssignee())) { notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(fileStatus.getAssignee()) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.UNASSIGNED_FROM_FILE.name()) - .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) - .build()); + .userId(fileStatus.getAssignee()) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.UNASSIGNED_FROM_FILE.name()) + .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) + .build()); } } @@ -221,7 +221,9 @@ public class StatusController implements StatusResource { throw new BadRequestException("Unknown user=" + assigneeId); } // check he has a manager role, thus he can be the owner - if (user.get().getRoles().stream().noneMatch(VALID_MEMBER_ROLES::contains)) { + if (user.get().getRoles() + .stream() + .noneMatch(VALID_MEMBER_ROLES::contains)) { throw new BadRequestException("Make sure each provided member id has the permission to be a member of a dossier."); } // check assignee is a member @@ -245,20 +247,20 @@ public class StatusController implements StatusResource { setStatusUnderReviewForFile(dossierId, fileId, assigneeId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Document status was changed to Under Review") - .details(Map.of(DOSSIER_ID, dossierId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Document status was changed to Under Review") + .details(Map.of(DOSSIER_ID, dossierId)) + .build()); if (assigneeId != null && !assigneeId.equals(KeycloakSecurity.getUserId())) { notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(assigneeId) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.ASSIGN_REVIEWER.name()) - .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) - .build()); + .userId(assigneeId) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.ASSIGN_REVIEWER.name()) + .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) + .build()); } generatePossibleUnassignedFromFileNotification(dossierId, fileId, fileStatus, assigneeId); @@ -275,21 +277,21 @@ public class StatusController implements StatusResource { setStatusUnderApprovalForFile(dossierId, fileId, assigneeId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Document status was changed to Under Approval") - .details(Map.of(DOSSIER_ID, dossierId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Document status was changed to Under Approval") + .details(Map.of(DOSSIER_ID, dossierId)) + .build()); if (assigneeId != null && !assigneeId.equals(KeycloakSecurity.getUserId())) { notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(assigneeId) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.ASSIGN_APPROVER.name()) - .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) - .build()); + .userId(assigneeId) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.ASSIGN_APPROVER.name()) + .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) + .build()); } generatePossibleUnassignedFromFileNotification(dossierId, fileId, fileStatus, assigneeId); @@ -303,12 +305,12 @@ public class StatusController implements StatusResource { accessControlService.verifyUserIsApprover(dossierId); setStatusApprovedForFile(dossierId, fileId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Document status was changed to Approved") - .details(Map.of(DOSSIER_ID, dossierId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Document status was changed to Approved") + .details(Map.of(DOSSIER_ID, dossierId)) + .build()); var dossier = dossierACLService.enhanceDossierWithACLData(dossierManagementService.getDossierById(dossierId, false, false)); if (!dossier.getOwnerId().equals(KeycloakSecurity.getUserId())) { @@ -316,11 +318,11 @@ public class StatusController implements StatusResource { var fileStatus = fileStatusManagementService.getFileStatus(fileId); notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(dossier.getOwnerId()) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.DOCUMENT_APPROVED.name()) - .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) - .build()); + .userId(dossier.getOwnerId()) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.DOCUMENT_APPROVED.name()) + .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, fileStatus.getFilename())) + .build()); } } @@ -355,16 +357,17 @@ public class StatusController implements StatusResource { private void generatePossibleUnassignedFromFileNotification(String dossierId, String fileId, FileModel oldFileStatus, String newAssigneeId) { - if (oldFileStatus.getAssignee() == null || newAssigneeId == null || oldFileStatus.getAssignee().equals(newAssigneeId) || KeycloakSecurity.getUserId().equals(oldFileStatus.getAssignee())) { + if (oldFileStatus.getAssignee() == null || newAssigneeId == null || oldFileStatus.getAssignee().equals(newAssigneeId) || KeycloakSecurity.getUserId() + .equals(oldFileStatus.getAssignee())) { return; } notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(oldFileStatus.getAssignee()) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.UNASSIGNED_FROM_FILE.name()) - .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, oldFileStatus.getFilename())) - .build()); + .userId(oldFileStatus.getAssignee()) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.UNASSIGNED_FROM_FILE.name()) + .target(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, FILE_NAME, oldFileStatus.getFilename())) + .build()); } @@ -431,7 +434,10 @@ public class StatusController implements StatusResource { try { accessControlService.verifyUserHasViewPermissions(dossierId); - return fileStatusManagementService.getSoftDeletedDossierStatus(dossierId).stream().map(FileStatusMapper::toFileStatus).collect(Collectors.toList()); + return fileStatusManagementService.getSoftDeletedDossierStatus(dossierId) + .stream() + .map(FileStatusMapper::toFileStatus) + .collect(Collectors.toList()); } catch (AccessDeniedException e) { return new ArrayList<>(); diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java index 55db7bf9e..007e2299f 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusReportController.java @@ -1,6 +1,5 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; - import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_DOSSIER; import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException; diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java index 9a50bec1f..c73c245ad 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UploadController.java @@ -113,12 +113,12 @@ public class UploadController implements UploadResource { reanalysisService.importRedactions(ByteContentDocument.builder().dossierId(dossierId).fileId(fileId).document(file.getBytes()).pages(pageInclusionRequest).build()); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Redactions were imported") - .details(Map.of("dossierId", dossierId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Redactions were imported") + .details(Map.of("dossierId", dossierId)) + .build()); } catch (IOException e) { throw new BadRequestException(e.getMessage(), e); } catch (FeignException e) { diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java index 1e5eb88ba..a41d1946a 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java @@ -40,11 +40,11 @@ public class WatermarkController implements WatermarkResource { watermark.setCreatedBy(userId); WatermarkModel result = MagicConverter.convert(watermarkService.createOrUpdateWatermark(watermark), WatermarkModel.class); auditPersistenceService.audit(AuditRequest.builder() - .userId(userId) - .objectId(result.getDossierTemplateId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Watermark has been changed.") - .build()); + .userId(userId) + .objectId(result.getDossierTemplateId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Watermark has been changed.") + .build()); return result; } @@ -72,11 +72,11 @@ public class WatermarkController implements WatermarkResource { String dossierTemplateId = watermarkService.getWatermark(watermarkId).getDossierTemplateId(); watermarkService.deleteWatermark(watermarkId); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierTemplateId) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Watermark has been deleted.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message("Watermark has been deleted.") + .build()); } diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/service/OneTimeTokenCacheService.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/service/OneTimeTokenCacheService.java index 964a89e71..2caa8c8fe 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/service/OneTimeTokenCacheService.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/service/OneTimeTokenCacheService.java @@ -11,7 +11,6 @@ import com.iqser.red.persistence.service.v1.external.api.impl.model.OneTimeToken @Service public class OneTimeTokenCacheService { - @Cacheable(value = OTT_CACHE, key = "#tokenId") public OneTimeToken cacheOTT(String tokenId, OneTimeToken token) { // empty diff --git a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/PersistenceServiceExternalApiConfigurationV2.java b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/PersistenceServiceExternalApiConfigurationV2.java index 8e71889d8..b73d03eed 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/PersistenceServiceExternalApiConfigurationV2.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/PersistenceServiceExternalApiConfigurationV2.java @@ -3,7 +3,6 @@ package com.iqser.red.persistence.service.v2.external.api.impl; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; - @Configuration @ComponentScan public class PersistenceServiceExternalApiConfigurationV2 { 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/ComponentControllerV2.java b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ComponentControllerV2.java index fb43e5049..097de9abb 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ComponentControllerV2.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ComponentControllerV2.java @@ -54,7 +54,11 @@ public class ComponentControllerV2 implements ComponentResource { Map> basicComponent = new LinkedHashMap<>(); for (ComponentLogEntry componentLogEntry : componentLog.getComponentLogEntries()) { - basicComponent.put(componentLogEntry.getName(), componentLogEntry.getComponentValues().stream().map(ComponentLogEntryValue::getValue).toList()); + basicComponent.put(componentLogEntry.getName(), + componentLogEntry.getComponentValues() + .stream() + .map(ComponentLogEntryValue::getValue) + .toList()); } Map componentsDetails = new LinkedHashMap<>(); @@ -77,7 +81,10 @@ public class ComponentControllerV2 implements ComponentResource { private List toComponentList(ComponentLogEntry componentLogEntry) { - return componentLogEntry.getComponentValues().stream().map(this::convert).toList(); + return componentLogEntry.getComponentValues() + .stream() + .map(this::convert) + .toList(); } @@ -86,7 +93,10 @@ public class ComponentControllerV2 implements ComponentResource { return ComponentValue.builder() .valueDescription(componentValue.getValueDescription()) .componentRuleId(componentValue.getComponentRuleId()) - .entityReferences(componentValue.getComponentLogEntityReferences().stream().map(this::convertComponentEntityReference).toList()) + .entityReferences(componentValue.getComponentLogEntityReferences() + .stream() + .map(this::convertComponentEntityReference) + .toList()) .originalValue(componentValue.getOriginalValue()) .value(componentValue.getValue()) .build(); @@ -111,7 +121,9 @@ public class ComponentControllerV2 implements ComponentResource { dossierTemplateController.getDossierTemplate(dossierTemplateId); var dossierFiles = statusController.getDossierStatus(dossierId); - return new FileComponentsList(dossierFiles.stream().map(file -> getComponents(dossierTemplateId, dossierId, file.getFileId(), includeDetails)).toList()); + return new FileComponentsList(dossierFiles.stream() + .map(file -> getComponents(dossierTemplateId, dossierId, file.getFileId(), includeDetails)) + .toList()); } } 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/DossierControllerV2.java b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierControllerV2.java index 90380c93c..03eb1cb98 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierControllerV2.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/DossierControllerV2.java @@ -42,7 +42,9 @@ public class DossierControllerV2 implements DossierResource { var dossiers = dossierController.getDossiersForDossierTemplate(dossierTemplateId, includeArchived, includeSoftDeleted); if (!includeActive) { - return new DossierList(dossiers.stream().filter(dossier -> dossier.getSoftDeletedTime() != null || dossier.getArchivedTime() != null).toList()); + return new DossierList(dossiers.stream() + .filter(dossier -> dossier.getSoftDeletedTime() != null || dossier.getArchivedTime() != null) + .toList()); } return new DossierList(dossiers); 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 d666b8909..bf2c63df2 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 @@ -134,7 +134,8 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource { .filenameMappingCsvColumnHeader(fileAttributeConfigs.getFilenameMappingColumnHeaderName()) .build(); - var fileAttributeDefinitions = fileAttributeConfigs.getFileAttributeConfigs().stream() + var fileAttributeDefinitions = fileAttributeConfigs.getFileAttributeConfigs() + .stream() .map(fileAttributeConfig -> FileAttributeDefinition.builder() .id(fileAttributeConfig.getId()) .name(fileAttributeConfig.getLabel()) @@ -142,11 +143,11 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource { .mappedCsvColumnHeader(fileAttributeConfig.getCsvColumnHeader()) .reportingPlaceholder(fileAttributeConfig.getPlaceholder()) .displaySettings(FileAttributeDefinition.DisplaySettings.builder() - .primaryAttribute(fileAttributeConfig.isPrimaryAttribute()) - .editable(fileAttributeConfig.isEditable()) - .filterable(fileAttributeConfig.isFilterable()) - .displayedInFileList(fileAttributeConfig.isDisplayedInFileList()) - .build()) + .primaryAttribute(fileAttributeConfig.isPrimaryAttribute()) + .editable(fileAttributeConfig.isEditable()) + .filterable(fileAttributeConfig.isFilterable()) + .displayedInFileList(fileAttributeConfig.isDisplayedInFileList()) + .build()) .build()) .toList(); @@ -188,11 +189,11 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource { } auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(rulesUploadRequest.getDossierTemplateId()) - .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message(String.format("%s rules have been %s", rulesUploadRequest.getRuleFileType(), dryRun ? "validated" : "updated")) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(rulesUploadRequest.getDossierTemplateId()) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s rules have been %s", rulesUploadRequest.getRuleFileType(), dryRun ? "validated" : "updated")) + .build()); // TODO Add warning and deprecations to response return new ResponseEntity<>(RulesValidationResponse.builder().build(), HttpStatus.OK); @@ -208,7 +209,8 @@ public class DossierTemplateControllerV2 implements DossierTemplateResource { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.TEXT_PLAIN); - httpHeaders.add("Content-Disposition", "attachment" + "; filename*=utf-8''" + StringEncodingUtils.urlEncode(ruleFileType.name().toLowerCase(Locale.ROOT) + RULES_DOWNLOAD_FILE_NAME_SUFFIX)); + httpHeaders.add("Content-Disposition", + "attachment" + "; filename*=utf-8''" + StringEncodingUtils.urlEncode(ruleFileType.name().toLowerCase(Locale.ROOT) + RULES_DOWNLOAD_FILE_NAME_SUFFIX)); InputStream is = new ByteArrayInputStream(data); 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/LicenseControllerV2.java b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/LicenseControllerV2.java index e04a32fb8..1c63c6a5c 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/LicenseControllerV2.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/LicenseControllerV2.java @@ -4,8 +4,10 @@ import com.iqser.red.persistence.service.v1.external.api.impl.controller.License import com.iqser.red.service.persistence.service.v1.api.shared.model.license.LicenseReport; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.LicenseReportRequest; import com.iqser.red.service.persistence.service.v2.api.external.resource.LicenseResource; + import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -16,7 +18,9 @@ public class LicenseControllerV2 implements LicenseResource { private final LicenseReportController licenseReportController; + public LicenseReport getReport(@RequestBody LicenseReportRequest reportRequest) { + return licenseReportController.getReport(reportRequest); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java index 152009c44..392bdb8a8 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ApplicationConfigurationResource.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.external.resource; - import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java index 4ce5bc4dd..5b494a359 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java @@ -107,7 +107,8 @@ public interface DictionaryResource { @ResponseStatus(HttpStatus.OK) @PostMapping(value = TYPE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Creates entry type with colors, hint and caseInsensitive", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully created the entry type with colors, hint " + "and caseInsensitive"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "409", description = "The entry type already exists, could not be added again.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully created the entry type with colors, hint " + + "and caseInsensitive"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "409", description = "The entry type already exists, could not be added again.")}) TypeValue addType(@RequestBody CreateTypeValue typeValue); @@ -115,16 +116,14 @@ public interface DictionaryResource { @DeleteMapping(value = TYPE_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE) @Operation(summary = "Deletes entry type", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the entry type with value and all its entries"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The entry type is not found.")}) - void deleteType(@PathVariable(TYPE_PARAMETER_NAME) String type, - @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); + void deleteType(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); @ResponseStatus(HttpStatus.NO_CONTENT) @PostMapping(value = TYPE_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + DELETE) @Operation(summary = "Deletes entry types", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the entry types with value and all their entries"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The entry type is not found.")}) - void deleteTypes(@RequestBody List types, - @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); + void deleteTypes(@RequestBody List types, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); @GetMapping(value = TYPE_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -137,7 +136,8 @@ public interface DictionaryResource { @GetMapping(value = DICTIONARY_REST_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Retrieves all dictionary entries of an entry type", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully retrieved all the dictionary entries of " + "the entry type."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The dossier or the entry type is not found.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully retrieved all the dictionary entries of " + + "the entry type."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The dossier or the entry type is not found.")}) Dictionary getDictionaryForType(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestParam(value = DOSSIER_ID_PARAMETER_NAME, required = false) String dossierId); @@ -174,12 +174,14 @@ public interface DictionaryResource { @RequestParam(value = DOSSIER_ID_PARAMETER_NAME, required = false) String dossierId, @RequestParam(value = DICTIONARY_ENTRY_TYPE_PARAM, required = false, defaultValue = DEFAULT_DICTIONARY_ENTRY_TYPE) DictionaryEntryType dictionaryEntryType); - @GetMapping(value = DICTIONARY_REST_PATH + MERGED + TYPE_PATH_VARIABLE+ DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + + @GetMapping(value = DICTIONARY_REST_PATH + MERGED + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Retrieves the merged dictionary for the given type, dossier template and dossier", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully retrieved all the dictionary entries"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The dossier or the entry type is not found.")}) Dictionary getMergedDictionaries(@PathVariable(TYPE_PARAMETER_NAME) String type, - @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, - @RequestParam(value = DOSSIER_ID_PARAMETER_NAME) String dossierId); + @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @RequestParam(value = DOSSIER_ID_PARAMETER_NAME) String dossierId); + @ResponseStatus(HttpStatus.NO_CONTENT) @Operation(summary = "Set system colors for redaction") diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java index 2909d1f7b..d89b682e6 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java @@ -48,7 +48,9 @@ public interface DossierAttributesResource { @Operation(summary = "Set dossier attributes base configuration.", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - @PutMapping(value = DOSSIER_ATTRIBUTES_PATH + CONFIG_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PutMapping(value = DOSSIER_ATTRIBUTES_PATH + + CONFIG_PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) DossierAttributesConfig setDossierAttributesConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody DossierAttributesConfig dossierAttributesConfig); @@ -56,7 +58,9 @@ public interface DossierAttributesResource { @ResponseStatus(HttpStatus.OK) @Operation(summary = "Add or update a dossier attribute in base configuration.", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - @PostMapping(value = DOSSIER_ATTRIBUTES_PATH + CONFIG_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = DOSSIER_ATTRIBUTES_PATH + + CONFIG_PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) DossierAttributeConfig addOrUpdateDossierAttributeConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody DossierAttributeConfig dossierAttributes); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DownloadResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DownloadResource.java index 32454dea9..80992944f 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DownloadResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DownloadResource.java @@ -70,7 +70,8 @@ public interface DownloadResource { @ResponseBody @ResponseStatus(value = HttpStatus.OK) - @Operation(summary = "Returns a oneTimeToken for a requested download", description = "Use the optional \"inline\" request parameter " + "to select, if this report will be opened in the browser.") + @Operation(summary = "Returns a oneTimeToken for a requested download", description = "Use the optional \"inline\" request parameter " + + "to select, if this report will be opened in the browser.") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) @PostMapping(value = REST_PATH + GENERATE_OTT_PATH) JSONPrimitive generateOneTimeToken(@RequestBody JSONPrimitive storageIdWrapper); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java index 8d0ae808f..c19542b7e 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java @@ -31,9 +31,11 @@ public interface EntityLogResource { String FALSE = "false"; + @GetMapping(value = ENTITY_LOG_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "Gets the entity log for a fileId", description = "Gets the entity log for a given file. The flag includeUnprocessed will merge into the entity log all the unprocessed changes if it's set to true." + - "Default value for the flag is false.") + @Operation(summary = "Gets the entity log for a fileId", description = + "Gets the entity log for a given file. The flag includeUnprocessed will merge into the entity log all the unprocessed changes if it's set to true." + + "Default value for the flag is false.") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The dossier / file / entity log is not found.")}) EntityLog getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ExternalApi.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ExternalApi.java index dd4f26a3b..96448fe3e 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ExternalApi.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ExternalApi.java @@ -5,4 +5,5 @@ public interface ExternalApi { // String BASE_PATH = "/api"; String BASE_PATH = "/redaction-gateway-v1"; + } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileAttributesResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileAttributesResource.java index 9a5a0be6c..6f4b41ebf 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileAttributesResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileAttributesResource.java @@ -51,7 +51,10 @@ public interface FileAttributesResource { @ResponseStatus(HttpStatus.OK) @Operation(summary = "Set file attributes base configuration and a list of file attributes, ", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - @PutMapping(value = FILE_ATTRIBUTES_PATH + CONFIG_PATH + BASE_CONFIG_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PutMapping(value = FILE_ATTRIBUTES_PATH + + CONFIG_PATH + + BASE_CONFIG_PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) FileAttributesConfig setFileAttributesConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody FileAttributesConfig fileAttributesConfig); @@ -59,8 +62,11 @@ public interface FileAttributesResource { @ResponseStatus(HttpStatus.OK) @Operation(summary = "Add or update a file attribute that can be used at importing csv.", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - @PostMapping(value = FILE_ATTRIBUTES_PATH + CONFIG_PATH + FILE_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - FileAttributeConfig addOrUpdateFileAttribute(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId,@Valid @RequestBody FileAttributeConfig fileAttributes); + @PostMapping(value = FILE_ATTRIBUTES_PATH + + CONFIG_PATH + + FILE_ATTRIBUTE_PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + FileAttributeConfig addOrUpdateFileAttribute(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @Valid @RequestBody FileAttributeConfig fileAttributes); @ResponseBody diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java index 9e098e2e5..372e87a07 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java @@ -42,7 +42,12 @@ public interface HighlightsResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @Operation(summary = "Converts highlights to imported redactions", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) - @PostMapping(value = DOSSIERS_PATH + DOSSIER_ID_PATH_VARIABLE + FILES_PATH + FILE_ID_PATH_VARIABLE + HIGHLIGHTS_PATH + CONVERT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = DOSSIERS_PATH + + DOSSIER_ID_PATH_VARIABLE + + FILES_PATH + + FILE_ID_PATH_VARIABLE + + HIGHLIGHTS_PATH + + CONVERT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void convertHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody AnnotationIds annotationIds); @@ -56,7 +61,12 @@ public interface HighlightsResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @Operation(summary = "Deletes wrong imported redactions for a file", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) - @PostMapping(value = DOSSIERS_PATH + DOSSIER_ID_PATH_VARIABLE + FILES_PATH + FILE_ID_PATH_VARIABLE + IMPORTED_REDACTIONS_PATH + DELETE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = DOSSIERS_PATH + + DOSSIER_ID_PATH_VARIABLE + + FILES_PATH + + FILE_ID_PATH_VARIABLE + + IMPORTED_REDACTIONS_PATH + + DELETE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void deleteImportedRedactions(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody AnnotationIds annotationIds); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/MigrationStatusResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/MigrationStatusResource.java index 691f04140..6ec42c6a1 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/MigrationStatusResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/MigrationStatusResource.java @@ -1,9 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.external.resource; import com.iqser.red.service.persistence.service.v1.api.shared.model.saas.migration.MigrationStatusResponse; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; + import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -23,31 +25,32 @@ public interface MigrationStatusResource { String DOSSIER_ID = "dossierId"; String DOSSIER_ID_PATH_VARIABLE = "/{" + DOSSIER_ID + "}"; + @ResponseBody @PostMapping(value = MIGRATION_STATUS_REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Show the status of the migration", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success.")}) MigrationStatusResponse migrationStatus(); + @ResponseBody @PostMapping(value = START_MIGRATION_REST_PATH + FILE_ID_PATH_VARIABLE + DOSSIER_ID_PATH_VARIABLE) @Operation(summary = "Start SAAS migration for specific file", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success.")}) ResponseEntity startMigrationForFile(@RequestParam(value = DOSSIER_ID) String dossierId, @RequestParam(value = FILE_ID) String fileId); + @ResponseBody @PostMapping(value = REVERT_MIGRATION_REST_PATH + FILE_ID_PATH_VARIABLE + DOSSIER_ID_PATH_VARIABLE) @Operation(summary = "Start SAAS migration for specific file", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success.")}) ResponseEntity revertMigrationForFile(@RequestParam(value = DOSSIER_ID) String dossierId, @RequestParam(value = FILE_ID) String fileId); + @ResponseBody @PostMapping(value = RETRY_MIGRATION_REST_PATH) @Operation(summary = "Restart SAAS migration for all files in error state", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success.")}) ResponseEntity requeueErrorFiles(); - - - } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReportTemplateResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReportTemplateResource.java index caf8c30be..6e8969369 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReportTemplateResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReportTemplateResource.java @@ -48,7 +48,8 @@ public interface ReportTemplateResource { @ResponseBody @ResponseStatus(value = HttpStatus.CREATED) - @PostMapping(value = REPORT_TEMPLATE_UPLOAD_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = REPORT_TEMPLATE_UPLOAD_PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Upload template file for redaction-report", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Report template upload succeeded.")}) ReportTemplate uploadTemplate(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java index 0abe45d7e..18b1c1795 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java @@ -33,7 +33,8 @@ public interface UploadResource { @ResponseStatus(value = HttpStatus.CREATED) @PostMapping(value = UPLOAD_PATH + DOSSIER_ID_PATH_VARIABLE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Receives an uploaded file and returns its fileId.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "File upload succeeded. Return the fileId of the " + "uploaded file."), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) + @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "File upload succeeded. Return the fileId of the " + + "uploaded file."), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) FileUploadResult upload(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, @PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = "keepManualRedactions", required = false, defaultValue = "false") boolean keepManualRedactions); diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DocuMineDossierRequest.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DocuMineDossierRequest.java index 5ac1081d5..d5301e403 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DocuMineDossierRequest.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DocuMineDossierRequest.java @@ -18,7 +18,7 @@ import lombok.NonNull; @Builder @AllArgsConstructor @NoArgsConstructor -@Schema(name="DossierRequest", description = "Object containing information about a dossier.") +@Schema(name = "DossierRequest", description = "Object containing information about a dossier.") public class DocuMineDossierRequest { @Schema(description = "The id of the dossier, can be null for create requests.") diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DossierList.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DossierList.java index 8ad51ae1e..a4784c58f 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DossierList.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/DossierList.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.service.v2.api.external.model; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -17,4 +18,5 @@ public class DossierList { @Builder.Default private List dossiers = new ArrayList<>(); + } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinition.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinition.java index facf157fa..ca0d650c5 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinition.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinition.java @@ -26,9 +26,12 @@ public class FileAttributeDefinition { @AllArgsConstructor @Builder public static class DisplaySettings { + private boolean primaryAttribute; private boolean editable; private boolean filterable; private boolean displayedInFileList; + } + } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinitionList.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinitionList.java index 0e219ee8a..2b5ba51f5 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinitionList.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileAttributeDefinitionList.java @@ -24,7 +24,6 @@ public class FileAttributeDefinitionList { @Builder.Default private List fileAttributeDefinitions = new ArrayList<>(); - @Data @Builder @NoArgsConstructor @@ -39,11 +38,14 @@ public class FileAttributeDefinitionList { @Builder.Default private String encoding = StandardCharsets.UTF_8.name(); + // TODO: make csvMappingActive a persistent value instead of a transient one when implementing the endpoint to set the csv mapping @JsonProperty("csvMappingActive") public boolean isCsvMappingActive() { + return StringUtils.isNotBlank(filenameMappingCsvColumnHeader); } } + } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileComponentsList.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileComponentsList.java index df0bb1ee2..cc0731b75 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileComponentsList.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileComponentsList.java @@ -18,4 +18,5 @@ public class FileComponentsList { @Builder.Default private List files = new ArrayList<>(); + } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileDeleteRequest.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileDeleteRequest.java index 9dc9b9872..0950e7833 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileDeleteRequest.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileDeleteRequest.java @@ -16,4 +16,5 @@ public class FileDeleteRequest { @Builder.Default private List fileIds = new ArrayList<>(); + } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileStatusList.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileStatusList.java index 19ed2d4bc..7b4f41606 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileStatusList.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/model/FileStatusList.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.service.v2.api.external.model; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -17,4 +18,5 @@ public class FileStatusList { @Builder.Default private List files = new ArrayList<>(); + } 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 91daba819..8fd7171cf 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 @@ -54,64 +54,49 @@ public interface DossierTemplateResource { @GetMapping(value = PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Get a specific DossierTemplate by its identifier.", description = "None") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Get a specific DossierTemplate by its identifier."), - @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.") - }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Get a specific DossierTemplate by its identifier."), @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.")}) DossierTemplateModel getDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId); @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + ENTITY_RULES_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Upload a component or entity rules file in drools format for a specific DossierTemplate.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Rules upload successful."), - @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found."), - @ApiResponse(responseCode = "422", description = "Uploaded rules could not be verified.") - }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful."), @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be verified.")}) ResponseEntity uploadEntityRules(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId, - @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, - @Parameter(name = DRY_RUN_PARAM, description = "If true rules will be only validated not stored.") @RequestParam(value = DRY_RUN_PARAM, required = false ,defaultValue = "false") boolean dryRun); + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, + @Parameter(name = DRY_RUN_PARAM, description = "If true rules will be only validated not stored.") @RequestParam(value = DRY_RUN_PARAM, required = false, defaultValue = "false") boolean dryRun); + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used entity rules.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.") - }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.")}) @GetMapping(value = PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + ENTITY_RULES_PATH) ResponseEntity downloadEntityRules(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId); - @ResponseStatus(value = HttpStatus.NO_CONTENT) - @PostMapping(value = PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + COMPONENT_RULES_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + + COMPONENT_RULES_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Upload a component or entity rules file in drools format for a specific DossierTemplate.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Rules upload successful."), - @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found."), - @ApiResponse(responseCode = "422", description = "Uploaded rules could not be verified.") - }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful."), @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be verified.")}) ResponseEntity uploadComponentRules(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId, - @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, - @Parameter(name = DRY_RUN_PARAM, description = "If true rules will be only validated not stored.") @RequestParam(value = DRY_RUN_PARAM, required = false ,defaultValue = "false") boolean dryRun); + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, + @Parameter(name = DRY_RUN_PARAM, description = "If true rules will be only validated not stored.") @RequestParam(value = DRY_RUN_PARAM, required = false, defaultValue = "false") boolean dryRun); + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used component rules.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.") - }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.")}) @GetMapping(value = PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + COMPONENT_RULES_PATH) ResponseEntity downloadComponentRules(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId); + @Operation(summary = "Get the file attribute definitions of a DossierTemplate.", description = "None") @GetMapping(value = PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + FILE_ATTRIBUTE_DEFINITIONS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "File attribute definitions returned successfully."), - @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.") - }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "File attribute definitions returned successfully."), @ApiResponse(responseCode = "404", description = "The DossierTemplate is not found.")}) FileAttributeDefinitionList getFileAttributeDefinitions(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId); + } diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/LicenseResource.java b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/LicenseResource.java index 834058a12..30f47bf61 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/LicenseResource.java +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/java/com/iqser/red/service/persistence/service/v2/api/external/resource/LicenseResource.java @@ -2,9 +2,11 @@ package com.iqser.red.service.persistence.service.v2.api.external.resource; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.LicenseReport; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.LicenseReportRequest; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; + import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; @@ -20,6 +22,7 @@ public interface LicenseResource { String ACTIVE_USAGE_PATH = "/active/usage"; + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = PATH + ACTIVE_USAGE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java index ba9856054..d1e947107 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java @@ -30,6 +30,7 @@ public class DossierTemplateInternalController implements DossierTemplateResourc return convert(dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId), DossierTemplate.class); } + @Override public DossierTemplate getDossierTemplateById(String dossierTemplateId) { diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java index 3b1316034..5f9fc547b 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java @@ -18,6 +18,7 @@ public class EntityLogInternalController implements EntityLogResource { private final EntityLogService entityLogService; + @Override public EntityLog getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -27,5 +28,4 @@ public class EntityLogInternalController implements EntityLogResource { return entityLogService.getEntityLog(dossierId, fileId, excludedTypes, includeUnprocessed); } - } diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusInternalController.java index 08e12ea47..9efa22dc2 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusInternalController.java @@ -22,7 +22,10 @@ public class FileStatusInternalController implements StatusResource { @Override public List getDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { - return fileStatusService.getDossierStatus(dossierId).stream().filter(f -> !f.isSoftOrHardDeleted()).collect(Collectors.toList()); + return fileStatusService.getDossierStatus(dossierId) + .stream() + .filter(f -> !f.isSoftOrHardDeleted()) + .collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java index 8ba54487e..bdf151f1a 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java @@ -36,13 +36,16 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP public void preprocessingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) { - fileStatusProcessingUpdateService.preprocessingFailed(dossierId, fileId, new FileErrorInfo("preprocessing failed", - MessagingConfiguration.PRE_PROCESSING_DLQ, "pdftron-service", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + fileStatusProcessingUpdateService.preprocessingFailed(dossierId, + fileId, + new FileErrorInfo("preprocessing failed", + MessagingConfiguration.PRE_PROCESSING_DLQ, + "pdftron-service", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } - public void preprocessingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo) { + public void preprocessingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo) { fileStatusProcessingUpdateService.preprocessingFailed(dossierId, fileId, fileErrorInfo); } @@ -66,8 +69,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP } - public void analysisFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo) { + public void analysisFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo) { fileStatusProcessingUpdateService.analysisFailed(dossierId, fileId, fileErrorInfo); } @@ -87,13 +89,16 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP public void ocrFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) { - fileStatusProcessingUpdateService.ocrFailed(dossierId, fileId, new FileErrorInfo("ocr failed", - MessagingConfiguration.OCR_DLQ, "ocr-service", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + fileStatusProcessingUpdateService.ocrFailed(dossierId, + fileId, + new FileErrorInfo("ocr failed", + MessagingConfiguration.OCR_DLQ, + "ocr-service", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } - public void ocrFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo) { + public void ocrFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo) { fileStatusProcessingUpdateService.ocrFailed(dossierId, fileId, fileErrorInfo); } @@ -113,12 +118,16 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP public void indexingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) { - fileStatusProcessingUpdateService.indexingFailed(dossierId, fileId, new FileErrorInfo("indexing failed", - MessagingConfiguration.INDEXING_DQL, "search-service", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + fileStatusProcessingUpdateService.indexingFailed(dossierId, + fileId, + new FileErrorInfo("indexing failed", + MessagingConfiguration.INDEXING_DQL, + "search-service", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } - public void indexingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo) { + + public void indexingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo) { fileStatusProcessingUpdateService.indexingFailed(dossierId, fileId, fileErrorInfo); } diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java index ffcde42f0..893c9823b 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java @@ -2,8 +2,10 @@ package com.iqser.red.service.persistence.v1.internal.api.controller; import com.iqser.red.commons.spring.ErrorMessage; import com.iqser.red.service.persistence.management.v1.processor.exception.*; + import io.swagger.v3.oas.annotations.Hidden; import lombok.extern.slf4j.Slf4j; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -74,6 +76,7 @@ public class InternalControllerAdvice { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.BAD_REQUEST) @@ -109,12 +112,14 @@ public class InternalControllerAdvice { @ExceptionHandler(value = MethodArgumentNotValidException.class) public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - var errorList = e.getFieldErrors(); - String errorListAsString = errorList.stream().map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()).collect(Collectors.joining(", ")); + String errorListAsString = errorList.stream() + .map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()) + .collect(Collectors.joining(", ")); return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString)); } + @Hidden @ResponseBody @ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY) diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/internal/AdminInterfaceController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/internal/AdminInterfaceController.java index 988dfdb29..0cdb2ca51 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/internal/AdminInterfaceController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/internal/AdminInterfaceController.java @@ -91,11 +91,11 @@ public class AdminInterfaceController { for (var file : filesThatRequireOCR) { log.info("Will OCR file: {} from dossier {} with status {} and processing status {} with last OCR time {}", - file.getId(), - file.getDossierId(), - file.getWorkflowStatus(), - file.getProcessingStatus(), - file.getOcrStartTime()); + file.getId(), + file.getDossierId(), + file.getWorkflowStatus(), + file.getProcessingStatus(), + file.getOcrStartTime()); if (!dryRun) { fileStatusService.validateFileIsNotDeletedAndNotApproved(file.getId()); @@ -129,11 +129,11 @@ public class AdminInterfaceController { for (var file : filesThatRequireTextReset) { log.info("Will OCR file: {} from dossier {} with status {} and processing status {} with last OCR time {}", - file.getId(), - file.getDossierId(), - file.getWorkflowStatus(), - file.getProcessingStatus(), - file.getOcrStartTime()); + file.getId(), + file.getDossierId(), + file.getWorkflowStatus(), + file.getProcessingStatus(), + file.getOcrStartTime()); if (!dryRun) { diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DictionaryResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DictionaryResource.java index 0e155a892..ee0f3cc3d 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DictionaryResource.java @@ -36,30 +36,30 @@ public interface DictionaryResource { String VERSION_PATH = "/version"; - @GetMapping(value = InternalApi.BASE_PATH+TYPE_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + TYPE_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) List getAllTypesForDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestParam(value = INCLUDE_DELETED_PARAMETER_NAME, required = false, defaultValue = "false") boolean includeDeleted); - @GetMapping(value = InternalApi.BASE_PATH+TYPE_PATH + DOSSIER_PATH + DOSSIER_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + TYPE_PATH + DOSSIER_PATH + DOSSIER_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) List getAllTypesForDossier(@PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId, @RequestParam(value = INCLUDE_DELETED_PARAMETER_NAME, required = false, defaultValue = "false") boolean includeDeleted); - @GetMapping(value = InternalApi.BASE_PATH+DICTIONARY_PATH + TYPE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + DICTIONARY_PATH + TYPE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) Type getDictionaryForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestParam(value = FROM_VERSION_PARAM, required = false) Long fromVersion); - @GetMapping(value = InternalApi.BASE_PATH+VERSION_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE) + @GetMapping(value = InternalApi.BASE_PATH + VERSION_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE) long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); - @GetMapping(value = InternalApi.BASE_PATH+VERSION_PATH + DOSSIER_PATH + DOSSIER_ID_PATH_VARIABLE) + @GetMapping(value = InternalApi.BASE_PATH + VERSION_PATH + DOSSIER_PATH + DOSSIER_ID_PATH_VARIABLE) long getVersionForDossier(@PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId); @ResponseBody - @GetMapping(value = InternalApi.BASE_PATH+COLOR_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + COLOR_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) Colors getColors(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); } diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DigitalSignatureResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DigitalSignatureResource.java index 315c0ae9c..41eb30757 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DigitalSignatureResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DigitalSignatureResource.java @@ -17,15 +17,15 @@ public interface DigitalSignatureResource { String DIGITAL_SIGNATURE_KMS_PATH = DIGITAL_SIGNATURE_PATH + "/kms"; - @GetMapping(value = InternalApi.BASE_PATH+DIGITAL_SIGNATURE_TYPE_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + DIGITAL_SIGNATURE_TYPE_PATH, produces = MediaType.APPLICATION_JSON_VALUE) DigitalSignatureType getActiveDigitalSignatureType(); - @GetMapping(value = InternalApi.BASE_PATH+DIGITAL_SIGNATURE_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + DIGITAL_SIGNATURE_PATH, produces = MediaType.APPLICATION_JSON_VALUE) DigitalSignature getDigitalSignature(); - @GetMapping(value = InternalApi.BASE_PATH+DIGITAL_SIGNATURE_KMS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + DIGITAL_SIGNATURE_KMS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) DigitalSignatureKms getDigitalSignatureKms(); } diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DossierTemplateResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DossierTemplateResource.java index 308bf0f4f..4a95d2b80 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DossierTemplateResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/DossierTemplateResource.java @@ -20,10 +20,12 @@ public interface DossierTemplateResource { String DOSSIER_ID_PATH_PARAM = "/{" + DOSSIER_TEMPLATE_ID_PARAM + "}"; + @ResponseBody @PostMapping(value = InternalApi.BASE_PATH + DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request); + @GetMapping(value = InternalApi.BASE_PATH + DOSSIER_TEMPLATE_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) DossierTemplate getDossierTemplateById(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId); diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java index 106dde48c..9275439bf 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java @@ -25,10 +25,12 @@ public interface EntityLogResource { String FALSE = "false"; + @ResponseBody @GetMapping(value = InternalApi.BASE_PATH + ENTITY_LOG_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) EntityLog getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = "excludedType", required = false) List excludedTypes, @RequestParam(value = "includeUnprocessed", required = false, defaultValue = FALSE) boolean includeUnprocessed); + } diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/FileStatusProcessingUpdateResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/FileStatusProcessingUpdateResource.java index 4b1b4fbf5..d0aeefa3b 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/FileStatusProcessingUpdateResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/FileStatusProcessingUpdateResource.java @@ -22,20 +22,25 @@ public interface FileStatusProcessingUpdateResource { @ResponseStatus(value = HttpStatus.OK) - @PostMapping(value = InternalApi.BASE_PATH + STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/preprocessing-successful", consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = InternalApi.BASE_PATH + + STATUS_PATH + + DOSSIER_ID_PATH_PARAM + + FILE_ID_PATH_VARIABLE + + "/preprocessing-successful", consumes = MediaType.APPLICATION_JSON_VALUE) void preprocessingSuccessful(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody UntouchedDocumentResponse untouchedDocumentResponse); + @Deprecated @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = InternalApi.BASE_PATH + STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/preprocessing-failed") void preprocessingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId); + @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = InternalApi.BASE_PATH + STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/preprocessing-failed-error") - void preprocessingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo); + void preprocessingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo); @ResponseStatus(value = HttpStatus.OK) @@ -56,8 +61,7 @@ public interface FileStatusProcessingUpdateResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = InternalApi.BASE_PATH + STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/analysis-failed-error") - void analysisFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo); + void analysisFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo); @ResponseStatus(value = HttpStatus.OK) @@ -78,8 +82,7 @@ public interface FileStatusProcessingUpdateResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = InternalApi.BASE_PATH + STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/ocr-failed-error") - void ocrFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo); + void ocrFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo); @ResponseStatus(value = HttpStatus.OK) @@ -100,7 +103,6 @@ public interface FileStatusProcessingUpdateResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = InternalApi.BASE_PATH + STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/indexing-failed-error") - void indexingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody FileErrorInfo fileErrorInfo); + void indexingFailed(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody FileErrorInfo fileErrorInfo); } diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/InternalApi.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/InternalApi.java index c3991e715..c33f3cec0 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/InternalApi.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/InternalApi.java @@ -2,5 +2,6 @@ package com.iqser.red.service.persistence.service.v1.api.internal.resources; public interface InternalApi { - String BASE_PATH = "/internal-api"; + String BASE_PATH = "/internal-api"; + } diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/ReportTemplateResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/ReportTemplateResource.java index 01cf7589f..2cdf52098 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/ReportTemplateResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/ReportTemplateResource.java @@ -23,7 +23,10 @@ public interface ReportTemplateResource { List getAvailableReportTemplates(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId); - @GetMapping(value = InternalApi.BASE_PATH + REPORT_TEMPLATE_UPLOAD_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = InternalApi.BASE_PATH + + REPORT_TEMPLATE_UPLOAD_PATH + + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + + TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) ReportTemplate getReportTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java index b0364f7ad..aedb1a56d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java @@ -78,9 +78,11 @@ public class ACLBeanConfiguration { @Bean public AclPermissionEvaluator defaultACLPermissionEvaluator() { + return new AclPermissionEvaluator(aclService()); } + @Bean @Primary public MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/RedPermission.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/RedPermission.java index 11da379da..2fc8e39f4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/RedPermission.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/RedPermission.java @@ -46,7 +46,9 @@ public class RedPermission extends AbstractPermission implements Permission { if (mask == null) { return Optional.empty(); } - return ALL_PERMISSIONS.stream().filter(p -> p.getMask() == mask).findAny(); + return ALL_PERMISSIONS.stream() + .filter(p -> p.getMask() == mask) + .findAny(); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java index eea1bd290..125ce5552 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/api/ICustomPermissionService.java @@ -53,7 +53,8 @@ public abstract class ICustomPermissionService exten } - public void applyCustomPermissions(CustomPermissionMappingModel customPermissionMappingModel, MutableAcl acl){ + public void applyCustomPermissions(CustomPermissionMappingModel customPermissionMappingModel, MutableAcl acl) { + applyAces(acl, customPermissionMappingModel); } @@ -65,13 +66,19 @@ public abstract class ICustomPermissionService exten var redPermission = RedPermission.resolvePermission(model.getTargetPermission().getMask()); if (redPermission.isPresent()) { - var masks = model.getMappedPermissions().stream().map(CustomPermissionModel::getMask).collect(Collectors.toSet()); + var masks = model.getMappedPermissions() + .stream() + .map(CustomPermissionModel::getMask) + .collect(Collectors.toSet()); var principalsForCustomPermission = getSidsForMasks(acl, masks); if (allowEveryoneElseSetting() && masks.contains(EVERYONE_ELSE.getMask())) { var allUserIds = getUserIds(); - var usersWithDefinedPermissions = getSidsForMasks(acl, definingPermissions().stream().map(AbstractPermission::getMask).collect(Collectors.toSet())); + var usersWithDefinedPermissions = getSidsForMasks(acl, + definingPermissions().stream() + .map(AbstractPermission::getMask) + .collect(Collectors.toSet())); allUserIds.removeAll(usersWithDefinedPermissions); principalsForCustomPermission.addAll(allUserIds); @@ -85,7 +92,8 @@ public abstract class ICustomPermissionService exten protected void clearAces(MutableAcl acl) { for (var i = acl.getEntries().size() - 1; i >= 0; i--) { - if (acl.getEntries().get(i).getPermission().getMask() == forPermission().getMask()) { + if (acl.getEntries() + .get(i).getPermission().getMask() == forPermission().getMask()) { acl.deleteAce(i); } } @@ -113,7 +121,10 @@ public abstract class ICustomPermissionService exten private Set getUserIds() { - return usersClient.getAllUsers(true).stream().map(User::getUserId).collect(Collectors.toSet()); + return usersClient.getAllUsers(true) + .stream() + .map(User::getUserId) + .collect(Collectors.toSet()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/constants/CustomPermissionConstants.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/constants/CustomPermissionConstants.java index 969a858ae..2c0817d83 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/constants/CustomPermissionConstants.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/constants/CustomPermissionConstants.java @@ -6,6 +6,7 @@ public final class CustomPermissionConstants { public static final CustomPermissionModel EVERYONE_ELSE = new CustomPermissionModel(-1, "EVERYONE_ELSE", 100_000, true); + private CustomPermissionConstants() {} } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java index 26d09550a..2330094b3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/AccessObjectDossierObjectPermissionService.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import org.springframework.security.acls.model.MutableAclService; import org.springframework.stereotype.Service; + import com.iqser.red.service.persistence.management.v1.processor.acl.RedPermission; import com.iqser.red.service.persistence.management.v1.processor.acl.custom.api.ICustomPermissionService; import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient; @@ -17,9 +18,8 @@ public class AccessObjectDossierObjectPermissionService extends ICustomPermissio private final DossierManagementService dossierManagementService; - public AccessObjectDossierObjectPermissionService(UsersClient usersClient, - MutableAclService mutableAclService, - DossierManagementService dossierManagementService) { + + public AccessObjectDossierObjectPermissionService(UsersClient usersClient, MutableAclService mutableAclService, DossierManagementService dossierManagementService) { super(usersClient, mutableAclService); this.dossierManagementService = dossierManagementService; @@ -36,7 +36,10 @@ public class AccessObjectDossierObjectPermissionService extends ICustomPermissio @Override protected Collection provideAllObjectIds() { - return dossierManagementService.getAllDossiers(true, true).stream().map(Dossier::getId).collect(Collectors.toList()); + return dossierManagementService.getAllDossiers(true, true) + .stream() + .map(Dossier::getId) + .collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java index c993566ee..b60076a01 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java @@ -41,7 +41,10 @@ public class DossierACLService extends AbstractACLService { @PostFilter("hasPermission(filterObject, 'Dossier', 'VIEW_OBJECT')") public List getDossierIdsWithViewPermission() { - return dossierManagementService.getAllDossiers(true, true).stream().map(Dossier::getId).collect(Collectors.toList()); + return dossierManagementService.getAllDossiers(true, true) + .stream() + .map(Dossier::getId) + .collect(Collectors.toList()); } @@ -50,20 +53,21 @@ public class DossierACLService extends AbstractACLService { ObjectIdentityImpl dossierIdentity = new ObjectIdentityImpl(getIdentifier(), dossierId); var acl = mutableAclService.readAclById(dossierIdentity); Set members = new HashSet<>(); - acl.getEntries().forEach(entry -> { - if (entry.getSid() instanceof PrincipalSid) { - var principal = ((PrincipalSid) entry.getSid()).getPrincipal(); - if (entry.getPermission().getMask() == RedPermission.APPROVE.getMask()) { - members.add(principal); - } - if (entry.getPermission().getMask() == RedPermission.REVIEW.getMask()) { - members.add(principal); - } - if (entry.getPermission().getMask() == RedPermission.OWNER.getMask()) { - members.add(principal); - } - } - }); + acl.getEntries() + .forEach(entry -> { + if (entry.getSid() instanceof PrincipalSid) { + var principal = ((PrincipalSid) entry.getSid()).getPrincipal(); + if (entry.getPermission().getMask() == RedPermission.APPROVE.getMask()) { + members.add(principal); + } + if (entry.getPermission().getMask() == RedPermission.REVIEW.getMask()) { + members.add(principal); + } + if (entry.getPermission().getMask() == RedPermission.OWNER.getMask()) { + members.add(principal); + } + } + }); return members; } @@ -82,22 +86,23 @@ public class DossierACLService extends AbstractACLService { dossier.setOwnerId(null); dossier.getMemberIds().clear(); dossier.getApproverIds().clear(); - acl.getEntries().forEach(entry -> { - if (entry.getSid() instanceof PrincipalSid) { - var principal = ((PrincipalSid) entry.getSid()).getPrincipal(); - if (entry.getPermission().getMask() == RedPermission.APPROVE.getMask()) { - dossier.getApproverIds().add(principal); - dossier.getMemberIds().add(principal); - } - if (entry.getPermission().getMask() == RedPermission.REVIEW.getMask()) { - dossier.getMemberIds().add(principal); - } - if (entry.getPermission().getMask() == RedPermission.OWNER.getMask()) { - dossier.getMemberIds().add(principal); - dossier.setOwnerId(principal); - } - } - }); + acl.getEntries() + .forEach(entry -> { + if (entry.getSid() instanceof PrincipalSid) { + var principal = ((PrincipalSid) entry.getSid()).getPrincipal(); + if (entry.getPermission().getMask() == RedPermission.APPROVE.getMask()) { + dossier.getApproverIds().add(principal); + dossier.getMemberIds().add(principal); + } + if (entry.getPermission().getMask() == RedPermission.REVIEW.getMask()) { + dossier.getMemberIds().add(principal); + } + if (entry.getPermission().getMask() == RedPermission.OWNER.getMask()) { + dossier.getMemberIds().add(principal); + dossier.setOwnerId(principal); + } + } + }); return dossier; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java index d0a72864a..8716e65ae 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/ViewObjectDossierObjectPermissionService.java @@ -37,7 +37,10 @@ public class ViewObjectDossierObjectPermissionService extends ICustomPermissionS @Override protected Collection provideAllObjectIds() { - return dossierManagementService.getAllDossiers(true, true).stream().map(Dossier::getId).collect(Collectors.toList()); + return dossierManagementService.getAllDossiers(true, true) + .stream() + .map(Dossier::getId) + .collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java index ff7360deb..20187d5d0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/initializer/ACLInitializer.java @@ -5,15 +5,15 @@ import java.util.List; import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor -public class ACLInitializer { +public class ACLInitializer { private final List aclInitializerList; + public void run() { aclInitializerList.sort(Comparator.comparingInt(IACLInitializer::sort)); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/service/CustomPermissionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/service/CustomPermissionService.java index 017edaafb..2828058a0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/service/CustomPermissionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/service/CustomPermissionService.java @@ -49,7 +49,9 @@ public class CustomPermissionService { public Set getAllSupportedTargetObjects() { - return customPermissionServices.stream().map(AbstractACLService::getIdentifier).collect(Collectors.toSet()); + return customPermissionServices.stream() + .map(AbstractACLService::getIdentifier) + .collect(Collectors.toSet()); } @@ -76,7 +78,9 @@ public class CustomPermissionService { } var key = fromPermission(targetPermission.get()); - var value = RedPermission.resolvePermission(permission.getExistingPermissionMask()).map(this::fromPermission).orElse(EVERYONE_ELSE); + var value = RedPermission.resolvePermission(permission.getExistingPermissionMask()) + .map(this::fromPermission) + .orElse(EVERYONE_ELSE); var list = mapping.computeIfAbsent(key, entry -> new ArrayList<>()); list.add(value); @@ -112,10 +116,12 @@ public class CustomPermissionService { public void applyCustomPermissions(String targetObject, MutableAcl acl) { + var mappings = getCustomPermissionMappings(targetObject); applyToAcl(mappings, acl); } + public void applyToAcl(List customPermissionMappingModels, MutableAcl acl) { customPermissionMappingModels.forEach(p -> customPermissionServices.forEach(s -> { @@ -125,6 +131,7 @@ public class CustomPermissionService { })); } + public void apply(List customPermissionMappingModels, Serializable objectId) { customPermissionMappingModels.forEach(p -> customPermissionServices.forEach(s -> { @@ -161,7 +168,8 @@ public class CustomPermissionService { CustomPermissionMappingModel cmp = new CustomPermissionMappingModel(); List permissionModels = new ArrayList<>(); - service.definingPermissions().forEach(dp -> permissionModels.add(fromPermission(dp))); + service.definingPermissions() + .forEach(dp -> permissionModels.add(fromPermission(dp))); if (service.allowEveryoneElseSetting()) { permissionModels.add(EVERYONE_ELSE); @@ -188,16 +196,20 @@ public class CustomPermissionService { // retrieve the defined configuration of permissions List existingPermissionDefined = getExistingPermissions(targetObject); - customPermissionMappingModel.forEach(c -> c.getMappedPermissions().forEach(value -> { - CustomPermissionEntity entity = new CustomPermissionEntity(targetObject, c.getTargetPermission().getMask(), value.getMask()); - entities.add(entity); - })); + customPermissionMappingModel.forEach(c -> c.getMappedPermissions() + .forEach(value -> { + CustomPermissionEntity entity = new CustomPermissionEntity(targetObject, c.getTargetPermission().getMask(), value.getMask()); + entities.add(entity); + })); for (CustomPermissionMappingModel permissionMappingModel : existingPermissionDefined) { CustomPermissionModel targetPermission = permissionMappingModel.getTargetPermission(); List mappedPermissionsDefined = permissionMappingModel.getMappedPermissions(); //retrieve the permissions which can be changeable in order to add them - List mappedPermissionMasksNotChangeable = mappedPermissionsDefined.stream().filter(p -> !p.isChangeable()).map(CustomPermissionModel::getMask).toList(); + List mappedPermissionMasksNotChangeable = mappedPermissionsDefined.stream() + .filter(p -> !p.isChangeable()) + .map(CustomPermissionModel::getMask) + .toList(); for (Integer mappedMask : mappedPermissionMasksNotChangeable) { Optional existingPermissionEntity = entities.stream() .filter(e -> e.getTargetPermissionMask() == targetPermission.getMask() && e.getExistingPermissionMask() == mappedMask) @@ -214,7 +226,4 @@ public class CustomPermissionService { this.apply(getCustomPermissionMappings(targetObject)); } - - - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/cache/PersistenceServiceExternalApiCacheConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/cache/PersistenceServiceExternalApiCacheConfiguration.java index 551ed0e67..07685b9e2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/cache/PersistenceServiceExternalApiCacheConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/cache/PersistenceServiceExternalApiCacheConfiguration.java @@ -46,9 +46,9 @@ public class PersistenceServiceExternalApiCacheConfiguration { return (builder) -> builder.withCacheConfiguration(RATE_LIMITER_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(60))) .withCacheConfiguration(ACL_CACHE, - RedisCacheConfiguration.defaultCacheConfig() - .entryTtl(Duration.ofMinutes(1)) - .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new JdkSerializationRedisSerializer()))) + RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofMinutes(1)) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new JdkSerializationRedisSerializer()))) .withCacheConfiguration(OTT_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10))); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/MessagingConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/MessagingConfiguration.java index f4cdc196f..0b7d74425 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/MessagingConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/MessagingConfiguration.java @@ -26,7 +26,6 @@ public class MessagingConfiguration { public static final String DOWNLOAD_COMPRESSION_QUEUE = "download_compression_queue"; public static final String DOWNLOAD_COMPRESSION_DLQ = "download_compression_dlq"; - public static final String EXPORT_DOWNLOAD_QUEUE = "exportDownloadQueue"; public static final String EXPORT_DOWNLOAD_DLQ = "exportDownloadDLQ"; @@ -75,7 +74,7 @@ public class MessagingConfiguration { public static final String X_ERROR_INFO_HEADER = "x-error-message"; public static final String X_ERROR_INFO_TIMESTAMP_HEADER = "x-error-message-timestamp"; - // --- Saas Migration, can be removed later ---- + // --- Saas Migration, can be removed later ---- public static final String MIGRATION_QUEUE = "migrationQueue"; public static final String MIGRATION_DLQ = "migrationDLQ"; @@ -99,11 +98,16 @@ public class MessagingConfiguration { @Bean public Queue migrationResponseQueue() { - return QueueBuilder.durable(MIGRATION_RESPONSE_QUEUE).withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", MIGRATION_DLQ).maxPriority(2).build(); + return QueueBuilder.durable(MIGRATION_RESPONSE_QUEUE) + .withArgument("x-dead-letter-exchange", "") + .withArgument("x-dead-letter-routing-key", MIGRATION_DLQ) + .maxPriority(2) + .build(); } // --- End Saas Migration + @Bean public Queue nerRequestQueue() { @@ -166,6 +170,7 @@ public class MessagingConfiguration { return QueueBuilder.durable(CV_ANALYSIS_DLQ).build(); } + @Bean public Queue visualLayoutParsingRequestQueue() { @@ -176,10 +181,7 @@ public class MessagingConfiguration { @Bean public Queue visualLayoutParsingResponseQueue() { - return QueueBuilder.durable(VISUAL_LAYOUT_RESPONSE_QUEUE) - .withArgument("x-dead-letter-exchange", "") - .withArgument("x-dead-letter-routing-key", VISUAL_LAYOUT_DLQ) - .build(); + return QueueBuilder.durable(VISUAL_LAYOUT_RESPONSE_QUEUE).withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", VISUAL_LAYOUT_DLQ).build(); } @@ -189,6 +191,7 @@ public class MessagingConfiguration { return QueueBuilder.durable(VISUAL_LAYOUT_DLQ).build(); } + @Bean public Queue ocrStatusUpdateResponseQueue() { @@ -212,6 +215,7 @@ public class MessagingConfiguration { return QueueBuilder.durable(REDACTION_QUEUE).withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", REDACTION_DQL).maxPriority(2).build(); } + @Bean public Queue redactionPriorityQueue() { @@ -222,6 +226,7 @@ public class MessagingConfiguration { .build(); } + @Bean public Queue redactionAnalysisResponseQueue() { @@ -258,10 +263,14 @@ public class MessagingConfiguration { return QueueBuilder.durable(DOWNLOAD_DLQ).build(); } + @Bean public Queue downloadCompressionQueue() { - return QueueBuilder.durable(DOWNLOAD_COMPRESSION_QUEUE).withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", DOWNLOAD_COMPRESSION_DLQ).build(); + return QueueBuilder.durable(DOWNLOAD_COMPRESSION_QUEUE) + .withArgument("x-dead-letter-exchange", "") + .withArgument("x-dead-letter-routing-key", DOWNLOAD_COMPRESSION_DLQ) + .build(); } @@ -318,6 +327,7 @@ public class MessagingConfiguration { return QueueBuilder.durable(REPORT_RESULT_DLQ).build(); } + @Bean public Queue analysisFlagCalculationQueue() { @@ -406,6 +416,7 @@ public class MessagingConfiguration { .build(); } + @Bean public Queue layoutparsingRequestQueue() { @@ -426,4 +437,5 @@ public class MessagingConfiguration { return QueueBuilder.durable(LAYOUT_PARSING_DLQ).build(); } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/WebConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/WebConfiguration.java index aa35122c0..39a8bbe7d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/WebConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/WebConfiguration.java @@ -13,15 +13,17 @@ public class WebConfiguration implements WebMvcConfigurer { private static final int TIMEOUT = 600000; // 10 minutes timeout; + @Override - public void addInterceptors(InterceptorRegistry registry) { + public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AsyncHandlerInterceptor() { @Override - public void afterConcurrentHandlingStarted(HttpServletRequest request, - HttpServletResponse response, Object handler) { + public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) { + request.getAsyncContext().setTimeout(TIMEOUT); } }); } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dev/DevDataProvider.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dev/DevDataProvider.java index 8c4dd35b6..47d118189 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dev/DevDataProvider.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dev/DevDataProvider.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.dev; - import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -51,16 +50,17 @@ public class DevDataProvider { try (ZipOutputStream zs = new ZipOutputStream(bos)) { Stream paths = Files.walk(p); { - paths.filter(path -> !Files.isDirectory(path)).forEach(path -> { - ZipEntry zipEntry = new ZipEntry(p.relativize(path).toString()); - try { - zs.putNextEntry(zipEntry); - Files.copy(path, zs); - zs.closeEntry(); - } catch (IOException e) { - System.err.println(e); - } - }); + paths.filter(path -> !Files.isDirectory(path)) + .forEach(path -> { + ZipEntry zipEntry = new ZipEntry(p.relativize(path).toString()); + try { + zs.putNextEntry(zipEntry); + Files.copy(path, zs); + zs.closeEntry(); + } catch (IOException e) { + System.err.println(e); + } + }); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IBaseAnnotation.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IBaseAnnotation.java index 58f071f0b..59ef1e897 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IBaseAnnotation.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IBaseAnnotation.java @@ -11,6 +11,7 @@ public interface IBaseAnnotation { @Deprecated(forRemoval = true) default AnnotationStatus getStatus() { + return AnnotationStatus.APPROVED; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java index 74c5e1d62..3f4effe1e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java @@ -66,4 +66,5 @@ public class ManualResizeRedactionEntity implements IBaseAnnotation { @ElementCollection @Fetch(value = FetchMode.SUBSELECT) private Set typeIdsOfModifiedDictionaries = new HashSet<>(); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java index dcb2fea76..2ee2c40e5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryFalsePositiveEntryEntity.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.configuration; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java index eb89041e6..9911d6ba4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DigitalSignatureKmsEntity.java @@ -42,7 +42,7 @@ public class DigitalSignatureKmsEntity { private String kmsSecretKey; @Column @Lob - @Basic(fetch= FetchType.EAGER) + @Basic(fetch = FetchType.EAGER) private byte[] certificate; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java index 4571064c5..3c1c88025 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java @@ -122,6 +122,4 @@ public class DossierTemplateEntity { @Transient private DossierTemplateStatus dossierTemplateStatus; - - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadRedactionFileStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadRedactionFileStatusEntity.java index 26370e75c..6d68d43b8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadRedactionFileStatusEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadRedactionFileStatusEntity.java @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.downloa import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadRedactionFileDetailsConverter; + import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; @@ -36,5 +37,4 @@ public class DownloadRedactionFileStatusEntity { @Convert(converter = JSONDownloadRedactionFileDetailsConverter.class) private List details = new ArrayList<>(); - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/SaasMigrationStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/SaasMigrationStatusEntity.java index e0b660f02..b4ed82546 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/SaasMigrationStatusEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/migration/SaasMigrationStatusEntity.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.migration; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus; + import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/NotFoundException.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/NotFoundException.java index 48001af5b..d1be853fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/NotFoundException.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/NotFoundException.java @@ -7,6 +7,7 @@ public class NotFoundException extends RuntimeException { super(message); } + public NotFoundException(String message, Throwable t) { super(message, t); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/RulesTimeoutDetectedException.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/RulesTimeoutDetectedException.java index ecd041ed9..259f253bf 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/RulesTimeoutDetectedException.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/RulesTimeoutDetectedException.java @@ -4,6 +4,7 @@ public class RulesTimeoutDetectedException extends RuntimeException { private static final String RULE_TIMEOUT_DETECTED_MESSAGE = "A timout (possible endless loop) was detected using the rules for dossierTemplateId %s"; + public RulesTimeoutDetectedException(String dossierTemplateId) { super(String.format(RULE_TIMEOUT_DETECTED_MESSAGE, dossierTemplateId)); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CreateJobsConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CreateJobsConfiguration.java index f0564a38a..660fbfa8f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CreateJobsConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/jobs/CreateJobsConfiguration.java @@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.jobs; import java.text.ParseException; import com.iqser.red.service.persistence.management.v1.processor.service.job.*; + import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; @@ -159,7 +160,6 @@ public class CreateJobsConfiguration { } - @Bean public Trigger downloadReadyJobTrigger() throws ParseException { @@ -183,6 +183,7 @@ public class CreateJobsConfiguration { .build(); } + @Bean public Trigger analysisFlagCalculationSchedulerTrigger() throws ParseException { @@ -206,6 +207,4 @@ public class CreateJobsConfiguration { .build(); } - - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationController.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationController.java index 918f1f129..dc056400b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationController.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationController.java @@ -22,7 +22,9 @@ public class MigrationController { @PostMapping public void run(@RequestParam("migrationName") String migrationName, @RequestParam("force") boolean force) { - migrations.stream().filter(m -> m.getName().equalsIgnoreCase(migrationName) || m.getClass().getSimpleName().equalsIgnoreCase(migrationName)).forEach(m -> m.run(force)); + migrations.stream() + .filter(m -> m.getName().equalsIgnoreCase(migrationName) || m.getClass().getSimpleName().equalsIgnoreCase(migrationName)) + .forEach(m -> m.run(force)); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java index 91ffd7840..34d0fe647 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java @@ -34,29 +34,31 @@ public class MigrationStarterService { @EventListener(ApplicationReadyEvent.class) public void migrate() { - tenantProvider.getTenants().forEach(tenant -> { + tenantProvider.getTenants() + .forEach(tenant -> { - if (!TenantUtils.isTenantReadyForPersistence(tenant)) { - return; - } + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; + } - TenantContext.setTenantId(tenant.getTenantId()); + TenantContext.setTenantId(tenant.getTenantId()); - //This is always running on startup - seedMigration(); - }); + //This is always running on startup + seedMigration(); + }); // This should only run in post upgrade hook if (settings.isMigrateOnly()) { - tenantProvider.getTenants().forEach(tenant -> { + tenantProvider.getTenants() + .forEach(tenant -> { - if (!TenantUtils.isTenantReadyForPersistence(tenant)) { - return; - } + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; + } - runForTenant(tenant.getTenantId()); - }); + runForTenant(tenant.getTenantId()); + }); log.info("Migration is finished"); System.exit(SpringApplication.exit(ctx, () -> 0)); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasAnnotationIdMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasAnnotationIdMigrationService.java index b6d08c9f7..239f2981f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasAnnotationIdMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasAnnotationIdMigrationService.java @@ -41,7 +41,8 @@ public class SaasAnnotationIdMigrationService { var newEntry = MagicConverter.convert(oldEntry.get(), ManualRedactionEntryEntity.class); newEntry.setPositions(MagicConverter.convert(oldEntry.get().getPositions(), RectangleEntity.class)); - newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()).get()); + newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()) + .get()); newEntry.setId(newAnnotationEntityId); manualRedactionRepository.deleteById(oldAnnotationEntityId); @@ -61,7 +62,8 @@ public class SaasAnnotationIdMigrationService { if (oldEntry.isPresent()) { var newEntry = MagicConverter.convert(oldEntry.get(), IdRemovalEntity.class); - newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()).get()); + newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()) + .get()); newEntry.setId(newAnnotationEntityId); removeRedactionRepository.deleteById(oldAnnotationEntityId); @@ -81,7 +83,8 @@ public class SaasAnnotationIdMigrationService { if (oldEntry.isPresent()) { var newEntry = MagicConverter.convert(oldEntry.get(), ManualForceRedactionEntity.class); - newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()).get()); + newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()) + .get()); newEntry.setId(newAnnotationEntityId); forceRedactionRepository.deleteById(oldAnnotationEntityId); @@ -103,7 +106,8 @@ public class SaasAnnotationIdMigrationService { var newEntry = MagicConverter.convert(oldEntry.get(), ManualResizeRedactionEntity.class); newEntry.setId(newAnnotationEntityId); newEntry.setPositions(MagicConverter.convert(oldEntry.get().getPositions(), RectangleEntity.class)); - newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()).get()); + newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()) + .get()); resizeRedactionRepository.deleteById(oldAnnotationEntityId); resizeRedactionRepository.save(newEntry); @@ -123,7 +127,8 @@ public class SaasAnnotationIdMigrationService { var newEntry = MagicConverter.convert(oldEntry.get(), ManualRecategorizationEntity.class); newEntry.setId(newAnnotationEntityId); - newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()).get()); + newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()) + .get()); recategorizationRepository.deleteById(oldAnnotationEntityId); recategorizationRepository.save(newEntry); @@ -143,7 +148,8 @@ public class SaasAnnotationIdMigrationService { var newEntry = MagicConverter.convert(oldEntry.get(), ManualLegalBasisChangeEntity.class); newEntry.setId(newAnnotationEntityId); - newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()).get()); + newEntry.setFileStatus(fileRepository.findById(oldAnnotationEntityId.getFileId()) + .get()); legalBasisChangeRepository.deleteById(oldAnnotationEntityId); legalBasisChangeRepository.save(newEntry); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java index a61021752..adcfa6881 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java @@ -237,7 +237,7 @@ public class SaasMigrationService implements TenantSyncService { private int addManualRedactionEntries(List manualRedactionEntriesToAdd) { - return manualRedactionService.addManualRedactionEntries(manualRedactionEntriesToAdd, true); + return manualRedactionService.addManualRedactionEntries(manualRedactionEntriesToAdd, true); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/UncompressedFilesMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/UncompressedFilesMigrationService.java index 89ddca69f..002fa964f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/UncompressedFilesMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/UncompressedFilesMigrationService.java @@ -19,10 +19,13 @@ import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageClientCache; import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.azure.AzureBlobClient; + import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; + import org.apache.commons.io.IOUtils; + import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; @@ -46,11 +49,7 @@ public class UncompressedFilesMigrationService { if (client.getS3StorageClient() != null) { var keysToMigrate = new ArrayList(); - ListObjectsV2Request listObjects = ListObjectsV2Request - .builder() - .bucket(client.getS3StorageClient().getS3StorageConnection().getBucketName()) - .maxKeys(100) - .build(); + ListObjectsV2Request listObjects = ListObjectsV2Request.builder().bucket(client.getS3StorageClient().getS3StorageConnection().getBucketName()).maxKeys(100).build(); var response = client.getS3StorageClient().listObjectsV2Paginator(listObjects); @@ -75,11 +74,7 @@ public class UncompressedFilesMigrationService { for (var key : keysToMigrate) { log.info("Migrating key: {}", key); - var getObjectRequest = GetObjectRequest - .builder() - .bucket(client.getS3StorageClient().getS3StorageConnection().getBucketName()) - .key(key) - .build(); + var getObjectRequest = GetObjectRequest.builder().bucket(client.getS3StorageClient().getS3StorageConnection().getBucketName()).key(key).build(); var tempFile = new File(tmpdir, key); // in case it was created by a previous migration @@ -88,7 +83,7 @@ public class UncompressedFilesMigrationService { client.getS3StorageClient().getObject(getObjectRequest, tempFile.toPath()); - try(var fis = new FileInputStream(tempFile)) { + try (var fis = new FileInputStream(tempFile)) { storageService.storeObject(tenant, key, fis); IOUtils.closeQuietly(fis); @@ -99,10 +94,7 @@ public class UncompressedFilesMigrationService { log.debug("Failed to delete temp file: {}", tempFile.getAbsolutePath()); } - var deleteObjectsRequest = DeleteObjectRequest.builder() - .bucket(client.getS3StorageClient().getS3StorageConnection().getBucketName()) - .key(key) - .build(); + var deleteObjectsRequest = DeleteObjectRequest.builder().bucket(client.getS3StorageClient().getS3StorageConnection().getBucketName()).key(key).build(); try { client.getS3StorageClient().deleteObject(deleteObjectsRequest); @@ -116,8 +108,7 @@ public class UncompressedFilesMigrationService { } else if (client.getAzureBlobClient() != null) { var azureClient = client.getAzureBlobClient(); - var blobContainerClient = - azureClient.getBlobServiceClient().getBlobContainerClient(client.getAzureBlobClient().getAzureStorageConnection().getContainerName()); + var blobContainerClient = azureClient.getBlobServiceClient().getBlobContainerClient(client.getAzureBlobClient().getAzureStorageConnection().getContainerName()); List keysToMigrate = new ArrayList<>(); @@ -133,7 +124,6 @@ public class UncompressedFilesMigrationService { log.info("Total files that require compression: {} / {} ", keysToMigrate.size(), counter.get()); - int attempts = 0; do { keysToMigrate = migrateBlobKeys(tenant, keysToMigrate, azureClient); @@ -157,8 +147,7 @@ public class UncompressedFilesMigrationService { for (var key : keysToMigrate) { try { - var blobContainerClient = - azureBlobClient.getBlobServiceClient().getBlobContainerClient(azureBlobClient.getAzureStorageConnection().getContainerName()); + var blobContainerClient = azureBlobClient.getBlobServiceClient().getBlobContainerClient(azureBlobClient.getAzureStorageConnection().getContainerName()); log.info("Migrating key: {}", key); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/FixDossierDictionaryEntryInRedactionLog14.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/FixDossierDictionaryEntryInRedactionLog14.java index 0d33b3ae5..eab343abc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/FixDossierDictionaryEntryInRedactionLog14.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/FixDossierDictionaryEntryInRedactionLog14.java @@ -1,8 +1,10 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migrations; import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; + import lombok.Setter; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; @Slf4j diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ManualRedactionTypeRenameMigration15.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ManualRedactionTypeRenameMigration15.java index 61c09ca34..c42fdcfe3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ManualRedactionTypeRenameMigration15.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ManualRedactionTypeRenameMigration15.java @@ -53,8 +53,7 @@ public class ManualRedactionTypeRenameMigration15 extends Migration { @Override /* * Migrates the ManualRedactionType ADD_LOCALLY -> ADD, FORCE_REDACT -> FORCE, FORCE_HINT -> FORCE, REMOVE_LOCALLY -> REMOVE. - */ - protected void migrate() { + */ protected void migrate() { log.info("Migrating ManualRedactionType names"); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/MissingFileSizeMigration13.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/MissingFileSizeMigration13.java index 383cb0194..e44aa2641 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/MissingFileSizeMigration13.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/MissingFileSizeMigration13.java @@ -1,13 +1,14 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migrations; - import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; + import lombok.Setter; import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,7 +38,10 @@ public class MissingFileSizeMigration13 extends Migration { @Override protected void migrate() { - List missingFileSizeFiles = fileStatusPersistenceService.getAllFiles().stream().filter(file -> file.getFileSize() == null).toList(); + List missingFileSizeFiles = fileStatusPersistenceService.getAllFiles() + .stream() + .filter(file -> file.getFileSize() == null) + .toList(); log.info("Number of files without fileSize: {}", missingFileSizeFiles.size()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java index 384f17125..ae15c181a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReduceTextFileSizeMigration10.java @@ -95,10 +95,9 @@ public class ReduceTextFileSizeMigration10 extends Migration { try { if (!storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak")) { - InputStream textInputStreamResource = fileManagementStorageService.getObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT)); - storageService.storeObject(TenantContext.getTenantId(), - StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak", - textInputStreamResource); + InputStream textInputStreamResource = fileManagementStorageService.getObject(TenantContext.getTenantId(), + StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT)); + storageService.storeObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak", textInputStreamResource); textInputStreamResource.close(); var text = storageService.readJSONObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), Text.class); storageService.storeJSONObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), text); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java index d3752467e..426c7417f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Image.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migrations.model.reducetext; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java index 7fc5c6637..b62a84d3d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/reducetext/Text.java @@ -3,7 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr import java.util.ArrayList; import java.util.List; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java index 4d8ca77dc..67bb6299e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/model/simplifiedtext/Text.java @@ -3,7 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr import java.util.ArrayList; import java.util.List; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/AnalysisFlagCalculationMessage.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/AnalysisFlagCalculationMessage.java index dcced1c54..f15b5934d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/AnalysisFlagCalculationMessage.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/AnalysisFlagCalculationMessage.java @@ -13,4 +13,5 @@ public class AnalysisFlagCalculationMessage { String dossierId; String fileId; + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/RedactionFileResult.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/RedactionFileResult.java index 86583b77c..702a15b5d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/RedactionFileResult.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/RedactionFileResult.java @@ -27,6 +27,7 @@ public class RedactionFileResult { public void increaseRetryCounter() { + this.retryCounter = this.retryCounter + 1; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/VisualLayoutParsingServiceRequest.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/VisualLayoutParsingServiceRequest.java index e0a0eb0d8..c78fa48f4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/VisualLayoutParsingServiceRequest.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/VisualLayoutParsingServiceRequest.java @@ -12,7 +12,8 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class VisualLayoutParsingServiceRequest { - public static final String VISUAL_LAYOUT_PARSING_FILE_EXTENSION= FileType.VISUAL_LAYOUT.name() + FileType.VISUAL_LAYOUT.getExtension() + ".gz"; + + public static final String VISUAL_LAYOUT_PARSING_FILE_EXTENSION = FileType.VISUAL_LAYOUT.name() + FileType.VISUAL_LAYOUT.getExtension() + ".gz"; public static final String TARGET_FILE_EXTENSION = "ORIGIN.pdf.gz"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/image/VisualLayoutParsingServiceResponse.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/image/VisualLayoutParsingServiceResponse.java index b7a1af9e6..965ce3c8f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/image/VisualLayoutParsingServiceResponse.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/model/image/VisualLayoutParsingServiceResponse.java @@ -13,4 +13,5 @@ public class VisualLayoutParsingServiceResponse { private String dossierId; private String fileId; + } \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 8a54f905d..c5ea43146 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -112,133 +112,133 @@ public final class ApplicationRoles { public static final Set UNMAPPED_ACTION_ROLES = Sets.newHashSet(UNARCHIVE_DOSSIER, UPDATE_LICENSE, GET_RSS); public static final Set RED_USER_ACTION_ROLES = Sets.newHashSet(ADD_COMMENT, - READ_LICENSE, - READ_APP_CONFIG, - READ_DOSSIER_STATUS, - ADD_DOSSIER_DICTIONARY_ENTRY, - DO_MANUAL_REDACTION, - ADD_UPDATE_DOSSIER_DICTIONARY_TYPE, - DELETE_COMMENT, - DELETE_DOSSIER_DICTIONARY_ENTRY, - DELETE_DOSSIER_DICTIONARY_TYPE, - DELETE_FILE, - DELETE_MANUAL_REDACTION, - DOWNLOAD_ANNOTATED_FILE, - DOWNLOAD_ORIGINAL_FILE, - DOWNLOAD_REDACTED_FILE, - DOWNLOAD_REDACTION_PREVIEW_FILE, - DOWNLOAD_REPORT_TEMPLATE, - EXCLUDE_INCLUDE_FILE, - EXCLUDE_INCLUDE_PAGES, - GET_REPORT_TEMPLATES, - MANAGE_USER_PREFERENCES, - MANAGE_VIEWED_PAGES, - PROCESS_DOWNLOAD, - PROCESS_MANUAL_REDACTION_REQUEST, - READ_COLORS, - READ_DICTIONARY_TYPES, - READ_DIGITAL_SIGNATURE, - READ_DOSSIER, - READ_DOSSIER_ATTRIBUTES, - READ_DOSSIER_ATTRIBUTES_CONFIG, - READ_DOSSIER_TEMPLATES, - READ_DOWNLOAD_STATUS, - READ_FILE_ATTRIBUTES_CONFIG, - READ_FILE_STATUS, - READ_GENERAL_CONFIGURATION, - READ_LEGAL_BASIS, - READ_MANUAL_REDACTIONS, - READ_NOTIFICATIONS, - READ_REDACTION_LOG, - READ_RULES, - READ_USERS, - READ_VERSIONS, - READ_WATERMARK, - REANALYZE_DOSSIER, - REANALYZE_FILE, - REQUEST_MANUAL_REDACTION, - ROTATE_PAGE, - SEARCH, - SEARCH_AUDIT_LOG, - SET_REVIEWER, - SET_STATUS_APPROVED, - SET_STATUS_UNDER_APPROVAL, - UPDATE_MY_PROFILE, - UPDATE_NOTIFICATIONS, - UPLOAD_FILE, - WRITE_FILE_ATTRIBUTES, - PROCESS_TEXT_HIGHLIGHTS, - GET_HIGHLIGHTS, - CONVERT_HIGHLIGHTS, - DELETE_HIGHLIGHTS, - DELETE_IMPORTED_REDACTIONS); + READ_LICENSE, + READ_APP_CONFIG, + READ_DOSSIER_STATUS, + ADD_DOSSIER_DICTIONARY_ENTRY, + DO_MANUAL_REDACTION, + ADD_UPDATE_DOSSIER_DICTIONARY_TYPE, + DELETE_COMMENT, + DELETE_DOSSIER_DICTIONARY_ENTRY, + DELETE_DOSSIER_DICTIONARY_TYPE, + DELETE_FILE, + DELETE_MANUAL_REDACTION, + DOWNLOAD_ANNOTATED_FILE, + DOWNLOAD_ORIGINAL_FILE, + DOWNLOAD_REDACTED_FILE, + DOWNLOAD_REDACTION_PREVIEW_FILE, + DOWNLOAD_REPORT_TEMPLATE, + EXCLUDE_INCLUDE_FILE, + EXCLUDE_INCLUDE_PAGES, + GET_REPORT_TEMPLATES, + MANAGE_USER_PREFERENCES, + MANAGE_VIEWED_PAGES, + PROCESS_DOWNLOAD, + PROCESS_MANUAL_REDACTION_REQUEST, + READ_COLORS, + READ_DICTIONARY_TYPES, + READ_DIGITAL_SIGNATURE, + READ_DOSSIER, + READ_DOSSIER_ATTRIBUTES, + READ_DOSSIER_ATTRIBUTES_CONFIG, + READ_DOSSIER_TEMPLATES, + READ_DOWNLOAD_STATUS, + READ_FILE_ATTRIBUTES_CONFIG, + READ_FILE_STATUS, + READ_GENERAL_CONFIGURATION, + READ_LEGAL_BASIS, + READ_MANUAL_REDACTIONS, + READ_NOTIFICATIONS, + READ_REDACTION_LOG, + READ_RULES, + READ_USERS, + READ_VERSIONS, + READ_WATERMARK, + REANALYZE_DOSSIER, + REANALYZE_FILE, + REQUEST_MANUAL_REDACTION, + ROTATE_PAGE, + SEARCH, + SEARCH_AUDIT_LOG, + SET_REVIEWER, + SET_STATUS_APPROVED, + SET_STATUS_UNDER_APPROVAL, + UPDATE_MY_PROFILE, + UPDATE_NOTIFICATIONS, + UPLOAD_FILE, + WRITE_FILE_ATTRIBUTES, + PROCESS_TEXT_HIGHLIGHTS, + GET_HIGHLIGHTS, + CONVERT_HIGHLIGHTS, + DELETE_HIGHLIGHTS, + DELETE_IMPORTED_REDACTIONS); public static final Set RED_ADMIN_ACTION_ROLES = Sets.newHashSet(ADD_DICTIONARY_ENTRY, - ADD_UPDATE_DICTIONARY_TYPE, - WRITE_DOSSIER_STATUS, - READ_DOSSIER_STATUS, - DELETE_DICTIONARY_ENTRY, - DELETE_DICTIONARY_TYPE, - DELETE_REPORT_TEMPLATE, - DOWNLOAD_REPORT_TEMPLATE, - GET_REPORT_TEMPLATES, - MANAGE_USER_PREFERENCES, - READ_COLORS, - READ_DICTIONARY_TYPES, - READ_DIGITAL_SIGNATURE, - READ_DOSSIER_ATTRIBUTES, - READ_DOSSIER_ATTRIBUTES_CONFIG, - READ_DOSSIER_TEMPLATES, - READ_FILE_ATTRIBUTES_CONFIG, - READ_LEGAL_BASIS, - READ_LICENSE_REPORT, - READ_NOTIFICATIONS, - READ_RULES, - READ_SMTP_CONFIGURATION, - READ_VERSIONS, - READ_WATERMARK, - REINDEX, - SEARCH_AUDIT_LOG, - UPDATE_NOTIFICATIONS, - UPLOAD_REPORT_TEMPLATE, - WRITE_COLORS, - WRITE_DIGITAL_SIGNATURE, - WRITE_DOSSIER_ATTRIBUTES_CONFIG, - WRITE_DOSSIER_TEMPLATES, - WRITE_FILE_ATTRIBUTES_CONFIG, - WRITE_GENERAL_CONFIGURATION, - WRITE_LEGAL_BASIS, - WRITE_RULES, - WRITE_SMTP_CONFIGURATION, - WRITE_WATERMARK, - WRITE_APP_CONFIG, - MANAGE_ACL_PERMISSIONS, - CREATE_TENANT, - GET_TENANTS, - DEPLOYMENT_INFO); + ADD_UPDATE_DICTIONARY_TYPE, + WRITE_DOSSIER_STATUS, + READ_DOSSIER_STATUS, + DELETE_DICTIONARY_ENTRY, + DELETE_DICTIONARY_TYPE, + DELETE_REPORT_TEMPLATE, + DOWNLOAD_REPORT_TEMPLATE, + GET_REPORT_TEMPLATES, + MANAGE_USER_PREFERENCES, + READ_COLORS, + READ_DICTIONARY_TYPES, + READ_DIGITAL_SIGNATURE, + READ_DOSSIER_ATTRIBUTES, + READ_DOSSIER_ATTRIBUTES_CONFIG, + READ_DOSSIER_TEMPLATES, + READ_FILE_ATTRIBUTES_CONFIG, + READ_LEGAL_BASIS, + READ_LICENSE_REPORT, + READ_NOTIFICATIONS, + READ_RULES, + READ_SMTP_CONFIGURATION, + READ_VERSIONS, + READ_WATERMARK, + REINDEX, + SEARCH_AUDIT_LOG, + UPDATE_NOTIFICATIONS, + UPLOAD_REPORT_TEMPLATE, + WRITE_COLORS, + WRITE_DIGITAL_SIGNATURE, + WRITE_DOSSIER_ATTRIBUTES_CONFIG, + WRITE_DOSSIER_TEMPLATES, + WRITE_FILE_ATTRIBUTES_CONFIG, + WRITE_GENERAL_CONFIGURATION, + WRITE_LEGAL_BASIS, + WRITE_RULES, + WRITE_SMTP_CONFIGURATION, + WRITE_WATERMARK, + WRITE_APP_CONFIG, + MANAGE_ACL_PERMISSIONS, + CREATE_TENANT, + GET_TENANTS, + DEPLOYMENT_INFO); public static final Set RED_MANAGER_ACTION_ROLES = Sets.newHashSet(ADD_UPDATE_DOSSIER, ARCHIVE_DOSSIER, DELETE_DOSSIER, WRITE_DOSSIER_ATTRIBUTES); public static final Set RED_USER_ADMIN_ACTION_ROLES = Sets.newHashSet(MANAGE_USER_PREFERENCES, - READ_ALL_USERS, - READ_APP_CONFIG, - READ_GENERAL_CONFIGURATION, - READ_GENERAL_CONFIGURATION, - READ_NOTIFICATIONS, - READ_USERS, - UPDATE_MY_PROFILE, - UPDATE_NOTIFICATIONS, - WRITE_USERS, - READ_LICENSE); + READ_ALL_USERS, + READ_APP_CONFIG, + READ_GENERAL_CONFIGURATION, + READ_GENERAL_CONFIGURATION, + READ_NOTIFICATIONS, + READ_USERS, + UPDATE_MY_PROFILE, + UPDATE_NOTIFICATIONS, + WRITE_USERS, + READ_LICENSE); public static final Map> ROLE_DATA = Map.of(RED_USER_ROLE, - RED_USER_ACTION_ROLES, - RED_MANAGER_ROLE, - RED_MANAGER_ACTION_ROLES, - RED_ADMIN_ROLE, - RED_ADMIN_ACTION_ROLES, - RED_USER_ADMIN_ROLE, - RED_USER_ADMIN_ACTION_ROLES); + RED_USER_ACTION_ROLES, + RED_MANAGER_ROLE, + RED_MANAGER_ACTION_ROLES, + RED_ADMIN_ROLE, + RED_ADMIN_ACTION_ROLES, + RED_USER_ADMIN_ROLE, + RED_USER_ADMIN_ACTION_ROLES); private ApplicationRoles() {} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java index 147c8a1a1..19dcfa13b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java @@ -124,7 +124,6 @@ public class AccessControlService { } - // checks that the user has view permissions to dossier and returns a boolean flag public boolean hasUserViewPermissionsForDossier(String dossierId) { @@ -134,7 +133,9 @@ public class AccessControlService { public boolean hasUserAuthority(String authority) { - return SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream().anyMatch(a -> a.getAuthority().equals(authority)); + return SecurityContextHolder.getContext().getAuthentication().getAuthorities() + .stream() + .anyMatch(a -> a.getAuthority().equals(authority)); } @@ -154,34 +155,44 @@ public class AccessControlService { } } + //verifies that user has view permissions to the dossier and responds with 404 if it doesn't public void checkViewPermissionsToDossier(String dossierId) { + if (!hasUserViewPermissionsForDossier(dossierId)) { throw new DossierNotFoundException(DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE); } } + //verifies that dossier is present and not deleted and user has view permissions to the dossier and responds with 404 if it doesn't public void checkDossierExistenceAndViewPermissionsToDossier(String dossierId) { + dossierManagementService.getDossierById(dossierId, true, false); checkViewPermissionsToDossier(dossierId); } + //verifies that user has access permissions to the dossier and responds with 403 in case it doesn't @PostAuthorize("hasPermission(#dossierId, 'Dossier', 'ACCESS_OBJECT')") public void checkAccessPermissionsToDossier(String dossierId) { + checkViewPermissionsToDossier(dossierId); } + //checks the existence of dossier and if it is not deleted and view permissions @PostAuthorize("hasPermission(#dossierId, 'Dossier', 'ACCESS_OBJECT')") public void checkDossierExistenceAndAccessPermissionsToDossier(String dossierId) { + checkDossierExistenceAndViewPermissionsToDossier(dossierId); } + public void validateFileResourceExistence(String fileId) { + var status = fileStatusManagementService.getFileStatus(fileId); - if(status.isSoftOrHardDeleted()) { + if (status.isSoftOrHardDeleted()) { throw new NotFoundException("File not found"); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ApplicationConfigService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ApplicationConfigService.java index 096018d1f..ecab4d4fa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ApplicationConfigService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ApplicationConfigService.java @@ -19,7 +19,8 @@ public class ApplicationConfigService { public ApplicationConfigurationEntity getApplicationConfig() { - return applicationConfigRepository.findById(ApplicationConfigurationEntity.ID).orElseThrow(() -> new NotFoundException("Application Configuration not found")); + return applicationConfigRepository.findById(ApplicationConfigurationEntity.ID) + .orElseThrow(() -> new NotFoundException("Application Configuration not found")); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java index 50dcba08c..2e06aed77 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java @@ -24,24 +24,25 @@ public class ColorsService { public ColorsEntity getColors(String dossierTemplateId) { - return colorsRepository.findById(dossierTemplateId).orElseGet(() -> { - String defaultColor = "#aaaaaa"; - var entity = new ColorsEntity(); - entity.setDossierTemplateId(dossierTemplateId); - entity.setRequestAddColor(defaultColor); - entity.setRequestRemoveColor(defaultColor); - entity.setDictionaryRequestColor(defaultColor); - entity.setPreviewColor(defaultColor); - entity.setAnalysisColor(defaultColor); - entity.setUpdatedColor(defaultColor); - entity.setRecommendationColor(defaultColor); - entity.setHintColor(defaultColor); - entity.setRedactionColor(defaultColor); - entity.setIgnoredHintColor(defaultColor); - entity.setSkippedColor(defaultColor); - entity.setAppliedRedactionColor("#000000"); - return colorsRepository.saveAndFlush(entity); - }); + return colorsRepository.findById(dossierTemplateId) + .orElseGet(() -> { + String defaultColor = "#aaaaaa"; + var entity = new ColorsEntity(); + entity.setDossierTemplateId(dossierTemplateId); + entity.setRequestAddColor(defaultColor); + entity.setRequestRemoveColor(defaultColor); + entity.setDictionaryRequestColor(defaultColor); + entity.setPreviewColor(defaultColor); + entity.setAnalysisColor(defaultColor); + entity.setUpdatedColor(defaultColor); + entity.setRecommendationColor(defaultColor); + entity.setHintColor(defaultColor); + entity.setRedactionColor(defaultColor); + entity.setIgnoredHintColor(defaultColor); + entity.setSkippedColor(defaultColor); + entity.setAppliedRedactionColor("#000000"); + return colorsRepository.saveAndFlush(entity); + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CommentService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CommentService.java index 56a2bfab9..49f68caff 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CommentService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/CommentService.java @@ -47,8 +47,7 @@ public class CommentService { @Transactional public Map> getComments(String fileId) { - return commentPersistenceService.findCommentsByFileID(fileId, false) - .entrySet() + return commentPersistenceService.findCommentsByFileID(fileId, false).entrySet() .stream() .collect(Collectors.toMap(Map.Entry::getKey, entry -> toCommentList(entry.getValue()))); } @@ -91,12 +90,12 @@ public class CommentService { checkComment(comment); return commentPersistenceService.insert(CommentEntity.builder() - .text(comment) - .fileId(fileId) - .annotationId(annotationId) - .user(user) - .date(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)) - .build()); + .text(comment) + .fileId(fileId) + .annotationId(annotationId) + .user(user) + .date(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)) + .build()); } @@ -114,7 +113,9 @@ public class CommentService { private static List toCommentList(List entity) { - return entity.stream().map(CommentService::toComment).toList(); + return entity.stream() + .map(CommentService::toComment) + .toList(); } @@ -132,7 +133,9 @@ public class CommentService { public Map getCommentCounts(String fileId) { - return commentPersistenceService.findCommentsByFileID(fileId, false).entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().size())); + return commentPersistenceService.findCommentsByFileID(fileId, false).entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().size())); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java index 89466eac2..54d907efa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java @@ -23,44 +23,44 @@ public class ComponentLogService { // TODO: make this DB changeable! private static final List ORDER = List.of("Study_Title", - "Performing_Laboratory", - "Report_Number", - "GLP_Study", - "Test_Guidelines_1", - "Test_Guidelines_2", - "Experimental_Starting_Date", - "Experimental_Completion_Date", - "Certificate_of_Analysis_Batch_Identification", - "Species", - "Strain", - "Was_the_definitive_study_conducted_with_positive_control", - "Study_Design_Main_Study", - "Results_Main_Study", - "Preliminary_Test_Results", - "What_was_the_approach_used", - "Sex", - "Number_of_Animals", - "Study_Design", - "Test_Results", - "Results_and_Conclusions", - "Conducted_with_4_Hours_of_Exposure", - "Dosages", - "Doses_mg_per_kg_bw", - "Mortality", - "Dose_Mortality", - "Mortality_Statement", - "Weight_Behavior_Changes", - "Clinical_Observations", - "Clinical_Signs", - "Body_Weight_Changes", - "Necropsy_Findings", - "Detailing_of_Reported_Changes", - "Deviation_from_the_Guideline", - "Conclusion_LD50_Greater_than", - "Conclusion_LD50_mg_per_kg", - "Conclusion_Minimum_Confidence", - "Conclusion_Maximum_Confidence", - "Study_Conclusion"); + "Performing_Laboratory", + "Report_Number", + "GLP_Study", + "Test_Guidelines_1", + "Test_Guidelines_2", + "Experimental_Starting_Date", + "Experimental_Completion_Date", + "Certificate_of_Analysis_Batch_Identification", + "Species", + "Strain", + "Was_the_definitive_study_conducted_with_positive_control", + "Study_Design_Main_Study", + "Results_Main_Study", + "Preliminary_Test_Results", + "What_was_the_approach_used", + "Sex", + "Number_of_Animals", + "Study_Design", + "Test_Results", + "Results_and_Conclusions", + "Conducted_with_4_Hours_of_Exposure", + "Dosages", + "Doses_mg_per_kg_bw", + "Mortality", + "Dose_Mortality", + "Mortality_Statement", + "Weight_Behavior_Changes", + "Clinical_Observations", + "Clinical_Signs", + "Body_Weight_Changes", + "Necropsy_Findings", + "Detailing_of_Reported_Changes", + "Deviation_from_the_Guideline", + "Conclusion_LD50_Greater_than", + "Conclusion_LD50_mg_per_kg", + "Conclusion_Minimum_Confidence", + "Conclusion_Maximum_Confidence", + "Study_Conclusion"); public ComponentLog getComponentLog(String dossierId, String fileId, boolean includeOverrides) { @@ -78,7 +78,9 @@ public class ComponentLogService { List overriddenComponentLogEntries = componentLog.getComponentLogEntries() .stream() - .map(componentLogEntry -> applyOverride(componentLogEntry, componentsOverrides.getComponentOverrides().get(componentLogEntry.getName()))) + .map(componentLogEntry -> applyOverride(componentLogEntry, + componentsOverrides.getComponentOverrides() + .get(componentLogEntry.getName()))) .toList(); componentLog.setComponentLogEntries(overriddenComponentLogEntries); @@ -90,8 +92,11 @@ public class ComponentLogService { private ComponentLog sortComponentLogEntriesByOrderList(ComponentLog componentLog, List order) { return new ComponentLog(componentLog.getAnalysisNumber(), - componentLog.getComponentRulesVersion(), - componentLog.getComponentLogEntries().stream().sorted(new ComponentOrderComparator(order)).toList()); + componentLog.getComponentRulesVersion(), + componentLog.getComponentLogEntries() + .stream() + .sorted(new ComponentOrderComparator(order)) + .toList()); } @@ -107,7 +112,8 @@ public class ComponentLogService { if (Objects.isNull(override)) { return componentLogEntry; } - componentLogEntry.getComponentValues().forEach(componentValue -> componentValue.setValue(override)); + componentLogEntry.getComponentValues() + .forEach(componentValue -> componentValue.setValue(override)); return componentLogEntry; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentOverrideService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentOverrideService.java index 79b8535fa..b61aea6df 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentOverrideService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentOverrideService.java @@ -59,7 +59,8 @@ public class ComponentOverrideService { var existingComponentsBytes = fileManagementStorageService.getStoredObjectBytes(dossierId, fileId, FileType.COMPONENTS); var existingComponents = objectMapper.readValue(existingComponentsBytes, ComponentsOverrides.class); - revertOverrideRequest.getComponents().forEach(c -> existingComponents.getComponentOverrides().remove(c)); + revertOverrideRequest.getComponents() + .forEach(c -> existingComponents.getComponentOverrides().remove(c)); fileManagementStorageService.storeObject(dossierId, fileId, FileType.COMPONENTS, new ByteArrayInputStream(objectMapper.writeValueAsBytes(existingComponents))); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java index 221097d10..cfa0613f1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java @@ -51,8 +51,9 @@ public class DictionaryManagementService { private final DossierService dossierService; - public List getAllEntriesInDossierTemplate(String dossierTemplateTypeId, String value, DictionaryEntryType dictionaryEntryType){ - return MagicConverter.convert(entryPersistenceService.getAllEntriesInDossierTemplate(dossierTemplateTypeId, value, dictionaryEntryType),DictionaryEntry.class); + public List getAllEntriesInDossierTemplate(String dossierTemplateTypeId, String value, DictionaryEntryType dictionaryEntryType) { + + return MagicConverter.convert(entryPersistenceService.getAllEntriesInDossierTemplate(dossierTemplateTypeId, value, dictionaryEntryType), DictionaryEntry.class); } @@ -90,22 +91,22 @@ public class DictionaryManagementService { } return MagicConverter.convert(dictionaryPersistenceService.addType(typeRequest.getType(), - typeRequest.getDossierTemplateId(), - color, - recommendationHexColor, - skippedHexColor, - typeRequest.getRank(), - typeRequest.isHint(), - typeRequest.isCaseInsensitive(), - typeRequest.isRecommendation(), - typeRequest.getDescription(), - typeRequest.isAddToDictionaryAction(), - typeRequest.getLabel(), - typeRequest.getDossierId(), - typeRequest.isHasDictionary(), - typeRequest.isSystemManaged(), - typeRequest.isAutoHideSkipped(), - typeRequest.isDossierDictionaryOnly()), Type.class, new TypeMapper()); + typeRequest.getDossierTemplateId(), + color, + recommendationHexColor, + skippedHexColor, + typeRequest.getRank(), + typeRequest.isHint(), + typeRequest.isCaseInsensitive(), + typeRequest.isRecommendation(), + typeRequest.getDescription(), + typeRequest.isAddToDictionaryAction(), + typeRequest.getLabel(), + typeRequest.getDossierId(), + typeRequest.isHasDictionary(), + typeRequest.isSystemManaged(), + typeRequest.isAutoHideSkipped(), + typeRequest.isDossierDictionaryOnly()), Type.class, new TypeMapper()); } @@ -131,9 +132,11 @@ public class DictionaryManagementService { List typeResponse = dictionaryPersistenceService.getCumulatedTypes(dossierTemplateId, dossierId, false); for (TypeEntity res : typeResponse) { var dossierTemplateResponse = res.getDossierTemplateId() == null ? res.getDossierTemplate().getId() : res.getDossierTemplateId(); - if (res.getDossierId() != null && res.getDossierId() - .equals(dossierId) && !type.equals(res.getType()) && dossierTemplateResponse.equals(dossierTemplateId) && labelToCheck.equals(res.getLabel()) || !type.equals( - res.getType()) && dossierTemplateResponse.equals(dossierTemplateId) && labelToCheck.equals(res.getLabel())) { + if (res.getDossierId() != null + && res.getDossierId().equals(dossierId) + && !type.equals(res.getType()) + && dossierTemplateResponse.equals(dossierTemplateId) + && labelToCheck.equals(res.getLabel()) || !type.equals(res.getType()) && dossierTemplateResponse.equals(dossierTemplateId) && labelToCheck.equals(res.getLabel())) { throw new ConflictException("Label must be unique."); } } @@ -144,10 +147,13 @@ public class DictionaryManagementService { return dictionaryPersistenceService.getCumulatedTypes(typeRequest.getDossierTemplateId(), typeRequest.getDossierId(), false) .stream() - .anyMatch(typeResult -> typeRequest.getDossierId() != null && typeResult.getDossierId() != null && typeRequest.getDossierId() - .equals(typeResult.getDossierId()) && typeRequest.getType().equals(typeResult.getType()) && typeRequest.getDossierTemplateId() - .equals(typeResult.getDossierTemplateId()) || typeRequest.getDossierId() == null && typeRequest.getType() - .equals(typeResult.getType()) && typeRequest.getDossierTemplateId().equals(typeResult.getDossierTemplateId())); + .anyMatch(typeResult -> typeRequest.getDossierId() != null + && typeResult.getDossierId() != null + && typeRequest.getDossierId().equals(typeResult.getDossierId()) + && typeRequest.getType().equals(typeResult.getType()) + && typeRequest.getDossierTemplateId().equals(typeResult.getDossierTemplateId()) + || typeRequest.getDossierId() == null && typeRequest.getType().equals(typeResult.getType()) && typeRequest.getDossierTemplateId() + .equals(typeResult.getDossierTemplateId())); } @@ -233,7 +239,9 @@ public class DictionaryManagementService { checkForDossierTypeExistenceAndCreate(typeId); - Set cleanEntries = entries.stream().map(StringCleaningUtility::cleanString).collect(toSet()); + Set cleanEntries = entries.stream() + .map(StringCleaningUtility::cleanString) + .collect(toSet()); if (CollectionUtils.isEmpty(entries)) { throw new BadRequestException("Entry list is empty."); @@ -288,7 +296,9 @@ public class DictionaryManagementService { } } + public void checkDossierMatchesDossierTemplate(String dossierId, String dossierTemplateId) { + var dossier = dossierService.getDossierById(dossierId); if (!dossier.getDossierTemplateId().equals(dossierTemplateId)) { throw new BadRequestException(String.format("Dossier %s and dossier template %s mismatched", dossierId, dossierTemplateId)); @@ -298,14 +308,18 @@ public class DictionaryManagementService { private Set getInvalidEntries(Set entries) { - Predicate isDictionaryEntryNotValid = entry -> DictionaryValidator.validateDictionaryEntry(entry).isPresent(); + Predicate isDictionaryEntryNotValid = entry -> DictionaryValidator.validateDictionaryEntry(entry) + .isPresent(); Predicate isStopword = stopwordService::isStopword; - return entries.stream().filter(isDictionaryEntryNotValid.or(isStopword)).collect(toSet()); + return entries.stream() + .filter(isDictionaryEntryNotValid.or(isStopword)) + .collect(toSet()); } public void deleteEntries(String typeId, List entries, DictionaryEntryType dictionaryEntryType) { + checkForDossierTypeExistenceAndCreate(typeId); // To check whether the type exists @@ -313,28 +327,40 @@ public class DictionaryManagementService { var currentVersion = getCurrentVersion(typeResult); - List allExistingEntiesFromType = entryPersistenceService.getEntries(typeId, dictionaryEntryType, null).stream().map(BaseDictionaryEntry::getValue).toList(); + List allExistingEntiesFromType = entryPersistenceService.getEntries(typeId, dictionaryEntryType, null) + .stream() + .map(BaseDictionaryEntry::getValue) + .toList(); if (typeResult.isCaseInsensitive()) { // Set existing entries to deleted. - var caseInsensitiveExistingEntries = allExistingEntiesFromType.stream().filter(e -> entries.stream().anyMatch(e::equalsIgnoreCase)).collect(toSet()); - entryPersistenceService.deleteEntries(typeId, - caseInsensitiveExistingEntries, - currentVersion + 1, - dictionaryEntryType); + var caseInsensitiveExistingEntries = allExistingEntiesFromType.stream() + .filter(e -> entries.stream() + .anyMatch(e::equalsIgnoreCase)) + .collect(toSet()); + entryPersistenceService.deleteEntries(typeId, caseInsensitiveExistingEntries, currentVersion + 1, dictionaryEntryType); // Create new deleted entries for not existing. - var caseInsensitiveNonExistingEntries = entries.stream().filter(e -> caseInsensitiveExistingEntries.stream().noneMatch(e::equalsIgnoreCase)).collect(toSet()); + var caseInsensitiveNonExistingEntries = entries.stream() + .filter(e -> caseInsensitiveExistingEntries.stream() + .noneMatch(e::equalsIgnoreCase)) + .collect(toSet()); entryPersistenceService.addDeleteEntries(typeId, caseInsensitiveNonExistingEntries, currentVersion + 1, dictionaryEntryType); } else { // Set existing entries to deleted. - var caseSensitiveExistingEntries = allExistingEntiesFromType.stream().filter(e -> entries.stream().anyMatch(e::equals)).collect(toSet()); + var caseSensitiveExistingEntries = allExistingEntiesFromType.stream() + .filter(e -> entries.stream() + .anyMatch(e::equals)) + .collect(toSet()); entryPersistenceService.deleteEntries(typeId, new HashSet<>(caseSensitiveExistingEntries), currentVersion + 1, dictionaryEntryType); // Create new deleted entries for not existing. - var nonExistingEntries = entries.stream().filter(e -> caseSensitiveExistingEntries.stream().noneMatch(e::equals)).collect(toSet()); + var nonExistingEntries = entries.stream() + .filter(e -> caseSensitiveExistingEntries.stream() + .noneMatch(e::equals)) + .collect(toSet()); entryPersistenceService.addDeleteEntries(typeId, nonExistingEntries, currentVersion + 1, dictionaryEntryType); } @@ -374,10 +400,13 @@ public class DictionaryManagementService { return currentVersion; } + public void validateAddRemoveToDossierTemplateDictionary(String dossierTemplateTypeId) { + this.validateAddRemoveToDossierTemplateDictionary(dossierTemplateTypeId, true, true); } + public void validateAddRemoveToDossierTemplateDictionary(String dossierTemplateTypeId, boolean isAddRemoveToDictionary, boolean isAddRemoveToAllDossiers) { var type = dictionaryPersistenceService.getType(dossierTemplateTypeId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java index 84669d45e..3efa30149 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java @@ -136,21 +136,21 @@ public class DictionaryService { private void updateType(String dossierTemplateId, String typeId, UpdateTypeValue typeValue) { dictionaryManagementService.updateTypeValue(typeId, - Type.builder() - .dossierTemplateId(dossierTemplateId) - .hexColor(typeValue.getHexColor()) - .recommendationHexColor(typeValue.getRecommendationHexColor()) - .skippedHexColor(typeValue.getSkippedHexColor()) - .rank(typeValue.getRank()) - .isHint(typeValue.isHint()) - .isCaseInsensitive(typeValue.isCaseInsensitive()) - .isRecommendation(typeValue.isRecommendation()) - .description(typeValue.getDescription()) - .addToDictionaryAction(typeValue.isAddToDictionaryAction()) - .label(typeValue.getLabel()) - .hasDictionary(typeValue.isHasDictionary()) - .autoHideSkipped(typeValue.isAutoHideSkipped()) - .build()); + Type.builder() + .dossierTemplateId(dossierTemplateId) + .hexColor(typeValue.getHexColor()) + .recommendationHexColor(typeValue.getRecommendationHexColor()) + .skippedHexColor(typeValue.getSkippedHexColor()) + .rank(typeValue.getRank()) + .isHint(typeValue.isHint()) + .isCaseInsensitive(typeValue.isCaseInsensitive()) + .isRecommendation(typeValue.isRecommendation()) + .description(typeValue.getDescription()) + .addToDictionaryAction(typeValue.isAddToDictionaryAction()) + .label(typeValue.getLabel()) + .hasDictionary(typeValue.isHasDictionary()) + .autoHideSkipped(typeValue.isAutoHideSkipped()) + .build()); } @@ -172,24 +172,24 @@ public class DictionaryService { private Type addType(CreateTypeValue typeValue, String dossierId) { return dictionaryManagementService.addType(Type.builder() - .dossierTemplateId(typeValue.getDossierTemplateId()) - .dossierId(dossierId) - .type(typeValue.getType()) - .hexColor(typeValue.getHexColor()) - .recommendationHexColor(typeValue.getRecommendationHexColor()) - .skippedHexColor(typeValue.getSkippedHexColor()) - .rank(typeValue.getRank()) - .isHint(typeValue.isHint()) - .isCaseInsensitive(typeValue.isCaseInsensitive()) - .isRecommendation(typeValue.isRecommendation()) - .description(typeValue.getDescription()) - .addToDictionaryAction(typeValue.isAddToDictionaryAction()) - .label(typeValue.getLabel()) - .hasDictionary(typeValue.isHasDictionary()) - .systemManaged(false) - .autoHideSkipped(typeValue.isAutoHideSkipped()) - .dossierDictionaryOnly(typeValue.isDossierDictionaryOnly()) - .build()); + .dossierTemplateId(typeValue.getDossierTemplateId()) + .dossierId(dossierId) + .type(typeValue.getType()) + .hexColor(typeValue.getHexColor()) + .recommendationHexColor(typeValue.getRecommendationHexColor()) + .skippedHexColor(typeValue.getSkippedHexColor()) + .rank(typeValue.getRank()) + .isHint(typeValue.isHint()) + .isCaseInsensitive(typeValue.isCaseInsensitive()) + .isRecommendation(typeValue.isRecommendation()) + .description(typeValue.getDescription()) + .addToDictionaryAction(typeValue.isAddToDictionaryAction()) + .label(typeValue.getLabel()) + .hasDictionary(typeValue.isHasDictionary()) + .systemManaged(false) + .autoHideSkipped(typeValue.isAutoHideSkipped()) + .dossierDictionaryOnly(typeValue.isDossierDictionaryOnly()) + .build()); } @@ -272,29 +272,29 @@ public class DictionaryService { var dictionaryForType = MagicConverter.convert(entity, Type.class); dictionaryForType.setEntries(MagicConverter.convert(entryPersistenceService.getEntries(typeId, DictionaryEntryType.ENTRY, null), DictionaryEntry.class)); dictionaryForType.setFalsePositiveEntries(MagicConverter.convert(entryPersistenceService.getEntries(typeId, DictionaryEntryType.FALSE_POSITIVE, null), - DictionaryEntry.class)); + DictionaryEntry.class)); dictionaryForType.setFalseRecommendationEntries(MagicConverter.convert(entryPersistenceService.getEntries(typeId, DictionaryEntryType.FALSE_RECOMMENDATION, null), - DictionaryEntry.class)); + DictionaryEntry.class)); return Dictionary.builder() .entries(dictionaryForType.getEntries() - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntry::getValue) - .sorted(entryComparator) - .collect(Collectors.toList())) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntry::getValue) + .sorted(entryComparator) + .collect(Collectors.toList())) .falsePositiveEntries(dictionaryForType.getFalsePositiveEntries() - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntry::getValue) - .sorted(entryComparator) - .collect(Collectors.toList())) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntry::getValue) + .sorted(entryComparator) + .collect(Collectors.toList())) .falseRecommendationEntries(dictionaryForType.getFalseRecommendationEntries() - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntry::getValue) - .sorted(entryComparator) - .collect(Collectors.toList())) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntry::getValue) + .sorted(entryComparator) + .collect(Collectors.toList())) .hexColor(dictionaryForType.getHexColor()) .recommendationHexColor(dictionaryForType.getRecommendationHexColor()) .skippedHexColor(dictionaryForType.getSkippedHexColor()) @@ -339,23 +339,23 @@ public class DictionaryService { var entity = dictionaryPersistenceService.getType(typeId); Dictionary dict = Dictionary.builder() .entries(cdm.getEntries() - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntry::getValue) - .sorted(entryComparator) - .collect(Collectors.toList())) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntry::getValue) + .sorted(entryComparator) + .collect(Collectors.toList())) .falsePositiveEntries(cdm.getFalsePositives() - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntry::getValue) - .sorted(entryComparator) - .collect(Collectors.toList())) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntry::getValue) + .sorted(entryComparator) + .collect(Collectors.toList())) .falseRecommendationEntries(cdm.getFalseRecommendations() - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntry::getValue) - .sorted(entryComparator) - .collect(Collectors.toList())) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntry::getValue) + .sorted(entryComparator) + .collect(Collectors.toList())) .hexColor(entity.getHexColor()) .recommendationHexColor(entity.getRecommendationHexColor()) .skippedHexColor(entity.getSkippedHexColor()) @@ -382,22 +382,24 @@ public class DictionaryService { private List convertType(TypeEntity typeEntity) { return List.of(CommonsDictionaryModel.builder() - .type(typeEntity.getType()) - .rank(typeEntity.getRank()) - .color(ColorUtils.convertColor(typeEntity.getHexColor())) - .caseInsensitive(typeEntity.isCaseInsensitive()) - .hint(typeEntity.isHint()) - .entries(getCommonsEntries(typeEntity.getId(), DictionaryEntryType.ENTRY)) - .falsePositives(getCommonsEntries(typeEntity.getId(), DictionaryEntryType.FALSE_POSITIVE)) - .falseRecommendations(getCommonsEntries(typeEntity.getId(), DictionaryEntryType.FALSE_RECOMMENDATION)) - .build()); + .type(typeEntity.getType()) + .rank(typeEntity.getRank()) + .color(ColorUtils.convertColor(typeEntity.getHexColor())) + .caseInsensitive(typeEntity.isCaseInsensitive()) + .hint(typeEntity.isHint()) + .entries(getCommonsEntries(typeEntity.getId(), DictionaryEntryType.ENTRY)) + .falsePositives(getCommonsEntries(typeEntity.getId(), DictionaryEntryType.FALSE_POSITIVE)) + .falseRecommendations(getCommonsEntries(typeEntity.getId(), DictionaryEntryType.FALSE_RECOMMENDATION)) + .build()); } private Set getCommonsEntries(String typeId, DictionaryEntryType entryType) { var entries = MagicConverter.convert(entryPersistenceService.getEntries(typeId, entryType, null), DictionaryEntry.class); - return CollectionUtils.isNotEmpty(entries) ? new HashSet<>(entries.stream().map(DictionaryEntryModel::new).collect(Collectors.toSet())) : new HashSet<>(); + return CollectionUtils.isNotEmpty(entries) ? new HashSet<>(entries.stream() + .map(DictionaryEntryModel::new) + .collect(Collectors.toSet())) : new HashSet<>(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java index 4e448accf..a85b74131 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureKmsService.java @@ -76,13 +76,15 @@ public class DigitalSignatureKmsService { public DigitalSignatureKmsEntity getDigitalSignature() { - return digitalSignatureKmsRepository.findById(DigitalSignatureKmsEntity.ID).map(digitalSignature -> { + return digitalSignatureKmsRepository.findById(DigitalSignatureKmsEntity.ID) + .map(digitalSignature -> { - DigitalSignatureKmsEntity result = new DigitalSignatureKmsEntity(); - BeanUtils.copyProperties(digitalSignature, result); - decrypt(result); - return result; - }).orElseThrow(() -> new NotFoundException("Digital KMS Signature Not found")); + DigitalSignatureKmsEntity result = new DigitalSignatureKmsEntity(); + BeanUtils.copyProperties(digitalSignature, result); + decrypt(result); + return result; + }) + .orElseThrow(() -> new NotFoundException("Digital KMS Signature Not found")); } @@ -92,6 +94,7 @@ public class DigitalSignatureKmsService { digitalSignatureTypeService.deleteDigitalSignatureType(); } + public DigitalSignatureKms convert(DigitalSignatureKmsEntity digitalSignatureKmsEntity) { return DigitalSignatureKms.builder() @@ -105,6 +108,7 @@ public class DigitalSignatureKmsService { .build(); } + private DigitalSignatureKmsEntity convert(DigitalSignatureKms digitalSignatureKms) { return DigitalSignatureKmsEntity.builder() @@ -118,6 +122,4 @@ public class DigitalSignatureKmsService { .build(); } - - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java index 7fd16439e..ac2c66722 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java @@ -38,13 +38,15 @@ public class DigitalSignatureService { public DigitalSignatureEntity getDigitalSignature() { - return digitalSignatureRepository.findById(DigitalSignatureEntity.ID).map(digitalSignature -> { - DigitalSignatureEntity result = new DigitalSignatureEntity(); - BeanUtils.copyProperties(digitalSignature, result); - result.setPrivateKey(encryptionDecryptionService.decrypt(digitalSignature.getPrivateKey())); - result.setPassword(encryptionDecryptionService.decrypt(digitalSignature.getPassword())); - return result; - }).orElseThrow(() -> new NotFoundException("Digital Signature Not found")); + return digitalSignatureRepository.findById(DigitalSignatureEntity.ID) + .map(digitalSignature -> { + DigitalSignatureEntity result = new DigitalSignatureEntity(); + BeanUtils.copyProperties(digitalSignature, result); + result.setPrivateKey(encryptionDecryptionService.decrypt(digitalSignature.getPrivateKey())); + result.setPassword(encryptionDecryptionService.decrypt(digitalSignature.getPassword())); + return result; + }) + .orElseThrow(() -> new NotFoundException("Digital Signature Not found")); } @@ -69,10 +71,10 @@ public class DigitalSignatureService { public void updateDigitalSignature(DigitalSignatureEntity digitalSignatureModel) { int updateCount = digitalSignatureRepository.updateDigitalSignature(DigitalSignatureEntity.ID, - digitalSignatureModel.getReason(), - digitalSignatureModel.getLocation(), - digitalSignatureModel.getContactInfo(), - digitalSignatureModel.getCertificateName()); + digitalSignatureModel.getReason(), + digitalSignatureModel.getLocation(), + digitalSignatureModel.getContactInfo(), + digitalSignatureModel.getCertificateName()); if (updateCount == 0) { throw new NotFoundException("Digital Signature Not found"); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java index a94fc7b4e..eb7ce6d48 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java @@ -36,7 +36,8 @@ public class DossierAttributesManagementService { var dossier = dossierService.getDossierById(dossierId); var config = dossierAttributeConfigPersistenceService.getDossierAttributes(dossier.getDossierTemplateId()); - var typeById = config.stream().collect(Collectors.toMap(DossierAttributeConfigEntity::getId, DossierAttributeConfigEntity::getType)); + var typeById = config.stream() + .collect(Collectors.toMap(DossierAttributeConfigEntity::getId, DossierAttributeConfigEntity::getType)); for (DossierAttribute dossierAttribute : dossierAttributes) { validateDossierAttribute(typeById, dossierAttribute); } @@ -106,7 +107,8 @@ public class DossierAttributesManagementService { var dossierAttributes = dossierAttributePersistenceService.getDossierAttributes(dossierId); var config = dossierAttributeConfigPersistenceService.getDossierAttributes(dossier.getDossierTemplateId()); - var typeById = config.stream().collect(Collectors.toMap(DossierAttributeConfigEntity::getId, DossierAttributeConfigEntity::getType)); + var typeById = config.stream() + .collect(Collectors.toMap(DossierAttributeConfigEntity::getId, DossierAttributeConfigEntity::getType)); validateDossierAttribute(typeById, dossierAttribute); if (dossierAttributes.stream() diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierCreatorService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierCreatorService.java index 3cc5a39f3..4fa5419bb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierCreatorService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierCreatorService.java @@ -5,14 +5,15 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.DossierMa import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; + import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import java.util.Set; - @Slf4j @Service @RequiredArgsConstructor diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java index 2c1e8f280..e4c761c58 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java @@ -11,9 +11,11 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.search.v1.model.IndexMessageType; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; + import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import java.time.OffsetDateTime; @@ -59,10 +61,12 @@ public class DossierManagementService { } List fileStatuses = fileStatusService.getDossierStatus(dossierId); - fileStatuses.stream().filter(fileStatus -> fileStatus.getDeleted() == null).forEach(fileStatus -> { - fileService.softDeleteFile(dossierId, fileStatus.getId(), now); - fileStatusService.setFileStatusDeleted(fileStatus.getId(), now); - }); + fileStatuses.stream() + .filter(fileStatus -> fileStatus.getDeleted() == null) + .forEach(fileStatus -> { + fileService.softDeleteFile(dossierId, fileStatus.getId(), now); + fileStatusService.setFileStatusDeleted(fileStatus.getId(), now); + }); dossierService.softDeleteDossier(dossierId, now); @@ -78,7 +82,9 @@ public class DossierManagementService { private List getConvertedAllDossiers(List dossierEntityList, boolean includeArchived, boolean includeDeleted) { - List dossierEntitiesList = dossierEntityList.stream().filter(dossierEntity -> dossierEntity.getHardDeletedTime() == null).collect(Collectors.toList()); + List dossierEntitiesList = dossierEntityList.stream() + .filter(dossierEntity -> dossierEntity.getHardDeletedTime() == null) + .collect(Collectors.toList()); // return all dossiers if (includeDeleted && includeArchived) { @@ -87,22 +93,22 @@ public class DossierManagementService { // return both active and archived&non-deleted dossiers if (includeArchived) { - return MagicConverter.convert(dossierEntitiesList.stream().filter(p -> p.getSoftDeletedTime() == null).collect(Collectors.toList()), - Dossier.class, - new DossierMapper()); + return MagicConverter.convert(dossierEntitiesList.stream() + .filter(p -> p.getSoftDeletedTime() == null) + .collect(Collectors.toList()), Dossier.class, new DossierMapper()); } // return both active and deleted dossiers if (includeDeleted) { - return MagicConverter.convert(dossierEntitiesList.stream().filter(p -> p.getArchivedTime() == null || p.getSoftDeletedTime() != null).collect(Collectors.toList()), - Dossier.class, - new DossierMapper()); + return MagicConverter.convert(dossierEntitiesList.stream() + .filter(p -> p.getArchivedTime() == null || p.getSoftDeletedTime() != null) + .collect(Collectors.toList()), Dossier.class, new DossierMapper()); } // return only active dossiers - return MagicConverter.convert(dossierEntitiesList.stream().filter(p -> p.getSoftDeletedTime() == null && p.getArchivedTime() == null).collect(Collectors.toList()), - Dossier.class, - new DossierMapper()); + return MagicConverter.convert(dossierEntitiesList.stream() + .filter(p -> p.getSoftDeletedTime() == null && p.getArchivedTime() == null) + .collect(Collectors.toList()), Dossier.class, new DossierMapper()); } @@ -163,8 +169,8 @@ public class DossierManagementService { private List getArchivedDossiersList(List dossierEntityList) { var archivedDossiers = MagicConverter.convert(dossierEntityList.stream() - .filter(p -> p.getArchivedTime() != null && p.getHardDeletedTime() == null && p.getSoftDeletedTime() == null) - .collect(Collectors.toList()), Dossier.class, new DossierMapper()); + .filter(p -> p.getArchivedTime() != null && p.getHardDeletedTime() == null && p.getSoftDeletedTime() == null) + .collect(Collectors.toList()), Dossier.class, new DossierMapper()); archivedDossiers.sort((dossier1, dossier2) -> dossier2.getArchivedTime().compareTo(dossier1.getArchivedTime())); return archivedDossiers; @@ -182,9 +188,9 @@ public class DossierManagementService { public List getSoftDeletedDossiers() { var softDeletedDossiers = MagicConverter.convert(dossierService.getAllDossiers() - .stream() - .filter(p -> p.getSoftDeletedTime() != null && p.getHardDeletedTime() == null) - .collect(Collectors.toList()), Dossier.class, new DossierMapper()); + .stream() + .filter(p -> p.getSoftDeletedTime() != null && p.getHardDeletedTime() == null) + .collect(Collectors.toList()), Dossier.class, new DossierMapper()); softDeletedDossiers.sort((dossier1, dossier2) -> dossier2.getSoftDeletedTime().compareTo(dossier1.getSoftDeletedTime())); return softDeletedDossiers; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java index 14eb4ab47..0b69d3073 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java @@ -11,10 +11,12 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUti import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplateStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierChange; + import jakarta.transaction.Transactional; import jakarta.validation.ConstraintViolationException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import java.time.OffsetDateTime; @@ -78,8 +80,7 @@ public class DossierService { if (dossier.getDossierName().equals(dossierRequest.getDossierName()) || dossierPersistenceService.findAllDossiers() .stream() .filter(p -> p.getHardDeletedTime() == null && p.getDossierName().equals(dossierRequest.getDossierName())) - .findAny() - .isEmpty()) { + .findAny().isEmpty()) { if (!dossier.getDossierTemplateId().equalsIgnoreCase(dossierRequest.getDossierTemplateId())) { if (fileStatusPersistenceService.getStatusesForDossier(dossierId).isEmpty()) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java index 4d9f76c11..fb714df7f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java @@ -65,12 +65,27 @@ public class DossierStatsService { List files = fileStatusService.getActiveFiles(dossierId); dossierStats.setNumberOfFiles(files.size()); dossierStats.setNumberOfSoftDeletedFiles(fileStatusService.countSoftDeletedFiles(dossierId)); - dossierStats.setNumberOfPages(files.stream().mapToInt(FileModel::getNumberOfPages).sum()); - dossierStats.setNumberOfExcludedPages(files.stream().mapToInt(f -> f.getExcludedPages().size()).sum()); - files.stream().filter(FileModel::isHasRedactions).findAny().ifPresent(v -> dossierStats.setHasRedactionsFilePresent(true)); - files.stream().filter(FileModel::isHasHints).filter(f -> !f.isHasRedactions()).findAny().ifPresent(v -> dossierStats.setHasHintsNoRedactionsFilePresent(true)); - files.stream().filter(FileModel::isHasSuggestions).findAny().ifPresent(v -> dossierStats.setHasSuggestionsFilePresent(true)); - files.stream().filter(FileModel::isHasUpdates).findAny().ifPresent(v -> dossierStats.setHasUpdatesFilePresent(true)); + dossierStats.setNumberOfPages(files.stream() + .mapToInt(FileModel::getNumberOfPages).sum()); + dossierStats.setNumberOfExcludedPages(files.stream() + .mapToInt(f -> f.getExcludedPages().size()).sum()); + files.stream() + .filter(FileModel::isHasRedactions) + .findAny() + .ifPresent(v -> dossierStats.setHasRedactionsFilePresent(true)); + files.stream() + .filter(FileModel::isHasHints) + .filter(f -> !f.isHasRedactions()) + .findAny() + .ifPresent(v -> dossierStats.setHasHintsNoRedactionsFilePresent(true)); + files.stream() + .filter(FileModel::isHasSuggestions) + .findAny() + .ifPresent(v -> dossierStats.setHasSuggestionsFilePresent(true)); + files.stream() + .filter(FileModel::isHasUpdates) + .findAny() + .ifPresent(v -> dossierStats.setHasUpdatesFilePresent(true)); files.stream() .filter(f -> !f.isHasRedactions()) .filter(f -> !f.isHasHints()) @@ -78,10 +93,12 @@ public class DossierStatsService { .filter(f -> !f.isHasUpdates()) .findAny() .ifPresent(v -> dossierStats.setHasNoFlagsFilePresent(true)); - var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileModel::getProcessingStatus, e -> 1, Math::addExact)); + var fileCountPerProcessingStatus = files.stream() + .collect(Collectors.toMap(FileModel::getProcessingStatus, e -> 1, Math::addExact)); dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus); - var fileCountPerWorkflowStatus = files.stream().collect(Collectors.toMap(FileModel::getWorkflowStatus, e -> 1, Math::addExact)); + var fileCountPerWorkflowStatus = files.stream() + .collect(Collectors.toMap(FileModel::getWorkflowStatus, e -> 1, Math::addExact)); dossierStats.setFileCountPerWorkflowStatus(fileCountPerWorkflowStatus); files.stream() diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java index d0acab1b9..5c94392d2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java @@ -97,7 +97,7 @@ public class DossierTemplateCloneService { cloneLegalBasisMapping(dossierTemplate.getId(), clonedDossierTemplate.getId()); clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(clonedDossierTemplate) - .name())); + .name())); clonedDossierTemplate.setOcrByDefault(cloneDossierTemplateRequest.isOcrByDefault()); clonedDossierTemplate.setRemoveWatermark(cloneDossierTemplateRequest.isRemoveWatermark()); @@ -149,7 +149,8 @@ public class DossierTemplateCloneService { private void cloneLegalBasisMapping(String dossierTemplateId, String clonedDossierTemplateId) { legalBasisMappingPersistenceService.setLegalBasisMapping(clonedDossierTemplateId, - MagicConverter.convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId), LegalBasis.class)); + MagicConverter.convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId), + LegalBasis.class)); } @@ -158,22 +159,22 @@ public class DossierTemplateCloneService { var types = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId, false); for (TypeEntity t : types) { var type = dictionaryPersistenceService.addType(t.getType(), - clonedDossierTemplateId, - t.getHexColor(), - t.getRecommendationHexColor(), - t.getSkippedHexColor(), - t.getRank(), - t.isHint(), - t.isCaseInsensitive(), - t.isRecommendation(), - t.getDescription(), - t.isAddToDictionaryAction(), - t.getLabel(), - null, - t.isHasDictionary(), - t.isSystemManaged(), - t.isAutoHideSkipped(), - t.isDossierDictionaryOnly()); + clonedDossierTemplateId, + t.getHexColor(), + t.getRecommendationHexColor(), + t.getSkippedHexColor(), + t.getRank(), + t.isHint(), + t.isCaseInsensitive(), + t.isRecommendation(), + t.getDescription(), + t.isAddToDictionaryAction(), + t.getLabel(), + null, + t.isHasDictionary(), + t.isSystemManaged(), + t.isAutoHideSkipped(), + t.isDossierDictionaryOnly()); entryPersistenceService.cloneEntries(t.getId(), type.getId()); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index 10ba702d7..8e038da37 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -170,7 +170,14 @@ public class DossierTemplateImportService { double compressionRatio = (float) totalSizeEntry / ze.getCompressedSize(); if (compressionRatio > settings.getCompressionThresholdRatio()) { - log.debug("zip entry: " + ze.getName() + " - totalSizeEntry: " + totalSizeEntry + " ze.getCompressedSize(): " + ze.getCompressedSize() + " compressionRatio: " + compressionRatio); + log.debug("zip entry: " + + ze.getName() + + " - totalSizeEntry: " + + totalSizeEntry + + " ze.getCompressedSize(): " + + ze.getCompressedSize() + + " compressionRatio: " + + compressionRatio); // ratio between compressed and uncompressed data is highly suspicious, looks like a Zip Bomb Attack throw new BadRequestException("ZIP-Bomb detected (compressionRatio)."); } @@ -236,7 +243,9 @@ public class DossierTemplateImportService { String rules = new String(bytes); importTemplateResult.setComponentRuleSet(rules); } else { - throw new BadRequestException("Component rule file is not in TXT or DRL format. " + FileNameUtils.getExtension(ze.getName()) + " format is not supported."); + throw new BadRequestException("Component rule file is not in TXT or DRL format. " + + FileNameUtils.getExtension(ze.getName()) + + " format is not supported."); } } else if (ze.getName().contains(ExportFilename.DOSSIER_TYPE.getFilename())) { Type type = objectMapper.readValue(bytes, Type.class); @@ -260,8 +269,9 @@ public class DossierTemplateImportService { var reportTemplateList = objectMapper.readValue(bytes, new TypeReference>() { }); reportTemplateMap = reportTemplateList.stream() - .collect(Collectors.toMap(rt -> rt.isMultiFileReport() ? rt.getFileName() + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : rt.getFileName(), - Function.identity())); + .collect(Collectors.toMap(rt -> rt.isMultiFileReport() ? rt.getFileName() + + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : rt.getFileName(), + Function.identity())); reportTemplateFilenameList = reportTemplateList.stream() .map(rt -> rt.isMultiFileReport() ? rt.getFileName() + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : rt.getFileName()) .collect(Collectors.toList()); @@ -280,12 +290,12 @@ public class DossierTemplateImportService { var report = reportTemplateMap.get(reportZe.getKey()); importTemplateResult.getReportTemplateUploadRequests() .add(ReportTemplateUploadRequest.builder() - .fileName(report.getFileName()) - .activeByDefault(report.isActiveByDefault()) - .multiFileReport(report.isMultiFileReport()) - .dossierTemplateId(request.getDossierTemplateId() != null ? request.getDossierTemplateId() : "") - .template(reportZe.getValue().toByteArray()) - .build()); + .fileName(report.getFileName()) + .activeByDefault(report.isActiveByDefault()) + .multiFileReport(report.isMultiFileReport()) + .dossierTemplateId(request.getDossierTemplateId() != null ? request.getDossierTemplateId() : "") + .template(reportZe.getValue().toByteArray()) + .build()); } } @@ -326,34 +336,41 @@ public class DossierTemplateImportService { updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId()); dossierTemplateRepository.save(existingDossierTemplate); - // set rules setRulesWhenCompiled(request, dossierTemplateId); existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate) - .name())); + .name())); // set colors this.setColors(dossierTemplateId, request.getColors()); // set watermarks if (CollectionUtils.isNotEmpty(request.getWatermarks())) { - Set toSetWatermarks = request.getWatermarks().stream().map(WatermarkModel::getName).filter(Objects::nonNull).collect(Collectors.toSet()); + Set toSetWatermarks = request.getWatermarks() + .stream() + .map(WatermarkModel::getName) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); var currentWatermarkConfigs = watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId); - Set configsToRemove = currentWatermarkConfigs.stream().filter(c -> !toSetWatermarks.contains(c.getName())).collect(Collectors.toSet()); - var watermarkNameToEntity = currentWatermarkConfigs.stream().collect(Collectors.toMap(WatermarkEntity::getName, Function.identity())); + Set configsToRemove = currentWatermarkConfigs.stream() + .filter(c -> !toSetWatermarks.contains(c.getName())) + .collect(Collectors.toSet()); + var watermarkNameToEntity = currentWatermarkConfigs.stream() + .collect(Collectors.toMap(WatermarkEntity::getName, Function.identity())); - request.getWatermarks().forEach(watermark -> { - log.info("watermark to add: " + watermark.getName()); - if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) { + request.getWatermarks() + .forEach(watermark -> { + log.info("watermark to add: " + watermark.getName()); + if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) { - watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId()); - } else { - watermark.setId(null); - } - watermark.setDossierTemplateId(dossierTemplateId); - watermarkService.createOrUpdateWatermark(watermark); - }); + watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId()); + } else { + watermark.setId(null); + } + watermark.setDossierTemplateId(dossierTemplateId); + watermarkService.createOrUpdateWatermark(watermark); + }); configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId())); } @@ -394,11 +411,12 @@ public class DossierTemplateImportService { List reportsUpdated = new ArrayList<>(); if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) { - request.getReportTemplateUploadRequests().forEach(reportRequest -> { - reportRequest.setDossierTemplateId(dossierTemplateId); - var report = reportTemplateService.uploadTemplate(reportRequest); - reportsUpdated.add(report.getTemplateId()); - }); + request.getReportTemplateUploadRequests() + .forEach(reportRequest -> { + reportRequest.setDossierTemplateId(dossierTemplateId); + var report = reportTemplateService.uploadTemplate(reportRequest); + reportsUpdated.add(report.getTemplateId()); + }); } // delete the reports that were not in the import @@ -442,35 +460,39 @@ public class DossierTemplateImportService { // set watermarks if (CollectionUtils.isNotEmpty(request.getWatermarks())) { - request.getWatermarks().forEach(watermark -> { - watermark.setDossierTemplateId(dossierTemplateId); - watermark.setId(null); - watermarkService.createOrUpdateWatermark(watermark); - }); + request.getWatermarks() + .forEach(watermark -> { + watermark.setDossierTemplateId(dossierTemplateId); + watermark.setId(null); + watermarkService.createOrUpdateWatermark(watermark); + }); } // dossier status if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { - request.getDossierStatusInfos().forEach(state -> { - state.setId(null); - this.updateDossierStatus(dossierTemplateId, state); - }); + request.getDossierStatusInfos() + .forEach(state -> { + state.setId(null); + this.updateDossierStatus(dossierTemplateId, state); + }); } //set dossier attributes if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) { - request.getDossierAttributesConfigs().forEach(da -> { - da.setId(null); // in order to create a new dossier attribute - dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, convert(da, DossierAttributeConfigEntity.class)); - }); + request.getDossierAttributesConfigs() + .forEach(da -> { + da.setId(null); // in order to create a new dossier attribute + dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, convert(da, DossierAttributeConfigEntity.class)); + }); } //set file attributes if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { - request.getFileAttributesConfigs().forEach(fa -> { - fa.setId(null); // in order to force creation of new file attribute - fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class)); - }); + request.getFileAttributesConfigs() + .forEach(fa -> { + fa.setId(null); // in order to force creation of new file attribute + fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class)); + }); } //set types @@ -487,10 +509,11 @@ public class DossierTemplateImportService { //set report templates if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) { - request.getReportTemplateUploadRequests().forEach(reportRequest -> { - reportRequest.setDossierTemplateId(dossierTemplateId); - reportTemplateService.uploadTemplate(reportRequest); - }); + request.getReportTemplateUploadRequests() + .forEach(reportRequest -> { + reportRequest.setDossierTemplateId(dossierTemplateId); + reportTemplateService.uploadTemplate(reportRequest); + }); } // set legal basis if (CollectionUtils.isNotEmpty(request.getLegalBases())) { @@ -501,7 +524,8 @@ public class DossierTemplateImportService { // file attribute general configuration if (request.getFileAttributesGeneralConfiguration() != null) { fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId, - convert(request.getFileAttributesGeneralConfiguration(), FileAttributesGeneralConfigurationEntity.class)); + convert(request.getFileAttributesGeneralConfiguration(), + FileAttributesGeneralConfigurationEntity.class)); } long elapsedTime = System.currentTimeMillis() - start; @@ -514,14 +538,16 @@ public class DossierTemplateImportService { DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(RuleFileType.ENTITY, request.getRuleSet()); if (!droolsSyntaxValidation.isCompiled()) { - droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(errorMessage -> log.error(errorMessage.getMessage())); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages() + .forEach(errorMessage -> log.error(errorMessage.getMessage())); throw new BadRequestException("The entity rules do not compile!"); } rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId, RuleFileType.ENTITY); if (request.getComponentRuleSet() != null) { DroolsSyntaxValidation componentDroolsSyntaxValidation = rulesValidationService.validateRules(RuleFileType.COMPONENT, request.getComponentRuleSet()); if (!componentDroolsSyntaxValidation.isCompiled()) { - componentDroolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(errorMessage -> log.error(errorMessage.getMessage())); + componentDroolsSyntaxValidation.getDroolsSyntaxErrorMessages() + .forEach(errorMessage -> log.error(errorMessage.getMessage())); throw new BadRequestException("The component rules do not compile!"); } rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT); @@ -533,7 +559,8 @@ public class DossierTemplateImportService { ByteArrayInputStream bInput = new ByteArrayInputStream(bytes); try (BufferedReader br = new BufferedReader(new InputStreamReader(bInput, StandardCharsets.UTF_8))) { - return br.lines().collect(Collectors.toList()); + return br.lines() + .collect(Collectors.toList()); } catch (IOException e) { log.debug("exception: ", e); throw new BadRequestException("Error while reading the entries", e); @@ -555,7 +582,7 @@ public class DossierTemplateImportService { this.validateDossierTemplateName(dossierTemplate); } - BeanUtils.copyProperties(dossierTemplate, dossierTemplateEntity, "id","modifiedBy", "dateModified", "validFrom", "validTo", "downloadFileTypes"); + BeanUtils.copyProperties(dossierTemplate, dossierTemplateEntity, "id", "modifiedBy", "dateModified", "validFrom", "validTo", "downloadFileTypes"); OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); dossierTemplateEntity.setDateModified(now); dossierTemplateEntity.setModifiedBy(userId); @@ -582,9 +609,12 @@ public class DossierTemplateImportService { List currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); - Set currentStatesId = currentStates.stream().map(DossierStatusInfo::getId).collect(Collectors.toSet()); + Set currentStatesId = currentStates.stream() + .map(DossierStatusInfo::getId) + .collect(Collectors.toSet()); Set stateIdsAdded = new HashSet<>(); - var stateToEntityMap = currentStates.stream().collect(Collectors.toMap(DossierStatusInfo::getName, Function.identity())); + var stateToEntityMap = currentStates.stream() + .collect(Collectors.toMap(DossierStatusInfo::getName, Function.identity())); for (var state : request.getDossierStatusInfos()) { state.setDossierTemplateId(dossierTemplateId); String stateId; @@ -600,7 +630,9 @@ public class DossierTemplateImportService { } // remove additional states - Set statesToRemove = currentStatesId.stream().filter(t -> !stateIdsAdded.contains(t)).collect(Collectors.toSet()); + Set statesToRemove = currentStatesId.stream() + .filter(t -> !stateIdsAdded.contains(t)) + .collect(Collectors.toSet()); statesToRemove.forEach(stateId -> dossierStatusPersistenceService.deleteDossierStatus(stateId, null)); } @@ -608,17 +640,22 @@ public class DossierTemplateImportService { private void updateDossierAttributes(ImportTemplateResult request, String dossierTemplateId) { List currentFileAttributes = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId); - Set currentDossierAttributeIds = currentFileAttributes.stream().map(DossierAttributeConfigEntity::getId).collect(Collectors.toSet()); + Set currentDossierAttributeIds = currentFileAttributes.stream() + .map(DossierAttributeConfigEntity::getId) + .collect(Collectors.toSet()); Set dossierAttributeIdsAdded = new HashSet<>(); - request.getDossierAttributesConfigs().forEach(da -> { - da.setId(dossierAttributeConfigPersistenceService.getDossierAttributeByIdOrName(dossierTemplateId, da.getId(), da.getLabel())); - DossierAttributeConfigEntity result = dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, - convert(da, DossierAttributeConfigEntity.class)); - dossierAttributeIdsAdded.add(result.getId()); - }); + request.getDossierAttributesConfigs() + .forEach(da -> { + da.setId(dossierAttributeConfigPersistenceService.getDossierAttributeByIdOrName(dossierTemplateId, da.getId(), da.getLabel())); + DossierAttributeConfigEntity result = dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, + convert(da, DossierAttributeConfigEntity.class)); + dossierAttributeIdsAdded.add(result.getId()); + }); // remove existing dossier attributes and not included in archive - Set attributesToRemove = currentDossierAttributeIds.stream().filter(da -> !dossierAttributeIdsAdded.contains(da)).collect(Collectors.toSet()); + Set attributesToRemove = currentDossierAttributeIds.stream() + .filter(da -> !dossierAttributeIdsAdded.contains(da)) + .collect(Collectors.toSet()); attributesToRemove.forEach(dossierAttributeConfigPersistenceService::deleteDossierAttribute); } @@ -626,20 +663,25 @@ public class DossierTemplateImportService { private void updateFileAttributes(ImportTemplateResult request, String dossierTemplateId) { List currentFileAttributes = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId); - Set currentFileAttributeIds = currentFileAttributes.stream().map(FileAttributeConfigEntity::getId).collect(Collectors.toSet()); + Set currentFileAttributeIds = currentFileAttributes.stream() + .map(FileAttributeConfigEntity::getId) + .collect(Collectors.toSet()); Set fileAttributeIdsAdded = new HashSet<>(); - request.getFileAttributesConfigs().forEach(fa -> { - //check by id or by dossierTemplate and label and set the corresponding Id if found - fa.setId(fileAttributeConfigPersistenceService.getFileAttributeByIdOrName(dossierTemplateId, fa.getId(), fa.getLabel())); - FileAttributeConfigEntity fileAttributeAdded = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, - convert(fa, FileAttributeConfigEntity.class)); - fileAttributeIdsAdded.add(fileAttributeAdded.getId()); - if (fa.isPrimaryAttribute()) { - fileAttributeConfigPersistenceService.updatePrimaryAttribute(fileAttributeAdded.getId()); - } - }); + request.getFileAttributesConfigs() + .forEach(fa -> { + //check by id or by dossierTemplate and label and set the corresponding Id if found + fa.setId(fileAttributeConfigPersistenceService.getFileAttributeByIdOrName(dossierTemplateId, fa.getId(), fa.getLabel())); + FileAttributeConfigEntity fileAttributeAdded = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, + convert(fa, FileAttributeConfigEntity.class)); + fileAttributeIdsAdded.add(fileAttributeAdded.getId()); + if (fa.isPrimaryAttribute()) { + fileAttributeConfigPersistenceService.updatePrimaryAttribute(fileAttributeAdded.getId()); + } + }); // remove existing file attributes and not included in archive - Set attributesToRemove = currentFileAttributeIds.stream().filter(fa -> !fileAttributeIdsAdded.contains(fa)).collect(Collectors.toSet()); + Set attributesToRemove = currentFileAttributeIds.stream() + .filter(fa -> !fileAttributeIdsAdded.contains(fa)) + .collect(Collectors.toSet()); attributesToRemove.forEach(fileAttributeConfigPersistenceService::deleteFileAttribute); } @@ -651,9 +693,12 @@ public class DossierTemplateImportService { .filter(t -> t.getDossierId() == null) .collect(Collectors.toList()); - Set currentTypesId = currentTypes.stream().map(TypeEntity::getId).collect(Collectors.toSet()); + Set currentTypesId = currentTypes.stream() + .map(TypeEntity::getId) + .collect(Collectors.toSet()); Set typeIdsAdded = new HashSet<>(); - var typeToEntityMap = currentTypes.stream().collect(Collectors.toMap(TypeEntity::getType, Function.identity())); + var typeToEntityMap = currentTypes.stream() + .collect(Collectors.toMap(TypeEntity::getType, Function.identity())); for (var type : request.getTypes()) { // log.info("Adding type: " + type.getType() + " id: " + type.getId()); type.setDossierTemplateId(dossierTemplateId); @@ -685,10 +730,15 @@ public class DossierTemplateImportService { private void deleteTypes(List currentTypes, Set typeIdsAdded) { - Set currentTypesIdSystemManaged = currentTypes.stream().filter(TypeEntity::isSystemManaged).map(TypeEntity::getId).collect(Collectors.toSet()); + Set currentTypesIdSystemManaged = currentTypes.stream() + .filter(TypeEntity::isSystemManaged) + .map(TypeEntity::getId) + .collect(Collectors.toSet()); // for types system managed just delete the entries - Set entriesToRemove = currentTypesIdSystemManaged.stream().filter(t -> !typeIdsAdded.contains(t)).collect(Collectors.toSet()); + Set entriesToRemove = currentTypesIdSystemManaged.stream() + .filter(t -> !typeIdsAdded.contains(t)) + .collect(Collectors.toSet()); entriesToRemove.forEach(typeId -> { var currentVersion = dictionaryManagementService.getCurrentVersion(typeId); entryPersistenceService.deleteAllEntriesForTypeId(typeId, currentVersion + 1, DictionaryEntryType.ENTRY); @@ -697,8 +747,10 @@ public class DossierTemplateImportService { dictionaryPersistenceService.incrementVersion(typeId); typeIdsAdded.add(typeId); // added to the list, since the type can not be deleted }); - Set typesToRemove = currentTypes.stream().filter(t -> !t.isDeleted()) // remove the ones already soft deleted - .map(TypeEntity::getId).filter(t -> !typeIdsAdded.contains(t)) // exclude the type ids already added from the import + Set typesToRemove = currentTypes.stream() + .filter(t -> !t.isDeleted()) // remove the ones already soft deleted + .map(TypeEntity::getId) + .filter(t -> !typeIdsAdded.contains(t)) // exclude the type ids already added from the import .filter(t -> !currentTypesIdSystemManaged.contains(t)) // exclude the types system managed .collect(Collectors.toSet()); typesToRemove.forEach(dictionaryManagementService::deleteType); @@ -739,7 +791,10 @@ public class DossierTemplateImportService { if (entries != null && !entries.isEmpty() && entries.get(typeName) != null && !entries.get(typeName).isEmpty()) { dictionaryManagementService.addEntries(typeId, entries.get(typeName), true, true, dictionaryType); } else { // no entries, delete current entries - List existing = entryPersistenceService.getEntries(typeId, dictionaryType, null).stream().map(BaseDictionaryEntry::getValue).collect(Collectors.toList()); + List existing = entryPersistenceService.getEntries(typeId, dictionaryType, null) + .stream() + .map(BaseDictionaryEntry::getValue) + .collect(Collectors.toList()); if (!existing.isEmpty()) { dictionaryManagementService.deleteEntries(typeId, existing, dictionaryType); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateStatsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateStatsService.java index 4dbbc907b..05496a44b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateStatsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateStatsService.java @@ -74,22 +74,24 @@ public class DossierTemplateStatsService { Map, List> dossierIdsGroupedByDossierStatusId = dossierRepository.findDossierIdAndStatusForTemplate(dossierTemplateId) .stream() .collect(Collectors.groupingBy(dossierIdAndStatusProjection -> Optional.ofNullable(dossierIdAndStatusProjection.getDossierStatusId()), - Collectors.mapping(DossierIdAndStatusProjection::getDossierId, Collectors.toList()))); + Collectors.mapping(DossierIdAndStatusProjection::getDossierId, Collectors.toList()))); dts.setNumberOfPages(pageCounts.getNumberOfAnalyzedPages()); dts.setNumberOfExcludedPages(pageCounts.getNumberOfExcludedPages()); dts.setFileCountPerProcessingStatus(processingCounts.stream() - .map(t -> new DossierTemplateStats.ProcessingStatusCount(t.getProcessingStatus(), t.getCount())) - .collect(Collectors.toList())); + .map(t -> new DossierTemplateStats.ProcessingStatusCount(t.getProcessingStatus(), t.getCount())) + .collect(Collectors.toList())); dts.setFileCountPerWorkflowStatus(workflowCounts.stream() - .map(t -> new DossierTemplateStats.WorkflowStatusCount(t.getWorkflowStatus(), t.getCount())) - .collect(Collectors.toList())); + .map(t -> new DossierTemplateStats.WorkflowStatusCount(t.getWorkflowStatus(), t.getCount())) + .collect(Collectors.toList())); dts.setDossierCountByStatus(dossierIdsGroupedByDossierStatusId.entrySet() - .stream() - // the undefined status should be mapped to a specific string instead of using null - .map(entry -> new DossierTemplateStats.DossierStatusCount(entry.getKey().orElse(null), filterByPermissionsService.onlyViewableDossierIds(entry.getValue()).size())) - .toList()); + .stream() + // the undefined status should be mapped to a specific string instead of using null + .map(entry -> new DossierTemplateStats.DossierStatusCount(entry.getKey() + .orElse(null), + filterByPermissionsService.onlyViewableDossierIds(entry.getValue()).size())) + .toList()); dts.setDossiersInTemplate(filterByPermissionsService.onlyViewableDossierIds(dossierRepository.findActiveDossierIdsForTemplate(dossierTemplateId))); @@ -107,10 +109,13 @@ public class DossierTemplateStatsService { .collect(Collectors.toList()); final List dossierTemplateStatsList = Collections.synchronizedList(new ArrayList<>()); - templates.stream().forEach(dt -> dossierTemplateStatsList.add(getDossierTemplateStats(dt.getId(), dt.getName(), dt.getDossierTemplateStatus()))); + templates.stream() + .forEach(dt -> dossierTemplateStatsList.add(getDossierTemplateStats(dt.getId(), dt.getName(), dt.getDossierTemplateStatus()))); List result = dossierTemplateStatsList.stream() - .filter(stat -> !(DossierTemplateStatus.INACTIVE.equals(stat.getDossierTemplateStatus()) && stat.getNumberOfActiveDossiers() == 0 && stat.getNumberOfArchivedDossiers() == 0)) + .filter(stat -> !(DossierTemplateStatus.INACTIVE.equals(stat.getDossierTemplateStatus()) + && stat.getNumberOfActiveDossiers() == 0 + && stat.getNumberOfArchivedDossiers() == 0)) .collect(Collectors.toList()); result.sort(Comparator.comparing(DossierTemplateStats::getName)); @@ -125,12 +130,17 @@ public class DossierTemplateStatsService { .collect(Collectors.groupingBy(DictionarySummaryResponse::getDossierTemplateId, Collectors.mapping(this::getDossierTemplateStats, Collectors.toList()))); List dossierTemplateStatsList = dictionarySummaryMap.entrySet() .stream() - .map(e -> e.getValue().size() == 1 && e.getValue().get(0).getId() == null ? new DossierTemplateDictionaryStats(e.getKey(), - 0, - new ArrayList<>()) : new DossierTemplateDictionaryStats(e.getKey(), e.getValue().size(), e.getValue())) + .map(e -> e.getValue().size() == 1 + && e.getValue() + .get(0).getId() == null ? new DossierTemplateDictionaryStats(e.getKey(), 0, new ArrayList<>()) : new DossierTemplateDictionaryStats(e.getKey(), + e.getValue() + .size(), + e.getValue())) .collect(Collectors.toList()); // add the dossier templates with no dictionaries but with dossiers - Set dossierTemplatesIdsFounded = dossierTemplateStatsList.stream().map(DossierTemplateDictionaryStats::getDossierTemplateId).collect(Collectors.toSet()); + Set dossierTemplatesIdsFounded = dossierTemplateStatsList.stream() + .map(DossierTemplateDictionaryStats::getDossierTemplateId) + .collect(Collectors.toSet()); dossierTemplateIds.removeAll(dossierTemplatesIdsFounded); List dossierTemplateStatsListForDossierNotFound = dossierTemplateIds.stream() diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java index 7e1740261..3a29c35ae 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java @@ -62,7 +62,10 @@ public class DownloadService { .fileIds(request.getFileIds()) .includeUnprocessed(request.getIncludeUnprocessed()) .downloadFileTypes(dossier.getDownloadFileTypes()) - .reportTemplateIds(dossier.getReportTemplates().stream().map(ReportTemplateEntity::getTemplateId).collect(Collectors.toList())) + .reportTemplateIds(dossier.getReportTemplates() + .stream() + .map(ReportTemplateEntity::getTemplateId) + .collect(Collectors.toList())) .build(); return this.startPrepareDownload(requestWithOptions, dossier, existingFileStatuses); } @@ -76,14 +79,14 @@ public class DownloadService { String storageId = StorageIdUtils.getStorageId(request.getUserId(), request.getDossierId(), downloadFilename); downloadStatusPersistenceService.createStatus(request.getUserId(), - storageId, - dossier, - downloadFilename, - downloadArchiveMimeType, - request.getFileIds(), - request.getDownloadFileTypes(), - request.getReportTemplateIds(), - request.getRedactionPreviewColor()); + storageId, + dossier, + downloadFilename, + downloadArchiveMimeType, + request.getFileIds(), + request.getDownloadFileTypes(), + request.getReportTemplateIds(), + request.getRedactionPreviewColor()); addToDownloadQueue(DownloadJob.builder().storageId(storageId).userId(request.getUserId()).includeUnprocessed(request.getIncludeUnprocessed()).build(), 1); return new JSONPrimitive<>(storageId); @@ -94,7 +97,10 @@ public class DownloadService { var dossier = dossierPersistenceService.getActiveOrArchivedDossier(dossierId); - Set existingFilenames = downloadStatusPersistenceService.getStatusesByUser(userId).stream().map(DownloadStatusEntity::getFilename).collect(Collectors.toSet()); + Set existingFilenames = downloadStatusPersistenceService.getStatusesByUser(userId) + .stream() + .map(DownloadStatusEntity::getFilename) + .collect(Collectors.toSet()); if (fileIds.size() == 1) { var file = fileStatusPersistenceService.getStatus(fileIds.iterator().next()); @@ -131,10 +137,10 @@ public class DownloadService { private void addToDownloadQueue(DownloadJob downloadJob, int priority) { - rabbitTemplate.convertAndSend(MessagingConfiguration.DOWNLOAD_QUEUE, downloadJob, message -> { - message.getMessageProperties().setPriority(priority); - return message; - }); + rabbitTemplate.convertAndSend(MessagingConfiguration.DOWNLOAD_QUEUE, downloadJob, message -> { + message.getMessageProperties().setPriority(priority); + return message; + }); } @@ -172,7 +178,9 @@ public class DownloadService { if (reportTemplates.isEmpty() && (request.getDownloadFileTypes() == null || request.getDownloadFileTypes().isEmpty())) { throw new BadRequestException(" Invalid reports ids and no download types"); } - request.setReportTemplateIds(reportTemplates.stream().map(ReportTemplateEntity::getTemplateId).collect(Collectors.toList())); + request.setReportTemplateIds(reportTemplates.stream() + .map(ReportTemplateEntity::getTemplateId) + .collect(Collectors.toList())); } return this.startPrepareDownload(request, dossier, existingFileStatuses); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java index f693095de..126491996 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileAttributesManagementService.java @@ -145,7 +145,10 @@ public class FileAttributesManagementService { try (CSVReader csvReader = new CSVReaderBuilder(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(csv), parseEncoding(encoding)))).withCSVParser(parser) .build()) { - records.addAll(csvReader.readAll().stream().map(Lists::newArrayList).toList()); + records.addAll(csvReader.readAll() + .stream() + .map(Lists::newArrayList) + .toList()); } catch (IOException | CsvException e) { log.error("Failed to process CSV", e); } @@ -174,7 +177,8 @@ public class FileAttributesManagementService { var dossier = dossierPersistenceService.findByDossierId(dossierId); var config = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); - var typeById = config.stream().collect(Collectors.toMap(FileAttributeConfigEntity::getId, FileAttributeConfigEntity::getType)); + var typeById = config.stream() + .collect(Collectors.toMap(FileAttributeConfigEntity::getId, FileAttributeConfigEntity::getType)); for (String fileAttributeConfigId : fileAttributesMap.keySet()) { validateFileAttribute(typeById, fileAttributeConfigId, fileAttributesMap.get(fileAttributeConfigId)); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileFormatValidationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileFormatValidationService.java index 4a84997c3..8009015ad 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileFormatValidationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileFormatValidationService.java @@ -47,8 +47,7 @@ public class FileFormatValidationService { } else { Optional optionalLicense = getActiveLicense(tenantId); if (optionalLicense.isPresent()) { - Optional optionalSupportMSOfficeFormatsFeature = optionalLicense.get() - .getFeatures() + Optional optionalSupportMSOfficeFormatsFeature = optionalLicense.get().getFeatures() .stream() .filter(f -> f.getName().equals(SUPPORT_MS_OFFICE_FORMATS_FEATURE)) .findFirst(); @@ -73,7 +72,10 @@ public class FileFormatValidationService { private Optional getActiveLicense(String tenantId) { var redactionLicenseModel = getLicenseForTenant(tenantId); - return redactionLicenseModel.getLicenses().stream().filter(rlm -> Objects.equals(rlm.getId(), redactionLicenseModel.getActiveLicense())).findFirst(); + return redactionLicenseModel.getLicenses() + .stream() + .filter(rlm -> Objects.equals(rlm.getId(), redactionLicenseModel.getActiveLicense())) + .findFirst(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java index 65ac81eca..b199fb4ae 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java @@ -134,8 +134,8 @@ public class FileManagementStorageService { try { return storageService.readJSONObject(TenantContext.getTenantId(), - StorageIdUtils.getStorageId(dossierId, fileId, FileType.IMPORTED_REDACTIONS), - ImportedRedactions.class); + StorageIdUtils.getStorageId(dossierId, fileId, FileType.IMPORTED_REDACTIONS), + ImportedRedactions.class); } catch (StorageObjectDoesNotExist e) { throw new NotFoundException("ImportedRedactions does not exist"); } catch (Exception e) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusManagementService.java index c5558eb76..2e9b2f096 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusManagementService.java @@ -35,7 +35,10 @@ public class FileStatusManagementService { public List getDossierStatus(String dossierId) { - return fileStatusService.getDossierStatus(dossierId).stream().filter(f -> !f.isSoftOrHardDeleted()).collect(Collectors.toList()); + return fileStatusService.getDossierStatus(dossierId) + .stream() + .filter(f -> !f.isSoftOrHardDeleted()) + .collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java index 7496bf35e..829cfd93d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java @@ -78,16 +78,16 @@ public class FileStatusProcessingUpdateService { retryTemplate.execute(retryContext -> { log.info("Preprocessing dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext.getRetryCount()); fileStatusService.setStatusPreProcessing(fileId, - fileEntity.getProcessingStatus().equals(ProcessingStatus.PRE_PROCESSING) ? fileEntity.getProcessingErrorCounter() + 1 : 0); + fileEntity.getProcessingStatus().equals(ProcessingStatus.PRE_PROCESSING) ? fileEntity.getProcessingErrorCounter() + 1 : 0); return null; }); var updatedFileEntity = fileStatusPersistenceService.getStatus(fileId); if (updatedFileEntity.getProcessingErrorCounter() > settings.getMaxErrorRetries()) { throw new ConflictException(String.format("Max Processing Retries exhausted for dossier %s and file %s with errorCount: %s", - dossierId, - fileId, - updatedFileEntity.getProcessingErrorCounter())); + dossierId, + fileId, + updatedFileEntity.getProcessingErrorCounter())); } } @@ -105,10 +105,10 @@ public class FileStatusProcessingUpdateService { retryTemplate.execute(retryContext -> { log.warn("Retrying {} time to set ERROR status for file {} in dossier {} with reason {} ", - retryContext.getRetryCount(), - fileId, - dossierId, - fileErrorInfo != null ? fileErrorInfo.getCause() : null); + retryContext.getRetryCount(), + fileId, + dossierId, + fileErrorInfo != null ? fileErrorInfo.getCause() : null); fileStatusService.setStatusError(fileId, fileErrorInfo); return null; }); @@ -122,16 +122,16 @@ public class FileStatusProcessingUpdateService { retryTemplate.execute(retryContext -> { log.info("Ocr processing dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext.getRetryCount()); fileStatusService.setStatusOcrProcessing(fileId, - fileEntity.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING) ? fileEntity.getProcessingErrorCounter() + 1 : 0); + fileEntity.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING) ? fileEntity.getProcessingErrorCounter() + 1 : 0); return null; }); var updatedFileEntity = fileStatusPersistenceService.getStatus(fileId); if (updatedFileEntity.getProcessingErrorCounter() > settings.getMaxErrorRetries()) { throw new ConflictException(String.format("Max Ocr Retries exhausted for dossier %s and file %s with errorCount: %s", - dossierId, - fileId, - updatedFileEntity.getProcessingErrorCounter())); + dossierId, + fileId, + updatedFileEntity.getProcessingErrorCounter())); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java index be1af7ec5..06117fde5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; + import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; @@ -93,7 +94,10 @@ public class FileStatusService { var fileEntities = fileStatusPersistenceService.getAllRelevantStatusesForReanalysisScheduler(fileManagementServiceSettings.getMaxErrorRetries()); var convertedList = MagicConverter.convert(fileEntities, FileModel.class, new FileModelMapper()); log.debug("Initial list of files for scheduler contains: {} files.", fileEntities.size()); - return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList).stream().filter(FileModel::isAnalysisRequired).collect(Collectors.toList()); + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList) + .stream() + .filter(FileModel::isAnalysisRequired) + .collect(Collectors.toList()); } @@ -255,22 +259,25 @@ public class FileStatusService { } } + private void addToVisualLayoutParsingQueue(String dossierId, String fileId) { + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.VISUAL_LAYOUT_PARSING_ANALYZING); rabbitTemplate.convertAndSend(MessagingConfiguration.VISUAL_LAYOUT_PARSING_QUEUE, - VisualLayoutParsingServiceRequest.builder() - .dossierId(dossierId) - .fileId(fileId) - .targetFileExtension(VisualLayoutParsingServiceRequest.TARGET_FILE_EXTENSION) - .responseFileExtension(VisualLayoutParsingServiceRequest.VISUAL_LAYOUT_PARSING_FILE_EXTENSION) - .build(), - message -> { - message.getMessageProperties().setPriority(1); - log.info("answer from visual layout parsing: "+message); - return message; - }); + VisualLayoutParsingServiceRequest.builder() + .dossierId(dossierId) + .fileId(fileId) + .targetFileExtension(VisualLayoutParsingServiceRequest.TARGET_FILE_EXTENSION) + .responseFileExtension(VisualLayoutParsingServiceRequest.VISUAL_LAYOUT_PARSING_FILE_EXTENSION) + .build(), + message -> { + message.getMessageProperties().setPriority(1); + log.info("answer from visual layout parsing: " + message); + return message; + }); } + @SneakyThrows public void addToPreprocessingQueue(String dossierId, String fileId, String filename) { @@ -293,17 +300,17 @@ public class FileStatusService { fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.FIGURE_DETECTION_ANALYZING); rabbitTemplate.convertAndSend(MessagingConfiguration.CV_ANALYSIS_QUEUE, - CvAnalysisServiceRequest.builder() - .dossierId(dossierId) - .fileId(fileId) - .operation(CvAnalysisServiceRequest.OPERATION_FIGURE_DETECTION) - .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION) - .responseFileExtension(CvAnalysisServiceRequest.FIGURE_DETECTION_FILE_EXTENSION) - .build(), - message -> { - message.getMessageProperties().setPriority(1); - return message; - }); + CvAnalysisServiceRequest.builder() + .dossierId(dossierId) + .fileId(fileId) + .operation(CvAnalysisServiceRequest.OPERATION_FIGURE_DETECTION) + .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION) + .responseFileExtension(CvAnalysisServiceRequest.FIGURE_DETECTION_FILE_EXTENSION) + .build(), + message -> { + message.getMessageProperties().setPriority(1); + return message; + }); } @@ -312,17 +319,17 @@ public class FileStatusService { fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.TABLE_PARSING_ANALYZING); rabbitTemplate.convertAndSend(MessagingConfiguration.CV_ANALYSIS_QUEUE, - CvAnalysisServiceRequest.builder() - .dossierId(dossierId) - .fileId(fileId) - .operation(CvAnalysisServiceRequest.OPERATION_TABLE_PARSING) - .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION) - .responseFileExtension(CvAnalysisServiceRequest.TABLE_PARSING_FILE_EXTENSION) - .build(), - message -> { - message.getMessageProperties().setPriority(1); - return message; - }); + CvAnalysisServiceRequest.builder() + .dossierId(dossierId) + .fileId(fileId) + .operation(CvAnalysisServiceRequest.OPERATION_TABLE_PARSING) + .targetFileExtension(CvAnalysisServiceRequest.TARGET_FILE_EXTENSION) + .responseFileExtension(CvAnalysisServiceRequest.TABLE_PARSING_FILE_EXTENSION) + .build(), + message -> { + message.getMessageProperties().setPriority(1); + return message; + }); } @@ -330,16 +337,16 @@ public class FileStatusService { setStatusImageAnalyzing(fileId); rabbitTemplate.convertAndSend(MessagingConfiguration.IMAGE_SERVICE_QUEUE, - ImageServiceRequest.builder() - .dossierId(dossierId) - .fileId(fileId) - .targetFileExtension(ImageServiceRequest.TARGET_FILE_EXTENSION) - .responseFileExtension(ImageServiceRequest.RESPONSE_FILE_EXTENSION) - .build(), - message -> { - message.getMessageProperties().setPriority(1); - return message; - }); + ImageServiceRequest.builder() + .dossierId(dossierId) + .fileId(fileId) + .targetFileExtension(ImageServiceRequest.TARGET_FILE_EXTENSION) + .responseFileExtension(ImageServiceRequest.RESPONSE_FILE_EXTENSION) + .build(), + message -> { + message.getMessageProperties().setPriority(1); + return message; + }); } @@ -362,16 +369,16 @@ public class FileStatusService { setStatusNerAnalyzing(fileId); rabbitTemplate.convertAndSend(MessagingConfiguration.NER_SERVICE_QUEUE, - NerServiceRequest.builder() - .dossierId(dossierId) - .fileId(fileId) - .targetFileExtension(NerServiceRequest.TARGET_FILE_EXTENSION) - .responseFileExtension(NerServiceRequest.RESPONSE_FILE_EXTENSION) - .build(), - message -> { - message.getMessageProperties().setPriority(1); - return message; - }); + NerServiceRequest.builder() + .dossierId(dossierId) + .fileId(fileId) + .targetFileExtension(NerServiceRequest.TARGET_FILE_EXTENSION) + .responseFileExtension(NerServiceRequest.RESPONSE_FILE_EXTENSION) + .build(), + message -> { + message.getMessageProperties().setPriority(1); + return message; + }); } @@ -473,15 +480,15 @@ public class FileStatusService { public void setStatusSuccessful(String fileId, AnalyzeResult analyzeResult) { fileStatusPersistenceService.updateProcessingStatus(fileId, - analyzeResult.getNumberOfPages(), - analyzeResult.getDictionaryVersion(), - analyzeResult.getRulesVersion(), - analyzeResult.getComponentRulesVersion(), - analyzeResult.getLegalBasisVersion(), - analyzeResult.getDuration(), - analyzeResult.getDossierDictionaryVersion(), - analyzeResult.getAnalysisVersion(), - analyzeResult.getAnalysisNumber()); + analyzeResult.getNumberOfPages(), + analyzeResult.getDictionaryVersion(), + analyzeResult.getRulesVersion(), + analyzeResult.getComponentRulesVersion(), + analyzeResult.getLegalBasisVersion(), + analyzeResult.getDuration(), + analyzeResult.getDossierDictionaryVersion(), + analyzeResult.getAnalysisVersion(), + analyzeResult.getAnalysisNumber()); } @@ -675,7 +682,6 @@ public class FileStatusService { } - @Transactional public void overwriteFile(String dossierId, String fileId, String uploader, String filename, boolean keepManualRedactions) { @@ -790,6 +796,7 @@ public class FileStatusService { return fileStatusPersistenceService.getFilenameById(fileId); } + public void validateFileIsNotDeletedAndNotApproved(String fileId) { var file = fileStatusPersistenceService.getStatus(fileId); @@ -802,4 +809,5 @@ public class FileStatusService { throw new BadRequestException("Cannot analyse an approved file"); } } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FilterByPermissionsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FilterByPermissionsService.java index 78b7efba7..10e4bb0a6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FilterByPermissionsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FilterByPermissionsService.java @@ -56,6 +56,7 @@ public class FilterByPermissionsService { } + @PreFilter("hasPermission(filterObject.dossierId, 'Dossier', 'ACCESS_OBJECT')") public List onlyAccessibleDossiers(List dossiers) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java index 9a975037c..3d45f6df2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/IndexingService.java @@ -69,11 +69,11 @@ public class IndexingService { public void addToIndexingQueue(IndexMessageType indexMessageType, String dossierTemplateId, String dossierId, String fileId, int priority) { rabbitTemplate.convertAndSend(MessagingConfiguration.INDEXING_QUEUE, - IndexMessage.builder().messageType(indexMessageType).dossierTemplateId(dossierTemplateId).dossierId(dossierId).fileId(fileId).build(), - message -> { - message.getMessageProperties().setPriority(priority); - return message; - }); + IndexMessage.builder().messageType(indexMessageType).dossierTemplateId(dossierTemplateId).dossierId(dossierId).fileId(fileId).build(), + message -> { + message.getMessageProperties().setPriority(priority); + return message; + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java index fe0984568..a3e779ffe 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java @@ -29,38 +29,42 @@ public class KeyCloakUserSyncService { public void syncUsersWithKC() { - tenantProvider.getTenants().forEach(tenant -> { - if(!TenantUtils.isTenantReadyForPersistence(tenant)){ - return; - } + tenantProvider.getTenants() + .forEach(tenant -> { - TenantContext.setTenantId(tenant.getTenantId()); + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; + } - var allUsers = usersClient.getAllUsers(true); - // all userIds from KC - var allUserIds = allUsers.stream().map(User::getUserId).collect(Collectors.toSet()); + TenantContext.setTenantId(tenant.getTenantId()); - var redactionObjectsUserIds = new HashSet(); + var allUsers = usersClient.getAllUsers(true); + // all userIds from KC + var allUserIds = allUsers.stream() + .map(User::getUserId) + .collect(Collectors.toSet()); - var alLDossiers = dossierManagementService.getAllDossiers(true, true); - // find all userIds that are used by redaction - alLDossiers.forEach(dossier -> { - dossierACLService.enhanceDossierWithACLData(dossier); - redactionObjectsUserIds.addAll(dossier.getMemberIds()); - }); + var redactionObjectsUserIds = new HashSet(); - // remove KC users, what's left is users that are in redaction but no longer in KC - redactionObjectsUserIds.removeAll(allUserIds); + var alLDossiers = dossierManagementService.getAllDossiers(true, true); + // find all userIds that are used by redaction + alLDossiers.forEach(dossier -> { + dossierACLService.enhanceDossierWithACLData(dossier); + redactionObjectsUserIds.addAll(dossier.getMemberIds()); + }); - log.info("Performing user sync/cleanup for ids: {}", redactionObjectsUserIds); + // remove KC users, what's left is users that are in redaction but no longer in KC + redactionObjectsUserIds.removeAll(allUserIds); - redactionObjectsUserIds.forEach(removedUser -> alLDossiers.forEach(dossier -> this.userService.updateDossierUsers(removedUser, - UserService.UserRemovalModel.PERMANENT, - dossier))); + log.info("Performing user sync/cleanup for ids: {}", redactionObjectsUserIds); - TenantContext.clear(); - }); + redactionObjectsUserIds.forEach(removedUser -> alLDossiers.forEach(dossier -> this.userService.updateDossierUsers(removedUser, + UserService.UserRemovalModel.PERMANENT, + dossier))); + + TenantContext.clear(); + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/LicenseReportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/LicenseReportService.java index c7e48b67e..39a3124ae 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/LicenseReportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/LicenseReportService.java @@ -5,8 +5,10 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.license.LicenseReport; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.LicenseReportRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.MonthlyReportData; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import java.time.Instant; @@ -29,12 +31,8 @@ public class LicenseReportService { public LicenseReport getLicenseReport(LicenseReportRequest licenseReportRequest) { - if (licenseReportRequest.getStartDate() == null || - licenseReportRequest.getStartDate().isAfter(licenseReportRequest.getEndDate())) { - return LicenseReport.builder() - .startDate(licenseReportRequest.getStartDate()) - .endDate(licenseReportRequest.getEndDate()) - .build(); + if (licenseReportRequest.getStartDate() == null || licenseReportRequest.getStartDate().isAfter(licenseReportRequest.getEndDate())) { + return LicenseReport.builder().startDate(licenseReportRequest.getStartDate()).endDate(licenseReportRequest.getEndDate()).build(); } var files = fileStatusService.getStatusesAddedBefore(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID)); @@ -42,7 +40,8 @@ public class LicenseReportService { files.sort(Comparator.comparing(FileModel::getAdded)); - var dossiersById = addDossiers.stream().collect(Collectors.toMap(DossierEntity::getId, Function.identity())); + var dossiersById = addDossiers.stream() + .collect(Collectors.toMap(DossierEntity::getId, Function.identity())); Map> adds = new HashMap<>(); Map> softDeletes = new HashMap<>(); @@ -50,7 +49,6 @@ public class LicenseReportService { Map> hardDeletes = new HashMap<>(); Map> ocrs = new HashMap<>(); - for (var file : files) { adds.computeIfAbsent(YearMonth.from(file.getAdded()), entry -> new HashSet<>()).add(file); @@ -58,13 +56,19 @@ public class LicenseReportService { if (file.getDeleted() != null && file.getDeleted().toInstant().isBefore(licenseReportRequest.getEndDate())) { softDeletes.computeIfAbsent(YearMonth.from(file.getDeleted()), entry -> new HashSet<>()).add(file); } - if (file.getDeleted() == null && dossiersById.get(file.getDossierId()).getSoftDeletedTime() != null && dossiersById.get(file.getDossierId()).getSoftDeletedTime().toInstant().isBefore(licenseReportRequest.getEndDate())) { + if (file.getDeleted() == null && dossiersById.get(file.getDossierId()).getSoftDeletedTime() != null && dossiersById.get(file.getDossierId()) + .getSoftDeletedTime() + .toInstant() + .isBefore(licenseReportRequest.getEndDate())) { softDeletes.computeIfAbsent(YearMonth.from(dossiersById.get(file.getDossierId()).getSoftDeletedTime()), entry -> new HashSet<>()).add(file); } if (file.getHardDeletedTime() != null && file.getHardDeletedTime().toInstant().isBefore(licenseReportRequest.getEndDate())) { hardDeletes.computeIfAbsent(YearMonth.from(file.getHardDeletedTime()), entry -> new HashSet<>()).add(file); } - if (file.getHardDeletedTime() == null && dossiersById.get(file.getDossierId()).getHardDeletedTime() != null && dossiersById.get(file.getDossierId()).getHardDeletedTime().toInstant().isBefore(licenseReportRequest.getEndDate())) { + if (file.getHardDeletedTime() == null && dossiersById.get(file.getDossierId()).getHardDeletedTime() != null && dossiersById.get(file.getDossierId()) + .getHardDeletedTime() + .toInstant() + .isBefore(licenseReportRequest.getEndDate())) { hardDeletes.computeIfAbsent(YearMonth.from(dossiersById.get(file.getDossierId()).getHardDeletedTime()), entry -> new HashSet<>()).add(file); } if (dossiersById.get(file.getDossierId()).getArchivedTime() != null && dossiersById.get(file.getDossierId()) @@ -79,7 +83,8 @@ public class LicenseReportService { } YearMonth currentMonth = !files.isEmpty() && files.get(0).getAdded().toInstant().isBefore(licenseReportRequest.getStartDate()) ? YearMonth.from(files.get(0) - .getAdded()) : YearMonth.from(licenseReportRequest.getStartDate().atZone(UTC_ZONE_ID).toLocalDate()); + .getAdded()) : YearMonth.from( + licenseReportRequest.getStartDate().atZone(UTC_ZONE_ID).toLocalDate()); YearMonth endMonth = YearMonth.from(licenseReportRequest.getEndDate().atZone(UTC_ZONE_ID).toLocalDate()); YearMonth reportStartMonth = YearMonth.from(licenseReportRequest.getStartDate().atZone(UTC_ZONE_ID).toLocalDate()); @@ -168,16 +173,16 @@ public class LicenseReportService { var monthEndDate = currentMonth.atEndOfMonth().atTime(23, 59).atZone(UTC_ZONE_ID).toInstant(); monthlyData.add(MonthlyReportData.builder() - .startDate(currentMonth.atDay(1).atStartOfDay(UTC_ZONE_ID).toInstant()) - .endDate(monthEndDate.isBefore(licenseReportRequest.getEndDate()) ? monthEndDate : licenseReportRequest.getEndDate()) - .activeFilesUploadedBytes(activeFilesUploadedBytes) - .trashFilesUploadedBytes(trashFilesUploadedBytes) - .archivedFilesUploadedBytes(archivedFilesUploadedBytes) - .totalFilesUploadedBytes(activeFilesUploadedBytes + trashFilesUploadedBytes + archivedFilesUploadedBytes) - .numberOfAnalyzedPages(currentMonthNumberOfAnalyzedPages) - .numberOfOcrPages(currentMonthNumberOfOcrPages) - .analysedFilesBytes(currentanalysedFilesBytes) - .build()); + .startDate(currentMonth.atDay(1).atStartOfDay(UTC_ZONE_ID).toInstant()) + .endDate(monthEndDate.isBefore(licenseReportRequest.getEndDate()) ? monthEndDate : licenseReportRequest.getEndDate()) + .activeFilesUploadedBytes(activeFilesUploadedBytes) + .trashFilesUploadedBytes(trashFilesUploadedBytes) + .archivedFilesUploadedBytes(archivedFilesUploadedBytes) + .totalFilesUploadedBytes(activeFilesUploadedBytes + trashFilesUploadedBytes + archivedFilesUploadedBytes) + .numberOfAnalyzedPages(currentMonthNumberOfAnalyzedPages) + .numberOfOcrPages(currentMonthNumberOfOcrPages) + .analysedFilesBytes(currentanalysedFilesBytes) + .build()); } currentMonth = currentMonth.plusMonths(1); @@ -193,11 +198,13 @@ public class LicenseReportService { .numberOfAnalyzedFiles(numberOfAnalyzedFiles) .analysedFilesBytes(analysedFilesBytes) .numberOfOcrFiles(numberOfOcrFiles) - .numberOfDossiers(addDossiers.stream().filter(dossier -> // - dossier.getDate().toInstant().isAfter(licenseReportRequest.getStartDate()) // - && dossier.getDate().toInstant().isBefore(licenseReportRequest.getEndDate()) // - && (dossier.getHardDeletedTime() == null || dossier.getHardDeletedTime() - .isAfter(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID)))).collect(Collectors.toSet()).size()) + .numberOfDossiers(addDossiers.stream() + .filter(dossier -> // + dossier.getDate().toInstant().isAfter(licenseReportRequest.getStartDate()) // + && dossier.getDate().toInstant().isBefore(licenseReportRequest.getEndDate()) // + && (dossier.getHardDeletedTime() == null || dossier.getHardDeletedTime() + .isAfter(OffsetDateTime.ofInstant(licenseReportRequest.getEndDate(), UTC_ZONE_ID)))) + .collect(Collectors.toSet()).size()) .startDate(licenseReportRequest.getStartDate()) .endDate(licenseReportRequest.getEndDate()) .monthlyData(monthlyData) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NotificationPreferencesService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NotificationPreferencesService.java index 3f2738823..e6a9d1a4e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NotificationPreferencesService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/NotificationPreferencesService.java @@ -19,11 +19,12 @@ public class NotificationPreferencesService { NotificationPreferencesPersistenceService notificationPreferencesPersistenceService; + public NotificationPreferences getOrCreateNotificationPreferences(String userId) { var notificationPreferences = notificationPreferencesPersistenceService.getByUserId(userId); - if (notificationPreferences != null){ + if (notificationPreferences != null) { return notificationPreferences; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java index 405d28ab5..e42a001c0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java @@ -87,7 +87,9 @@ public class ReanalysisRequiredStatusService { return new AnalysisRequiredResult(false, true); } - if (ProcessingStatus.PROCESSED.equals(fileStatus.getProcessingStatus()) || ProcessingStatus.PRE_PROCESSED.equals(fileStatus.getProcessingStatus()) || ignoreProcessingStates) { + if (ProcessingStatus.PROCESSED.equals(fileStatus.getProcessingStatus()) + || ProcessingStatus.PRE_PROCESSED.equals(fileStatus.getProcessingStatus()) + || ignoreProcessingStates) { switch (fileStatus.getWorkflowStatus()) { case NEW: diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java index f901cb329..32d15de4a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java @@ -14,9 +14,11 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus; + import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import java.time.OffsetDateTime; @@ -74,13 +76,15 @@ public class ReanalysisService { } }); } else { - filesToReanalyse.stream().filter(FileModel::isReanalysisRequired).forEach(file -> { - if (file.isFullAnalysisRequired()) { - fileStatusService.setStatusFullReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, false); - } else { - fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, true); - } - }); + filesToReanalyse.stream() + .filter(FileModel::isReanalysisRequired) + .forEach(file -> { + if (file.isFullAnalysisRequired()) { + fileStatusService.setStatusFullReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, false); + } else { + fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, true); + } + }); } } @@ -98,7 +102,9 @@ public class ReanalysisService { var relevantFiles = new ArrayList(); for (var fileId : fileIds) { - var dossierFileOptional = dossierFiles.stream().filter(f -> f.getId().equals(fileId)).findAny(); + var dossierFileOptional = dossierFiles.stream() + .filter(f -> f.getId().equals(fileId)) + .findAny(); if (dossierFileOptional.isEmpty()) { throw new BadRequestException("Cannot reanalyse file from different dossier!"); } @@ -134,8 +140,9 @@ public class ReanalysisService { dossierPersistenceService.getAndValidateDossier(dossierId); FileModel dossierFile = fileStatusService.getStatus(fileId); - if (!dossierFile.getProcessingStatus().equals(ProcessingStatus.PROCESSED) && !dossierFile.getProcessingStatus() - .equals(ProcessingStatus.OCR_PROCESSING_QUEUED) && !dossierFile.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING)) { + if (!dossierFile.getProcessingStatus().equals(ProcessingStatus.PROCESSED) + && !dossierFile.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING_QUEUED) + && !dossierFile.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING)) { throw new ConflictException("File is not processed"); } @@ -190,11 +197,12 @@ public class ReanalysisService { public void deleteImportedRedactions(DeleteImportedRedactionsRequest deleteImportedRedactionsRequest) { var importedRedactions = fileManagementStorageService.getImportedRedactions(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId()); - importedRedactions.getImportedRedactions().forEach((key, value) -> value.removeIf(v -> deleteImportedRedactionsRequest.getAnnotationIds().contains(v.getId()))); + importedRedactions.getImportedRedactions() + .forEach((key, value) -> value.removeIf(v -> deleteImportedRedactionsRequest.getAnnotationIds().contains(v.getId()))); fileManagementStorageService.storeJSONObject(deleteImportedRedactionsRequest.getDossierId(), - deleteImportedRedactionsRequest.getFileId(), - FileType.IMPORTED_REDACTIONS, - importedRedactions); + deleteImportedRedactionsRequest.getFileId(), + FileType.IMPORTED_REDACTIONS, + importedRedactions); fileStatusService.setStatusFullReprocess(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId(), true, false); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java index b794dc904..0a5f4da97 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java @@ -74,18 +74,16 @@ public class RedactionLogService { } } for (var manualChange : redactionLogEntry.getManualChanges()) { - if (manualChange.getProcessedDate() != null && manualChange.getProcessedDate() - .isAfter(filteredRedactionLogRequest.getSpecifiedDate()) || manualChange.getRequestedDate() != null && manualChange.getRequestedDate() - .isAfter(filteredRedactionLogRequest.getSpecifiedDate())) { + if (manualChange.getProcessedDate() != null && manualChange.getProcessedDate().isAfter(filteredRedactionLogRequest.getSpecifiedDate()) + || manualChange.getRequestedDate() != null && manualChange.getRequestedDate().isAfter(filteredRedactionLogRequest.getSpecifiedDate())) { isAfterSpecifiedDate = true; } } var comments = redactionLogEntry.getComments(); if (comments != null) { for (var comment : comments) { - if (comment.getSoftDeletedTime() != null && comment.getSoftDeletedTime() - .isAfter(filteredRedactionLogRequest.getSpecifiedDate()) || comment.getDate() != null && comment.getDate() - .isAfter(filteredRedactionLogRequest.getSpecifiedDate())) { + if (comment.getSoftDeletedTime() != null && comment.getSoftDeletedTime().isAfter(filteredRedactionLogRequest.getSpecifiedDate()) + || comment.getDate() != null && comment.getDate().isAfter(filteredRedactionLogRequest.getSpecifiedDate())) { isAfterSpecifiedDate = true; } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java index be16d83e0..de95bd527 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java @@ -34,9 +34,12 @@ public class ReportTemplateService { String templateId = null; List reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId()); for (ReportTemplateEntity reportTemplate : reportTemplates) { - if (reportTemplate.getFileName() - .equals(reportTemplateUploadRequest.getFileName()) && reportTemplate.isMultiFileReport() && reportTemplateUploadRequest.isMultiFileReport() || reportTemplate.getFileName() - .equals(reportTemplateUploadRequest.getFileName()) && !reportTemplate.isMultiFileReport() && !reportTemplateUploadRequest.isMultiFileReport()) { + if (reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName()) + && reportTemplate.isMultiFileReport() + && reportTemplateUploadRequest.isMultiFileReport() + || reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName()) + && !reportTemplate.isMultiFileReport() + && !reportTemplateUploadRequest.isMultiFileReport()) { templateId = reportTemplate.getTemplateId(); } } @@ -46,20 +49,20 @@ public class ReportTemplateService { if (templateId != null) { reportTemplatePersistenceService.updateTemplate(reportTemplateUploadRequest.getDossierTemplateId(), - templateId, - ReportTemplateUpdateRequest.builder() - .fileName(reportTemplateUploadRequest.getFileName()) - .multiFileReport(reportTemplateUploadRequest.isMultiFileReport()) - .activeByDefault(reportTemplateUploadRequest.isActiveByDefault()) - .build()); + templateId, + ReportTemplateUpdateRequest.builder() + .fileName(reportTemplateUploadRequest.getFileName()) + .multiFileReport(reportTemplateUploadRequest.isMultiFileReport()) + .activeByDefault(reportTemplateUploadRequest.isActiveByDefault()) + .build()); } else { templateId = UUID.randomUUID().toString(); reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), - templateId, - storageId, - reportTemplateUploadRequest.getFileName(), - reportTemplateUploadRequest.isActiveByDefault(), - reportTemplateUploadRequest.isMultiFileReport()); + templateId, + storageId, + reportTemplateUploadRequest.getFileName(), + reportTemplateUploadRequest.isActiveByDefault(), + reportTemplateUploadRequest.isMultiFileReport()); } return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java index a6f83104f..cbfcf01d8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java @@ -50,11 +50,11 @@ public class UploadService { ImportCsvResponse response = fileAttributesManagementService.importCsv(dossierId, new ImportCsvRequest(fileContent)); auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("File attributes csv processed.") - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("File attributes csv processed.") + .build()); return FileUploadResult.builder() .processedAttributes(Lists.newArrayList(response.getAffectedFileIds())) @@ -84,12 +84,12 @@ public class UploadService { } auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(dossierId) - .category(AuditCategory.DOSSIER.name()) - .message("File has been uploaded.") - .details(Map.of("fileId", fileId)) - .build()); + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierId) + .category(AuditCategory.DOSSIER.name()) + .message("File has been uploaded.") + .details(Map.of("fileId", fileId)) + .build()); return FileUploadResult.builder().fileIds(Collections.singletonList(fileId)).build(); } @@ -100,11 +100,12 @@ public class UploadService { return hashFunction.hashBytes((fileName + dossierId).getBytes(StandardCharsets.UTF_8)).toString(); } - private void addFileIdToTrace(String fileId){ - if(observationRegistry.getCurrentObservation() != null){ + + private void addFileIdToTrace(String fileId) { + + if (observationRegistry.getCurrentObservation() != null) { observationRegistry.getCurrentObservation().highCardinalityKeyValue("fileId", fileId); } } - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java index 9de757b1b..ffcaae738 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java @@ -51,7 +51,8 @@ public class WatermarkService { public WatermarkEntity getWatermark(long watermarkId) { - return watermarkRepository.findById(watermarkId).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); + return watermarkRepository.findById(watermarkId) + .orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); } @@ -96,12 +97,15 @@ public class WatermarkService { private void validateOpacityAndSetDefaultIfNeeded(WatermarkModel watermark) { + if (watermark.getOpacity() < 0) { watermark.setOpacity(DEFAULT_OPACITY); } } + private void setDefaultTextAlignmentIfNeeded(WatermarkModel watermark) { + if (watermark.getHorizontalTextAlignment() == null) { watermark.setHorizontalTextAlignment(HorizontalTextAlignment.CENTER); } @@ -111,7 +115,9 @@ public class WatermarkService { } } + private void validateHexColorAndSetDefaultIfNeeded(WatermarkModel watermark) { + if (StringUtils.isBlank(watermark.getHexColor())) { watermark.setHexColor(DEFAULT_HEX_COLOR); } @@ -119,6 +125,7 @@ public class WatermarkService { ColorUtils.validateColor(watermark.getHexColor()); } + private void validateWatermarkNameIsPresent(WatermarkModel watermark) { if (StringUtils.isBlank(watermark.getName())) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadCompressionMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadCompressionMessageReceiver.java index 10c19e8e4..d9ab7b453 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadCompressionMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadCompressionMessageReceiver.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration; import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; + import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java index 320fb68f7..1d88edbaf 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadDLQMessageReceiver.java @@ -44,7 +44,7 @@ public class DownloadDLQMessageReceiver { var downloadJob = objectMapper.readValue(failedMessage.getBody(), DownloadJob.class); String errorCause = failedMessage.getMessageProperties().getHeader(X_ERROR_INFO_HEADER); - errorCause = errorCause.substring(0,MAX_ERROR_CAUSE_LENGTH-1); + errorCause = errorCause.substring(0, MAX_ERROR_CAUSE_LENGTH - 1); if (errorCause == null) { errorCause = "Unknown error occured in download queue!"; } @@ -56,13 +56,13 @@ public class DownloadDLQMessageReceiver { @SneakyThrows @RabbitListener(queues = MessagingConfiguration.REPORT_DLQ) public void handleReportDlqMessage(Message failedMessage) { + var reportRequestMessage = objectMapper.readValue(failedMessage.getBody(), ReportRequestMessage.class); String errorCause = failedMessage.getMessageProperties().getHeader(X_ERROR_INFO_HEADER); if (errorCause == null) { errorCause = "Unknown error occured in report redaction queue!"; - } - else if(errorCause.length() > MAX_ERROR_CAUSE_LENGTH) { - errorCause = errorCause.substring(0,MAX_ERROR_CAUSE_LENGTH-1); + } else if (errorCause.length() > MAX_ERROR_CAUSE_LENGTH) { + errorCause = errorCause.substring(0, MAX_ERROR_CAUSE_LENGTH - 1); } log.warn("Handling report request in DLQ userId: {} storageId: {} - setting status to error!", reportRequestMessage.getUserId(), reportRequestMessage.getDownloadId()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java index f4e3cb7eb..a4d3d6d8d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadPreparationService.java @@ -72,11 +72,12 @@ public class DownloadPreparationService { var downloadStatus = downloadStatusPersistenceService.getStatus(downloadId); RedactionMessage.RedactionMessageBuilder messageBuilder = this.generateGeneralRedactionMessage(downloadId, downloadStatus); - downloadStatus.getFiles().forEach(fileEntity -> { - RedactionMessage message = messageBuilder.fileId(fileEntity.getId()).unapprovedFile(fileEntity.getWorkflowStatus() != WorkflowStatus.APPROVED).build(); - log.info("Sending redaction request for downloadId:{} fileId:{} to pdftron-redaction-queue", downloadId, fileEntity.getId()); - rabbitTemplate.convertAndSend(MessagingConfiguration.PDFTRON_QUEUE, message); - }); + downloadStatus.getFiles() + .forEach(fileEntity -> { + RedactionMessage message = messageBuilder.fileId(fileEntity.getId()).unapprovedFile(fileEntity.getWorkflowStatus() != WorkflowStatus.APPROVED).build(); + log.info("Sending redaction request for downloadId:{} fileId:{} to pdftron-redaction-queue", downloadId, fileEntity.getId()); + rabbitTemplate.convertAndSend(MessagingConfiguration.PDFTRON_QUEUE, message); + }); } @@ -139,12 +140,12 @@ public class DownloadPreparationService { public void markFileAsProcessed(RedactionResultMessage redactionResultMessage) { downloadRedactionFileStatusRepository.save(DownloadRedactionFileStatusEntity.builder() - .id(UUID.randomUUID().toString()) - .downloadStorageId(redactionResultMessage.getDownloadId()) - .fileId(redactionResultMessage.getFileId()) - .processingErrorCounter(0) - .details(redactionResultMessage.getRedactionResultDetails()) - .build()); + .id(UUID.randomUUID().toString()) + .downloadStorageId(redactionResultMessage.getDownloadId()) + .fileId(redactionResultMessage.getFileId()) + .processingErrorCounter(0) + .details(redactionResultMessage.getRedactionResultDetails()) + .build()); } @@ -152,11 +153,11 @@ public class DownloadPreparationService { public void markFileAsProcessingError(RedactionMessage redactionMessage) { downloadRedactionFileStatusRepository.save(DownloadRedactionFileStatusEntity.builder() - .id(UUID.randomUUID().toString()) - .downloadStorageId(redactionMessage.getDownloadId()) - .fileId(redactionMessage.getFileId()) - .processingErrorCounter(1) - .build()); + .id(UUID.randomUUID().toString()) + .downloadStorageId(redactionMessage.getDownloadId()) + .fileId(redactionMessage.getFileId()) + .processingErrorCounter(1) + .build()); } @@ -197,18 +198,22 @@ public class DownloadPreparationService { updateStatusToReady(downloadStatus, fileSystemBackedArchiver); notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(downloadStatus.getUserId()) - .issuerId(downloadStatus.getUserId()) - .notificationType("DOWNLOAD_READY") - .target(Map.of("userId", downloadStatus.getUserId(), // - "dossierId", downloadStatus.getDossier().getId(), // - "downloadId", downloadStatus.getStatus())) - .build()); + .userId(downloadStatus.getUserId()) + .issuerId(downloadStatus.getUserId()) + .notificationType("DOWNLOAD_READY") + .target(Map.of("userId", downloadStatus.getUserId(), // + "dossierId", downloadStatus.getDossier().getId(), // + "downloadId", downloadStatus.getStatus())) + .build()); } - downloadReportCleanupService.deleteTmpReportFiles(Stream.concat(storedFileInformations.stream().map(StoredFileInformation::getStorageId), // - redactionFileResults.stream().map(DownloadRedactionFileStatusEntity::getDetails).flatMap(List::stream).map(RedactionResultDetail::getStorageId)) // - .collect(Collectors.toSet())); + downloadReportCleanupService.deleteTmpReportFiles(Stream.concat(storedFileInformations.stream() + .map(StoredFileInformation::getStorageId), // + redactionFileResults.stream() + .map(DownloadRedactionFileStatusEntity::getDetails) + .flatMap(List::stream) + .map(RedactionResultDetail::getStorageId)) // + .collect(Collectors.toSet())); } @@ -232,7 +237,9 @@ public class DownloadPreparationService { var isFileApproved = WorkflowStatus.APPROVED.equals(file.getWorkflowStatus()); String filename = isFileApproved ? file.getFilename() : "UNAPPROVED_" + file.getFilename(); for (DownloadFileType downloadFileType : downloadStatus.getDownloadFileTypes()) { - Optional redactionFileResult = redactionFileResults.stream().filter(rfr -> rfr.getFileId().equals(file.getId())).findFirst(); + Optional redactionFileResult = redactionFileResults.stream() + .filter(rfr -> rfr.getFileId().equals(file.getId())) + .findFirst(); if (redactionFileResult.isEmpty()) { throw new RuntimeException(); @@ -243,29 +250,32 @@ public class DownloadPreparationService { } if (downloadFileType.name().equals(DownloadFileType.PREVIEW.name())) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", addSuffix(filename, "highlighted"), // - getPreview(file.getId(), redactionFileResult.get().getDetails()))); + getPreview(file.getId(), redactionFileResult.get().getDetails()))); } if (downloadFileType.name().equals(DownloadFileType.DELTA_PREVIEW.name())) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Delta Preview", addSuffix(filename, "delta_highlighted"), // - getDeltaPreview(file.getId(), redactionFileResult.get().getDetails()))); + getDeltaPreview(file.getId(), redactionFileResult.get().getDetails()))); } if (downloadFileType.name().equals(DownloadFileType.REDACTED.name()) && isFileApproved) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Redacted", addSuffix(file.getFilename(), "redacted"), // - getRedacted(file.getId(), redactionFileResult.get().getDetails()))); + getRedacted(file.getId(), redactionFileResult.get().getDetails()))); } } log.info("Successfully added file {}/{} for downloadId {}, took {}", - i, - downloadStatus.getFiles().size(), - downloadStatus.getStorageId(), - System.currentTimeMillis() - start); + i, + downloadStatus.getFiles().size(), + downloadStatus.getStorageId(), + System.currentTimeMillis() - start); i++; } log.info("Successfully added {} files for downloadId {}, took {}", - downloadStatus.getFiles().stream().map(FileEntity::getId).toList(), - downloadStatus.getStorageId(), - System.currentTimeMillis() - fileGenerationStart); + downloadStatus.getFiles() + .stream() + .map(FileEntity::getId) + .toList(), + downloadStatus.getStorageId(), + System.currentTimeMillis() - fileGenerationStart); } @@ -277,7 +287,9 @@ public class DownloadPreparationService { private byte[] getStoredFileBytes(String fileId, List redactionResultDetails, RedactionType redactionType) { - var redactionResultDetail = redactionResultDetails.stream().filter(rrd -> rrd.getRedactionType() == redactionType).findFirst(); + var redactionResultDetail = redactionResultDetails.stream() + .filter(rrd -> rrd.getRedactionType() == redactionType) + .findFirst(); if (redactionResultDetail.isPresent()) { try (var inputStream = fileManagementStorageService.getObject(TenantContext.getTenantId(), redactionResultDetail.get().getStorageId())) { byte[] storedFileBytes = inputStream.readAllBytes(); @@ -311,7 +323,9 @@ public class DownloadPreparationService { long addReportsStart = System.currentTimeMillis(); - Map fileById = downloadStatus.getFiles().stream().collect(Collectors.toMap(FileEntity::getId, a -> a)); + Map fileById = downloadStatus.getFiles() + .stream() + .collect(Collectors.toMap(FileEntity::getId, a -> a)); for (StoredFileInformation storedFileInformation : storedFileInformations) { @@ -323,10 +337,13 @@ public class DownloadPreparationService { ReportTemplateEntity reportTemplate = reportTemplatePersistenceService.find(storedFileInformation.getTemplateId()); byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""), - settings.isScmEnabled() ? createFileName(fileStatus, reportTemplate) : addSuffix(createFileName(fileStatus, reportTemplate), - "justification" + (storedFileInformation.getDocumentPartNr() != 0 ? "_" + storedFileInformation.getDocumentPartNr() : "")), - report)); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""), + settings.isScmEnabled() ? createFileName(fileStatus, reportTemplate) : addSuffix( + createFileName(fileStatus, reportTemplate), + "justification" + (storedFileInformation.getDocumentPartNr() != 0 ? "_" + + storedFileInformation.getDocumentPartNr() : "")), + report)); } log.info("Successfully added {} reports for downloadId {}, took {}", storedFileInformations.size(), downloadId, System.currentTimeMillis() - addReportsStart); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java index fe26f20b5..d9054dbd4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadProcessorService.java @@ -37,7 +37,8 @@ public class DownloadProcessorService { DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(downloadJob.getStorageId()); downloadStatusPersistenceService.updateStatus(downloadJob.getStorageId(), DownloadStatusValue.GENERATING); - var dossier = dossierService.getDossierById(downloadStatus.getFiles().iterator().next().getDossierId()); + var dossier = dossierService.getDossierById(downloadStatus.getFiles() + .iterator().next().getDossierId()); List filenameSortedFileIds = downloadStatus.getFiles() .stream() @@ -46,13 +47,16 @@ public class DownloadProcessorService { .collect(Collectors.toList()); addReportQueue(ReportRequestMessage.builder() - .userId(downloadJob.getUserId()) - .downloadId(downloadJob.getStorageId()) - .dossierId(dossier.getId()) - .dossierTemplateId(dossierService.getDossierById(dossier.getId()).getDossierTemplateId()) - .fileIds(filenameSortedFileIds) - .templateIds(downloadStatus.getReports().stream().map(ReportTemplateEntity::getTemplateId).collect(Collectors.toSet())) - .build(), 1); + .userId(downloadJob.getUserId()) + .downloadId(downloadJob.getStorageId()) + .dossierId(dossier.getId()) + .dossierTemplateId(dossierService.getDossierById(dossier.getId()).getDossierTemplateId()) + .fileIds(filenameSortedFileIds) + .templateIds(downloadStatus.getReports() + .stream() + .map(ReportTemplateEntity::getTemplateId) + .collect(Collectors.toSet())) + .build(), 1); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadReportMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadReportMessageReceiver.java index 56c45a3eb..9ba04e78e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadReportMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/DownloadReportMessageReceiver.java @@ -37,7 +37,7 @@ public class DownloadReportMessageReceiver { // This prevents from endless retries oom errors. if (message.getMessageProperties().isRedelivered()) { throw new AmqpRejectAndDontRequeueException(String.format("Error during last processing of request with downloadId: %s, do not retry.", - reportResultMessage.getDownloadId())); + reportResultMessage.getDownloadId())); } receive(reportResultMessage); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java index 7fb06ffd2..ab0928b1d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionDlqMessageReceiver.java @@ -14,6 +14,7 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; import lombok.extern.slf4j.Slf4j; + import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; @@ -38,6 +39,7 @@ public class RedactionDlqMessageReceiver { private final static int MAX_ERROR_CAUSE_LENGTH = 1024; + @RabbitHandler @RabbitListener(queues = MessagingConfiguration.PDFTRON_DLQ) public void receive(Message message) throws IOException { @@ -48,11 +50,9 @@ public class RedactionDlqMessageReceiver { String errorCause = message.getMessageProperties().getHeader(X_ERROR_INFO_HEADER); if (errorCause == null) { errorCause = "Unkown error occured in pdftron service!"; + } else if (errorCause.length() > MAX_ERROR_CAUSE_LENGTH) { + errorCause = errorCause.substring(0, MAX_ERROR_CAUSE_LENGTH - 1); } - else if(errorCause.length() > MAX_ERROR_CAUSE_LENGTH) { - errorCause = errorCause.substring(0,MAX_ERROR_CAUSE_LENGTH-1); - } - var fileEntryOptional = downloadPreparationService.getRedactionFileStatusEntry(redactionMessage.getDownloadId(), redactionMessage.getFileId()); @@ -73,7 +73,7 @@ public class RedactionDlqMessageReceiver { } - public void setDownloadFailed(String downloadId,String errorCause) { + public void setDownloadFailed(String downloadId, String errorCause) { retryTemplate.execute(retryContext -> { log.warn("Retrying {} time to set FAILED status for downloadJob with storageId: {}", retryContext.getRetryCount(), downloadId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionResultMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionResultMessageReceiver.java index 8bf75208b..2e9f19bbd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionResultMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/download/RedactionResultMessageReceiver.java @@ -4,11 +4,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration; + import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; import lombok.extern.slf4j.Slf4j; + import org.springframework.amqp.AmqpRejectAndDontRequeueException; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; @@ -35,7 +37,7 @@ public class RedactionResultMessageReceiver { // This prevents from endless retries oom errors. if (message.getMessageProperties().isRedelivered()) { throw new AmqpRejectAndDontRequeueException(String.format("Error during last processing of request with downloadId: %s, do not retry.", - redactionResultMessage.getDownloadId())); + redactionResultMessage.getDownloadId())); } receive(redactionResultMessage); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java index 385bcd56e..70738739d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java @@ -32,9 +32,11 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatusValue; + import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; + import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; @@ -108,51 +110,54 @@ public class DossierTemplateExportService { try (FileSystemBackedArchiver fileSystemBackedArchiver = new FileSystemBackedArchiver()) { // add dossier template name and meta data fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.DOSSIER_TEMPLATE_META, JSON_EXT), - objectMapper.writeValueAsBytes(convert(dossierTemplate, DossierTemplate.class)))); + getFilename(ExportFilename.DOSSIER_TEMPLATE_META, JSON_EXT), + objectMapper.writeValueAsBytes(convert(dossierTemplate, DossierTemplate.class)))); //add watermark json file var watermarkList = watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.WATERMARK, JSON_EXT), - objectMapper.writeValueAsBytes(convert(watermarkList, WatermarkModel.class)))); + getFilename(ExportFilename.WATERMARK, JSON_EXT), + objectMapper.writeValueAsBytes(convert(watermarkList, WatermarkModel.class)))); //add colors json file var colors = colorsService.getColors(dossierTemplateId); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.COLORS, JSON_EXT), - objectMapper.writeValueAsBytes(convert(colors, Colors.class)))); + getFilename(ExportFilename.COLORS, JSON_EXT), + objectMapper.writeValueAsBytes(convert(colors, Colors.class)))); // add dossier statuses var dossierStatusList = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.DOSSIER_STATUS, JSON_EXT), - objectMapper.writeValueAsBytes(convert(dossierStatusList, DossierStatusInfo.class)))); + getFilename(ExportFilename.DOSSIER_STATUS, JSON_EXT), + objectMapper.writeValueAsBytes(convert(dossierStatusList, DossierStatusInfo.class)))); // add dossier attributes config json var dossierAttributesConfig = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.DOSSIER_ATTRIBUTES_CONFIG, JSON_EXT), - objectMapper.writeValueAsBytes(convert(dossierAttributesConfig, DossierAttributeConfig.class)))); + getFilename(ExportFilename.DOSSIER_ATTRIBUTES_CONFIG, JSON_EXT), + objectMapper.writeValueAsBytes(convert(dossierAttributesConfig, + DossierAttributeConfig.class)))); // add file attribute configs var fileAttributeConfigList = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.FILE_ATTRIBUTE_CONFIG, JSON_EXT), - objectMapper.writeValueAsBytes(convert(fileAttributeConfigList, FileAttributeConfig.class)))); + getFilename(ExportFilename.FILE_ATTRIBUTE_CONFIG, JSON_EXT), + objectMapper.writeValueAsBytes(convert(fileAttributeConfigList, + FileAttributeConfig.class)))); // add legal basis mapping var legalBasisMappingList = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.LEGAL_BASIS, JSON_EXT), - objectMapper.writeValueAsBytes(convert(legalBasisMappingList, LegalBasis.class)))); + getFilename(ExportFilename.LEGAL_BASIS, JSON_EXT), + objectMapper.writeValueAsBytes(convert(legalBasisMappingList, LegalBasis.class)))); // add file attributes general configuration try { var fileAttributesGeneralConfig = fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplateId); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.FILE_ATTRIBUTE_GENERAL_CONFIG, JSON_EXT), - objectMapper.writeValueAsBytes(convert(fileAttributesGeneralConfig, FileAttributesGeneralConfiguration.class)))); + getFilename(ExportFilename.FILE_ATTRIBUTE_GENERAL_CONFIG, JSON_EXT), + objectMapper.writeValueAsBytes(convert(fileAttributesGeneralConfig, + FileAttributesGeneralConfiguration.class)))); } catch (NotFoundException e) { log.debug("file attributes general config not found"); } @@ -160,15 +165,15 @@ public class DossierTemplateExportService { // add rule set var ruleSet = rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.ENTITY); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.RULES, RULE_EXT), - ruleSet.getValue().getBytes(StandardCharsets.UTF_8))); + getFilename(ExportFilename.RULES, RULE_EXT), + ruleSet.getValue().getBytes(StandardCharsets.UTF_8))); // add component rule set try { var componentRuleSet = rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.COMPONENT_RULES, RULE_EXT), - componentRuleSet.getValue().getBytes(StandardCharsets.UTF_8))); + getFilename(ExportFilename.COMPONENT_RULES, RULE_EXT), + componentRuleSet.getValue().getBytes(StandardCharsets.UTF_8))); } catch (NotFoundException e) { log.debug("No component rules present."); } @@ -176,13 +181,14 @@ public class DossierTemplateExportService { //N files with the related report templates var reportTemplateList = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplate.getId()); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.REPORT_TEMPLATE, JSON_EXT), - objectMapper.writeValueAsBytes(convert(reportTemplateList, ReportTemplate.class)))); + getFilename(ExportFilename.REPORT_TEMPLATE, JSON_EXT), + objectMapper.writeValueAsBytes(convert(reportTemplateList, ReportTemplate.class)))); reportTemplateList.forEach(reportTemplate -> { var report = fileManagementStorageService.getStoredObjectBytes(reportTemplate.getStorageId()); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - reportTemplate.isMultiFileReport() ? reportTemplate.getFileName() + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : reportTemplate.getFileName(), - report)); + reportTemplate.isMultiFileReport() ? reportTemplate.getFileName() + + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : reportTemplate.getFileName(), + report)); }); // for every type 1 folder with: // 1 json file containing meta info of the type @@ -193,8 +199,8 @@ public class DossierTemplateExportService { for (TypeEntity typeEntity : dossierTypes) { // log.info("type: " + typeEntity.getType() + " " + typeEntity.getDossierId() + " " + typeEntity.isDeleted()); fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(typeEntity.getType(), - getFilename(ExportFilename.DOSSIER_TYPE, JSON_EXT), - objectMapper.writeValueAsBytes(convert(typeEntity, Type.class)))); + getFilename(ExportFilename.DOSSIER_TYPE, JSON_EXT), + objectMapper.writeValueAsBytes(convert(typeEntity, Type.class)))); var entriesValuesList = entryPersistenceService.getEntries(typeEntity.getId(), DictionaryEntryType.ENTRY, null) .stream() @@ -240,9 +246,9 @@ public class DossierTemplateExportService { private void writeEntriesListToFile(FileSystemBackedArchiver fileSystemBackedArchiver, List entriesValuesList, String folderName, String filename) { - try (ByteArrayOutputStream bt = new ByteArrayOutputStream(); - OutputStreamWriter osw = new OutputStreamWriter(bt, StandardCharsets.UTF_8); - BufferedWriter writer = new BufferedWriter(osw)) { + try (ByteArrayOutputStream bt = new ByteArrayOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(bt, + StandardCharsets.UTF_8); BufferedWriter writer = new BufferedWriter( + osw)) { Iterator iterator = entriesValuesList.iterator(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AnalysisFlagCalculationSchedulerJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AnalysisFlagCalculationSchedulerJob.java index c5dd316c3..1b48d94d7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AnalysisFlagCalculationSchedulerJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AnalysisFlagCalculationSchedulerJob.java @@ -29,8 +29,7 @@ import lombok.extern.slf4j.Slf4j; @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) /* * This Job checks if there might be a change in the analysis flags and then schedules a flag calculation using a queue to balance the load. - */ -public class AnalysisFlagCalculationSchedulerJob implements Job { + */ public class AnalysisFlagCalculationSchedulerJob implements Job { FileStatusService fileStatusService; RabbitTemplate rabbitTemplate; @@ -40,20 +39,22 @@ public class AnalysisFlagCalculationSchedulerJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - tenantProvider.getTenants().forEach(tenant -> { - if (isTenantReadyForPersistence(tenant)) { - TenantContext.setTenantId(tenant.getTenantId()); - log.debug("Detecting Files for analysis flag calculation. Tenant: {}", tenant.getDisplayName()); + tenantProvider.getTenants() + .forEach(tenant -> { + if (isTenantReadyForPersistence(tenant)) { + TenantContext.setTenantId(tenant.getTenantId()); + log.debug("Detecting Files for analysis flag calculation. Tenant: {}", tenant.getDisplayName()); - Set fileIdentifiers = fileStatusService.getFileIdentifiersWhereAnalysisFlagCalculationIsRequired(); + Set fileIdentifiers = fileStatusService.getFileIdentifiersWhereAnalysisFlagCalculationIsRequired(); - log.debug("Found {} files which require analysis flag calculation. Tenant: {}", fileIdentifiers.size(), tenant.getDisplayName()); + log.debug("Found {} files which require analysis flag calculation. Tenant: {}", fileIdentifiers.size(), tenant.getDisplayName()); - fileIdentifiers.forEach(fileIdentifier -> rabbitTemplate.convertAndSend(MessagingConfiguration.ANALYSIS_FLAG_CALCULATION_QUEUE, - new AnalysisFlagCalculationMessage(fileIdentifier.dossierId(), fileIdentifier.fileId()))); - TenantContext.clear(); - } - }); + fileIdentifiers.forEach(fileIdentifier -> rabbitTemplate.convertAndSend(MessagingConfiguration.ANALYSIS_FLAG_CALCULATION_QUEUE, + new AnalysisFlagCalculationMessage(fileIdentifier.dossierId(), + fileIdentifier.fileId()))); + TenantContext.clear(); + } + }); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java index 80a04dd77..26a23fc80 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java @@ -49,49 +49,50 @@ public class AutomaticAnalysisJob implements Job { return; } - tenantProvider.getTenants().forEach(tenant -> { + tenantProvider.getTenants() + .forEach(tenant -> { - if (!TenantUtils.isTenantReadyForPersistence(tenant) || stoppedTenants.contains(tenant.getTenantId())) { - return; - } - - TenantContext.setTenantId(tenant.getTenantId()); - - var redactionQueueInfo = amqpAdmin.getQueueInfo(MessagingConfiguration.REDACTION_QUEUE); - if (redactionQueueInfo != null) { - log.debug("[Tenant:{}] Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", - tenant.getTenantId(), - MessagingConfiguration.REDACTION_QUEUE, - redactionQueueInfo.getMessageCount(), - redactionQueueInfo.getConsumerCount()); - // only 1 file in queue - var consumerCount = redactionQueueInfo.getConsumerCount(); - if (redactionQueueInfo.getMessageCount() <= consumerCount * 5) { - // queue up 5 files - var allStatuses = getAllRelevantStatuses(); - - allStatuses.sort(Comparator.comparing(FileModel::getLastUpdated)); - - var allStatusesIterator = allStatuses.iterator(); - log.debug("[Tenant:{}] Files that require reanalysis: {}", TenantContext.getTenantId(), allStatuses.size()); - - var queuedFiles = 0; - - while (queuedFiles < (consumerCount * 5) && allStatusesIterator.hasNext()) { - var next = allStatusesIterator.next(); - // in case the file doesn't have numberOfPages set, we assume an average. - - reanalyseFile(next); - - queuedFiles++; + if (!TenantUtils.isTenantReadyForPersistence(tenant) || stoppedTenants.contains(tenant.getTenantId())) { + return; } - } - } else { - log.info("[Tenant:{}] Failed to obtain queue info for queue: {}", TenantContext.getTenantId(), MessagingConfiguration.REDACTION_QUEUE); - } + TenantContext.setTenantId(tenant.getTenantId()); - }); + var redactionQueueInfo = amqpAdmin.getQueueInfo(MessagingConfiguration.REDACTION_QUEUE); + if (redactionQueueInfo != null) { + log.debug("[Tenant:{}] Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", + tenant.getTenantId(), + MessagingConfiguration.REDACTION_QUEUE, + redactionQueueInfo.getMessageCount(), + redactionQueueInfo.getConsumerCount()); + // only 1 file in queue + var consumerCount = redactionQueueInfo.getConsumerCount(); + if (redactionQueueInfo.getMessageCount() <= consumerCount * 5) { + // queue up 5 files + var allStatuses = getAllRelevantStatuses(); + + allStatuses.sort(Comparator.comparing(FileModel::getLastUpdated)); + + var allStatusesIterator = allStatuses.iterator(); + log.debug("[Tenant:{}] Files that require reanalysis: {}", TenantContext.getTenantId(), allStatuses.size()); + + var queuedFiles = 0; + + while (queuedFiles < (consumerCount * 5) && allStatusesIterator.hasNext()) { + var next = allStatusesIterator.next(); + // in case the file doesn't have numberOfPages set, we assume an average. + + reanalyseFile(next); + + queuedFiles++; + } + } + + } else { + log.info("[Tenant:{}] Failed to obtain queue info for queue: {}", TenantContext.getTenantId(), MessagingConfiguration.REDACTION_QUEUE); + } + + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java index 7f9e45623..01ea1e5c7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java @@ -34,38 +34,39 @@ public class DeletedFilesCleanupJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) { - tenantProvider.getTenants().forEach(tenant -> { + tenantProvider.getTenants() + .forEach(tenant -> { - if(!TenantUtils.isTenantReadyForPersistence(tenant)){ - return; - } - - TenantContext.setTenantId(tenant.getTenantId()); - - var now = OffsetDateTime.now(); - List dossiers = dossierService.getAllDossiers(); - var applicationConfigurationEntity = applicationConfigService.getApplicationConfig(); - - for (DossierEntity dossierEntity : dossiers) { - if (dossierEntity.getSoftDeletedTime() != null && dossierEntity.getHardDeletedTime() == null) { - if (dossierEntity.getSoftDeletedTime().isBefore(now.minusHours(applicationConfigurationEntity.getSoftDeleteCleanupTime()))) { - dossierService.hardDeleteDossier(dossierEntity.getId()); - log.info("Hard deleted dossier with dossier id {} ", dossierEntity.getId()); + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; } - } else { - var files = fileStatusService.getDossierStatus(dossierEntity.getId()); - for (var file : files) { - if (file.getHardDeletedTime() == null && file.getDeleted() != null && file.getDeleted() - .isBefore(now.minusHours(applicationConfigurationEntity.getSoftDeleteCleanupTime()))) { - fileService.hardDeleteFile(dossierEntity.getId(), file.getId()); - fileStatusService.setFileStatusHardDeleted(file.getId()); - log.info("Hard deleted file with dossier id {} and file id {}", dossierEntity.getId(), file.getId()); + + TenantContext.setTenantId(tenant.getTenantId()); + + var now = OffsetDateTime.now(); + List dossiers = dossierService.getAllDossiers(); + var applicationConfigurationEntity = applicationConfigService.getApplicationConfig(); + + for (DossierEntity dossierEntity : dossiers) { + if (dossierEntity.getSoftDeletedTime() != null && dossierEntity.getHardDeletedTime() == null) { + if (dossierEntity.getSoftDeletedTime().isBefore(now.minusHours(applicationConfigurationEntity.getSoftDeleteCleanupTime()))) { + dossierService.hardDeleteDossier(dossierEntity.getId()); + log.info("Hard deleted dossier with dossier id {} ", dossierEntity.getId()); + } + } else { + var files = fileStatusService.getDossierStatus(dossierEntity.getId()); + for (var file : files) { + if (file.getHardDeletedTime() == null && file.getDeleted() != null && file.getDeleted() + .isBefore(now.minusHours(applicationConfigurationEntity.getSoftDeleteCleanupTime()))) { + fileService.hardDeleteFile(dossierEntity.getId(), file.getId()); + fileStatusService.setFileStatusHardDeleted(file.getId()); + log.info("Hard deleted file with dossier id {} and file id {}", dossierEntity.getId(), file.getId()); + } + } } } - } - } - }); + }); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java index c742932bc..0a81e3998 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java @@ -33,45 +33,46 @@ public class DownloadCleanupJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) { - tenantProvider.getTenants().forEach(tenant -> { + tenantProvider.getTenants() + .forEach(tenant -> { - if(!TenantUtils.isTenantReadyForPersistence(tenant)){ - return; - } + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; + } - TenantContext.setTenantId(tenant.getTenantId()); + TenantContext.setTenantId(tenant.getTenantId()); - var now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); - log.info("Checking for downloads to delete at {}", now); - List downloadStatusList = downloadStatusPersistenceService.getStatus(); - downloadStatusList.forEach(downloadStatus -> { + var now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); + log.info("Checking for downloads to delete at {}", now); + List downloadStatusList = downloadStatusPersistenceService.getStatus(); + downloadStatusList.forEach(downloadStatus -> { - var dossier = downloadStatus.getDossier(); - var applicationConfigurationEntity = applicationConfigService.getApplicationConfig(); - if (downloadStatus.getLastDownload() != null && downloadStatus.getLastDownload() - .plusHours(applicationConfigurationEntity.getDownloadCleanupDownloadFilesHours()) - .isBefore(now)) { - log.info("1. Deleting download status {} because DownloadCleanupDownloadFilesHours is {} and c+h {} is after {}", - downloadStatus, - applicationConfigurationEntity.getDownloadCleanupDownloadFilesHours(), - downloadStatus.getCreationDate().plusHours(applicationConfigurationEntity.getDownloadCleanupDownloadFilesHours()), - now); - deleteDownload(downloadStatus); - } else if (downloadStatus.getLastDownload() == null && downloadStatus.getCreationDate() - .plusHours(applicationConfigurationEntity.getDownloadCleanupNotDownloadFilesHours()) - .isBefore(now)) { - log.info("2. Deleting download status {} because DownloadCleanupNotDownloadFilesHours is {} and c+h {} is after {}", - downloadStatus, - applicationConfigurationEntity.getDownloadCleanupNotDownloadFilesHours(), - downloadStatus.getCreationDate().plusHours(applicationConfigurationEntity.getDownloadCleanupNotDownloadFilesHours()), - now); - deleteDownload(downloadStatus); - } else if (dossier != null && dossier.getSoftDeletedTime() != null) { - log.info("3. Deleting download {}, because dossier does not exist", downloadStatus.getStorageId()); - deleteDownload(downloadStatus); - } - }); - }); + var dossier = downloadStatus.getDossier(); + var applicationConfigurationEntity = applicationConfigService.getApplicationConfig(); + if (downloadStatus.getLastDownload() != null && downloadStatus.getLastDownload() + .plusHours(applicationConfigurationEntity.getDownloadCleanupDownloadFilesHours()) + .isBefore(now)) { + log.info("1. Deleting download status {} because DownloadCleanupDownloadFilesHours is {} and c+h {} is after {}", + downloadStatus, + applicationConfigurationEntity.getDownloadCleanupDownloadFilesHours(), + downloadStatus.getCreationDate().plusHours(applicationConfigurationEntity.getDownloadCleanupDownloadFilesHours()), + now); + deleteDownload(downloadStatus); + } else if (downloadStatus.getLastDownload() == null && downloadStatus.getCreationDate() + .plusHours(applicationConfigurationEntity.getDownloadCleanupNotDownloadFilesHours()) + .isBefore(now)) { + log.info("2. Deleting download status {} because DownloadCleanupNotDownloadFilesHours is {} and c+h {} is after {}", + downloadStatus, + applicationConfigurationEntity.getDownloadCleanupNotDownloadFilesHours(), + downloadStatus.getCreationDate().plusHours(applicationConfigurationEntity.getDownloadCleanupNotDownloadFilesHours()), + now); + deleteDownload(downloadStatus); + } else if (dossier != null && dossier.getSoftDeletedTime() != null) { + log.info("3. Deleting download {}, because dossier does not exist", downloadStatus.getStorageId()); + deleteDownload(downloadStatus); + } + }); + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java index 3bf389f5e..6f8c2924c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java @@ -33,39 +33,41 @@ public class SendNotificationEmailJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) { - tenantProvider.getTenants().forEach(tenant -> { - - if(!TenantUtils.isTenantReadyForPersistence(tenant)){ - return; - } - - TenantContext.setTenantId(tenant.getTenantId()); - - var allConfiguredPreferences = notificationPreferencesPersistenceService.findAll(); - allConfiguredPreferences.forEach(preference -> { - if (preference.isEmailNotificationsEnabled() && preference.getEmailNotificationType() == EmailNotificationType.WEEKLY_SUMMARY || preference.getEmailNotificationType() == EmailNotificationType.DAILY_SUMMARY) { - - var now = OffsetDateTime.now().truncatedTo(ChronoUnit.HOURS); - - // Weekly summary is sent monday night - if (now.getDayOfWeek() == DayOfWeek.MONDAY && preference.getEmailNotificationType() == EmailNotificationType.WEEKLY_SUMMARY) { - var from = OffsetDateTime.now().minusDays(7).truncatedTo(ChronoUnit.HOURS).withHour(0); - var to = OffsetDateTime.now().truncatedTo(ChronoUnit.HOURS).withHour(0); - var notifications = notificationPersistenceService.getNotificationsForEmailSummary(preference.getUserId(), from, to); - - notificationEmailService.sendNotificationEmail(preference.getUserId(), EmailNotificationType.WEEKLY_SUMMARY, notifications); - } else { - var from = OffsetDateTime.now().minusDays(1).withHour(0).truncatedTo(ChronoUnit.HOURS); - var to = OffsetDateTime.now().minusDays(1).withHour(23).truncatedTo(ChronoUnit.HOURS); - var notifications = notificationPersistenceService.getNotificationsForEmailSummary(preference.getUserId(), from, to); - - notificationEmailService.sendNotificationEmail(preference.getUserId(), EmailNotificationType.DAILY_SUMMARY, notifications); + tenantProvider.getTenants() + .forEach(tenant -> { + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; } - } - }); - }); + TenantContext.setTenantId(tenant.getTenantId()); + + var allConfiguredPreferences = notificationPreferencesPersistenceService.findAll(); + allConfiguredPreferences.forEach(preference -> { + if (preference.isEmailNotificationsEnabled() && preference.getEmailNotificationType() == EmailNotificationType.WEEKLY_SUMMARY + || preference.getEmailNotificationType() == EmailNotificationType.DAILY_SUMMARY) { + + var now = OffsetDateTime.now().truncatedTo(ChronoUnit.HOURS); + + // Weekly summary is sent monday night + if (now.getDayOfWeek() == DayOfWeek.MONDAY && preference.getEmailNotificationType() == EmailNotificationType.WEEKLY_SUMMARY) { + var from = OffsetDateTime.now().minusDays(7).truncatedTo(ChronoUnit.HOURS).withHour(0); + var to = OffsetDateTime.now().truncatedTo(ChronoUnit.HOURS).withHour(0); + var notifications = notificationPersistenceService.getNotificationsForEmailSummary(preference.getUserId(), from, to); + + notificationEmailService.sendNotificationEmail(preference.getUserId(), EmailNotificationType.WEEKLY_SUMMARY, notifications); + } else { + var from = OffsetDateTime.now().minusDays(1).withHour(0).truncatedTo(ChronoUnit.HOURS); + var to = OffsetDateTime.now().minusDays(1).withHour(23).truncatedTo(ChronoUnit.HOURS); + var notifications = notificationPersistenceService.getNotificationsForEmailSummary(preference.getUserId(), from, to); + + notificationEmailService.sendNotificationEmail(preference.getUserId(), EmailNotificationType.DAILY_SUMMARY, notifications); + + } + + } + }); + }); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java index 63ed45479..9112b6895 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SyncUserPermissionsJob.java @@ -27,15 +27,17 @@ public class SyncUserPermissionsJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { - var singleTenant = context.getJobDetail().getJobDataMap() != null ? context.getJobDetail().getJobDataMap().get("tenantId") : null; - tenantProvider.getTenants().forEach(tenant -> { - // if it's for a single tenant run only for that one, else run it for all tenants - if (isTenantReadyForPersistence(tenant) && (tenant.getTenantId().equals(singleTenant) || singleTenant == null)) { - TenantContext.setTenantId(tenant.getTenantId()); - customPermissionService.syncAllCustomPermissions(); - TenantContext.clear(); - } - }); + var singleTenant = context.getJobDetail().getJobDataMap() != null ? context.getJobDetail().getJobDataMap() + .get("tenantId") : null; + tenantProvider.getTenants() + .forEach(tenant -> { + // if it's for a single tenant run only for that one, else run it for all tenants + if (isTenantReadyForPersistence(tenant) && (tenant.getTenantId().equals(singleTenant) || singleTenant == null)) { + TenantContext.setTenantId(tenant.getTenantId()); + customPermissionService.syncAllCustomPermissions(); + TenantContext.clear(); + } + }); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java index fb6496b63..7134cb1c2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java @@ -69,17 +69,17 @@ public class ManualRedactionDictionaryUpdateHandler { Set typeIdsOfModifiedDictionaries) { List dictionaryEntriesToUnDelete = dictionaryManagementService.getAllEntriesInDossierTemplate(manualRequestWithAddToDictionary.getDossierTemplateTypeId(), - value, - manualRequestWithAddToDictionary.getDictionaryEntryType()); + value, + manualRequestWithAddToDictionary.getDictionaryEntryType()); dictionaryEntriesToUnDelete.forEach(entry -> { typeIdsOfModifiedDictionaries.add(entry.getTypeId()); addToDictionary(entry.getTypeId(), value, manualRequestWithAddToDictionary.getDossierId(), fileId, manualRequestWithAddToDictionary.getDictionaryEntryType()); }); addToDictionary(manualRequestWithAddToDictionary.getDossierTemplateTypeId(), - value, - manualRequestWithAddToDictionary.getDossierId(), - fileId, - manualRequestWithAddToDictionary.getDictionaryEntryType()); + value, + manualRequestWithAddToDictionary.getDossierId(), + fileId, + manualRequestWithAddToDictionary.getDictionaryEntryType()); typeIdsOfModifiedDictionaries.add(manualRequestWithAddToDictionary.getDossierTemplateTypeId()); return typeIdsOfModifiedDictionaries; } @@ -109,14 +109,14 @@ public class ManualRedactionDictionaryUpdateHandler { Set typeIdsOfModifiedDictionaries = new HashSet<>(); String dossierTemplateDictionaryTypeId = toTypeId(manualRequestWithRemoveFromDictionary.getTypeToRemove(), manualRequestWithRemoveFromDictionary.getDossierTemplateId()); String dossierDictionaryTypeId = toTypeId(manualRequestWithRemoveFromDictionary.getTypeToRemove(), - manualRequestWithRemoveFromDictionary.getDossierTemplateId(), - manualRequestWithRemoveFromDictionary.getDossierId()); + manualRequestWithRemoveFromDictionary.getDossierTemplateId(), + manualRequestWithRemoveFromDictionary.getDossierId()); if (manualRequestWithRemoveFromDictionary.isRemoveFromAllDossiers()) { var dictionaryEntriesToRemove = dictionaryManagementService.getAllEntriesInDossierTemplate(dossierTemplateDictionaryTypeId, - manualRequestWithRemoveFromDictionary.getValue(), - dictionaryEntryType); + manualRequestWithRemoveFromDictionary.getValue(), + dictionaryEntryType); dictionaryEntriesToRemove.forEach(entry -> { typeIdsOfModifiedDictionaries.add(entry.getTypeId()); @@ -207,10 +207,10 @@ public class ManualRedactionDictionaryUpdateHandler { } revertAddToDictionary(manualRedactionToRevert.getValue(), - manualRedactionToRevert.getDictionaryEntryType(), - fileId, - dossierId, - manualRedactionToRevert.getTypeIdsOfModifiedDictionaries()); + manualRedactionToRevert.getDictionaryEntryType(), + fileId, + dossierId, + manualRedactionToRevert.getTypeIdsOfModifiedDictionaries()); return true; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java index 30d786af0..83a314bae 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java @@ -157,7 +157,8 @@ public class ManualRedactionMapper { .value(entityLogEntry.getValue()) .typeToRemove(entityLogEntry.getType()) .dossierTemplateTypeId(toTypeId(recategorizationRequest.getType(), dossierTemplateId)) - .legalBasis(Optional.ofNullable(recategorizationRequest.getLegalBasis()).orElse("")) + .legalBasis(Optional.ofNullable(recategorizationRequest.getLegalBasis()) + .orElse("")) .build(); requests.add(build); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionUndoService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionUndoService.java index 737d10d2b..d753850c1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionUndoService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionUndoService.java @@ -117,12 +117,17 @@ public class ManualRedactionUndoService { if (!manualResizeRedactions.isEmpty()) { deleteResizeRedaction(dossierId, fileId, manualResizeRedactions); manualResizeRedactions.forEach(annotationId -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Undo of manual resize redaction was done.") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Undo of manual resize redaction was done.") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + ANNOTATION_ID, + annotationId)) + .build())); } } @@ -148,12 +153,17 @@ public class ManualRedactionUndoService { deleteLegalBasisChange(dossierId, fileId, manualLegalBasisChanges); manualLegalBasisChanges.forEach(annotationId -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Undo of legal basis change was done.") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Undo of legal basis change was done.") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + ANNOTATION_ID, + annotationId)) + .build())); } } @@ -178,12 +188,17 @@ public class ManualRedactionUndoService { deleteRecategorization(dossierId, fileId, manualImageRecategorizations, includeUnprocessed); manualImageRecategorizations.forEach(annotationId -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Undo of manual image recategorization was done.") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Undo of manual image recategorization was done.") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + ANNOTATION_ID, + annotationId)) + .build())); } } @@ -198,10 +213,10 @@ public class ManualRedactionUndoService { String originalValue = getEntityLogEntry(entityLog, annotationId).getValue(); manualRedactionDictionaryUpdateHandler.revertRemoveFromDictionary(originalValue, dossierId, fileId, recategorizationEntity.getTypeIdsOfDictionariesWithDelete()); manualRedactionDictionaryUpdateHandler.revertAddToDictionary(originalValue, - DictionaryEntryType.ENTRY, - fileId, - dossierId, - recategorizationEntity.getTypeIdsOfDictionariesWithAdd()); + DictionaryEntryType.ENTRY, + fileId, + dossierId, + recategorizationEntity.getTypeIdsOfDictionariesWithAdd()); recategorizationPersistenceService.updateModifiedDictionaries(fileId, annotationId, Collections.emptySet(), Collections.emptySet()); recategorizationPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); } @@ -220,12 +235,17 @@ public class ManualRedactionUndoService { deleteForceRedaction(dossierId, fileId, manualForceRedactions); manualForceRedactions.forEach(annotationId -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Undo of manual force redaction was done.") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Undo of manual force redaction was done.") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + ANNOTATION_ID, + annotationId)) + .build())); } } @@ -251,12 +271,12 @@ public class ManualRedactionUndoService { if (!idRemovals.isEmpty()) { deleteRemoveRedaction(dossierId, fileId, idRemovals); idRemovals.forEach(annotationId -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Undo of manual remove redaction was done.") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Undo of manual remove redaction was done.") + .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) + .build())); } } @@ -288,12 +308,17 @@ public class ManualRedactionUndoService { if (!manualRedactionEntries.isEmpty()) { deleteAddRedaction(dossierId, fileId, manualRedactionEntries); manualRedactionEntries.forEach(annotationId -> auditPersistenceService.audit(AuditRequest.builder() - .userId(KeycloakSecurity.getUserId()) - .objectId(fileId) - .category(AuditCategory.DOCUMENT.name()) - .message("Undo of manual add redaction was done.") - .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, annotationId)) - .build())); + .userId(KeycloakSecurity.getUserId()) + .objectId(fileId) + .category(AuditCategory.DOCUMENT.name()) + .message("Undo of manual add redaction was done.") + .details(Map.of(DOSSIER_ID, + dossierId, + FILE_ID, + fileId, + ANNOTATION_ID, + annotationId)) + .build())); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index 5ae268f8c..e0beee098 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -104,37 +104,41 @@ public class DictionaryPersistenceService { @Transactional public void updateType(String typeId, TypeEntity typeValueRequest) { - typeRepository.findById(typeId).ifPresent(type -> { + typeRepository.findById(typeId) + .ifPresent(type -> { // if (type.isDeleted()) { // throw new NotFoundException("Type is deleted!"); // } - type.setVersion(type.getVersion() + 1); - checkRankAlreadyExists(type.getType(), type.getDossierTemplate().getId(), typeValueRequest.getRank(), type.getDossier() == null ? null : type.getDossier().getId()); - if (type.isSystemManaged()) { - type.setHexColor(typeValueRequest.getHexColor()); - type.setRecommendationHexColor(typeValueRequest.getRecommendationHexColor()); - type.setSkippedHexColor(typeValueRequest.getSkippedHexColor()); - type.setDescription(typeValueRequest.getDescription()); - type.setLabel(typeValueRequest.getLabel()); - type.setAddToDictionaryAction(typeValueRequest.isAddToDictionaryAction()); - } else { - BeanUtils.copyProperties(typeValueRequest, - type, - "type", - "dossierTemplateId", - "dossierId", - "entries", - "falsePositiveEntries", - "falseRecommendationEntries", - "dossierTemplate", - "dossier", - "id", - "version", - "dossierDictionaryOnly"); - } - typeRepository.save(type); - }); + type.setVersion(type.getVersion() + 1); + checkRankAlreadyExists(type.getType(), + type.getDossierTemplate().getId(), + typeValueRequest.getRank(), + type.getDossier() == null ? null : type.getDossier().getId()); + if (type.isSystemManaged()) { + type.setHexColor(typeValueRequest.getHexColor()); + type.setRecommendationHexColor(typeValueRequest.getRecommendationHexColor()); + type.setSkippedHexColor(typeValueRequest.getSkippedHexColor()); + type.setDescription(typeValueRequest.getDescription()); + type.setLabel(typeValueRequest.getLabel()); + type.setAddToDictionaryAction(typeValueRequest.isAddToDictionaryAction()); + } else { + BeanUtils.copyProperties(typeValueRequest, + type, + "type", + "dossierTemplateId", + "dossierId", + "entries", + "falsePositiveEntries", + "falseRecommendationEntries", + "dossierTemplate", + "dossier", + "id", + "version", + "dossierDictionaryOnly"); + } + typeRepository.save(type); + }); } @@ -148,7 +152,9 @@ public class DictionaryPersistenceService { private List filterDeleted(List types, boolean includeDeleted) { if (!includeDeleted) { - return types.stream().filter(t -> !t.isDeleted()).collect(Collectors.toList()); + return types.stream() + .filter(t -> !t.isDeleted()) + .collect(Collectors.toList()); } else { return types; } @@ -193,9 +199,11 @@ public class DictionaryPersistenceService { public TypeEntity getType(String typeId, boolean includeDeleted) { if (includeDeleted) { - return typeRepository.findById(typeId).orElseThrow(() -> new NotFoundException("Type: " + typeId + " not found")); + return typeRepository.findById(typeId) + .orElseThrow(() -> new NotFoundException("Type: " + typeId + " not found")); } - return typeRepository.findByIdAndNotDeleted(typeId).orElseThrow(() -> new NotFoundException("Type: " + typeId + " not found")); + return typeRepository.findByIdAndNotDeleted(typeId) + .orElseThrow(() -> new NotFoundException("Type: " + typeId + " not found")); } @@ -241,20 +249,20 @@ public class DictionaryPersistenceService { checkRankAlreadyExists(typeEntity.get().getType(), newDossierTemplateId, typeEntity.get().getRank(), typeEntity.get().getDossierId()); typeRepository.saveAndFlush(TypeEntity.builder() - .id(newTypeId) - .type(typeEntity.get().getType()) - .dossier(dossierRepository.getOne(typeEntity.get().getDossierId())) - .dossierTemplate(dossierTemplateRepository.getOne(newDossierTemplateId)) - .hexColor(typeEntity.get().getHexColor()) - .rank(typeEntity.get().getRank()) - .description(typeEntity.get().getDescription()) - .isHint(typeEntity.get().isHint()) - .isCaseInsensitive(typeEntity.get().isCaseInsensitive()) - .isRecommendation(typeEntity.get().isRecommendation()) - .addToDictionaryAction(typeEntity.get().isAddToDictionaryAction()) - .label(typeEntity.get().getLabel()) - .version(typeEntity.get().getVersion() + 1) - .build()); + .id(newTypeId) + .type(typeEntity.get().getType()) + .dossier(dossierRepository.getOne(typeEntity.get().getDossierId())) + .dossierTemplate(dossierTemplateRepository.getOne(newDossierTemplateId)) + .hexColor(typeEntity.get().getHexColor()) + .rank(typeEntity.get().getRank()) + .description(typeEntity.get().getDescription()) + .isHint(typeEntity.get().isHint()) + .isCaseInsensitive(typeEntity.get().isCaseInsensitive()) + .isRecommendation(typeEntity.get().isRecommendation()) + .addToDictionaryAction(typeEntity.get().isAddToDictionaryAction()) + .label(typeEntity.get().getLabel()) + .version(typeEntity.get().getVersion() + 1) + .build()); entryRepository.updateTypeIdAndIncrementVersionByOne(typeId, newTypeId); typeRepository.deleteById(typeId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java index cfa4935d0..331de9058 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java @@ -33,9 +33,14 @@ public class DossierAttributeConfigPersistenceService { @Transactional public List setDossierAttributesConfig(String dossierTemplateId, List dossierAttributesConfig) { - Set toSetIds = dossierAttributesConfig.stream().map(DossierAttributeConfigEntity::getId).filter(Objects::nonNull).collect(Collectors.toSet()); + Set toSetIds = dossierAttributesConfig.stream() + .map(DossierAttributeConfigEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); var currentConfigs = dossierAttributeConfigRepository.findAllByDossierTemplateId(dossierTemplateId); - Set configsToRemove = currentConfigs.stream().filter(c -> !toSetIds.contains(c.getId())).collect(Collectors.toSet()); + Set configsToRemove = currentConfigs.stream() + .filter(c -> !toSetIds.contains(c.getId())) + .collect(Collectors.toSet()); dossierAttributesConfig.forEach(fac -> addOrUpdateDossierAttribute(dossierTemplateId, fac)); @@ -96,14 +101,16 @@ public class DossierAttributeConfigPersistenceService { private void uniqueLabelAndPlaceholder(DossierAttributeConfigEntity dossierAttributesConfig) { - getDossierAttributes(dossierAttributesConfig.getDossierTemplate().getId()).stream().filter(d -> !d.getId().equals(dossierAttributesConfig.getId())).forEach(other -> { - if (other.getLabel().equalsIgnoreCase(dossierAttributesConfig.getLabel())) { - throw new ConflictException("Label already exists."); - } - if (other.getPlaceholder().equalsIgnoreCase(dossierAttributesConfig.getPlaceholder())) { - throw new ConflictException("Placeholder already exists. " + dossierAttributesConfig.getPlaceholder()); - } - }); + getDossierAttributes(dossierAttributesConfig.getDossierTemplate().getId()).stream() + .filter(d -> !d.getId().equals(dossierAttributesConfig.getId())) + .forEach(other -> { + if (other.getLabel().equalsIgnoreCase(dossierAttributesConfig.getLabel())) { + throw new ConflictException("Label already exists."); + } + if (other.getPlaceholder().equalsIgnoreCase(dossierAttributesConfig.getPlaceholder())) { + throw new ConflictException("Placeholder already exists. " + dossierAttributesConfig.getPlaceholder()); + } + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java index ac2ec9e67..541df78b9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java @@ -35,7 +35,7 @@ public class DossierAttributePersistenceService { public void updateDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) { dossierAttributeRepository.updateDossierAttribute(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId), - StringUtils.isBlank(dossierAttributeValue) ? null : dossierAttributeValue); + StringUtils.isBlank(dossierAttributeValue) ? null : dossierAttributeValue); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java index 294312a53..65ac2ac91 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java @@ -48,10 +48,10 @@ public class DossierStatusPersistenceService { Optional dossierStatus = dossierStatusRepository.findById(createOrUpdateDossierStatusRequest.getDossierStatusId()); if (dossierStatus.isPresent()) { validateDossierStatusForTemplate(createOrUpdateDossierStatusRequest.getName(), - createOrUpdateDossierStatusRequest.getDossierTemplateId(), - createOrUpdateDossierStatusRequest.getDossierStatusId()); - if (createOrUpdateDossierStatusRequest.getRank() != dossierStatus.get().getRank() && dossierStatusRepository.getDuplicateRanks(dossierStatus.get() - .getDossierTemplateId(), createOrUpdateDossierStatusRequest.getRank()) > 0) { + createOrUpdateDossierStatusRequest.getDossierTemplateId(), + createOrUpdateDossierStatusRequest.getDossierStatusId()); + if (createOrUpdateDossierStatusRequest.getRank() != dossierStatus.get().getRank() + && dossierStatusRepository.getDuplicateRanks(dossierStatus.get().getDossierTemplateId(), createOrUpdateDossierStatusRequest.getRank()) > 0) { // in case of duplicate ranks, increase the ranks dossierStatusRepository.adjustRanksForDossierTemplate(dossierStatus.get().getDossierTemplateId(), createOrUpdateDossierStatusRequest.getRank()); } @@ -118,7 +118,8 @@ public class DossierStatusPersistenceService { @Transactional public DossierStatusEntity getDossierStatus(String dossierStatusId) { - return dossierStatusRepository.findById(dossierStatusId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))); + return dossierStatusRepository.findById(dossierStatusId) + .orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))); } @@ -127,7 +128,9 @@ public class DossierStatusPersistenceService { public DossierStatusInfo getDossierStatusInfo(String dossierStatusId) { return MagicConverter.convert(dossierStatusRepository.findById(dossierStatusId) - .orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))), DossierStatusInfo.class, dossierStatusFilteringMapper); + .orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))), + DossierStatusInfo.class, + dossierStatusFilteringMapper); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index bef3a6e94..ec169b9b6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -153,8 +153,8 @@ public class DossierTemplatePersistenceService { } var now = OffsetDateTime.now(); - boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || - !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX); + boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) + || !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX); if (isNotInRange) { return DossierTemplateStatus.INACTIVE; } @@ -204,7 +204,9 @@ public class DossierTemplatePersistenceService { dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> { - var hasNonDeletedDossiers = dossierTemplate.getDossiers().stream().anyMatch(template -> template.getHardDeletedTime() == null); + var hasNonDeletedDossiers = dossierTemplate.getDossiers() + .stream() + .anyMatch(template -> template.getHardDeletedTime() == null); if (hasNonDeletedDossiers) { throw new BadRequestException("Cannot delete dossier template with active dossiers!"); } else { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java index 1d0c6ac1c..4db310d0e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java @@ -70,6 +70,7 @@ public class DownloadStatusPersistenceService { } + @Transactional public void updateStatus(String storageId, DownloadStatusValue status) { @@ -81,7 +82,7 @@ public class DownloadStatusPersistenceService { @Transactional public void updateStatus(DownloadStatusEntity entity, DownloadStatusValue statusValue, long fileSize) { - if(statusValue.equals(DownloadStatusValue.READY)) { + if (statusValue.equals(DownloadStatusValue.READY)) { entity.setErrorCause(""); } @@ -107,7 +108,8 @@ public class DownloadStatusPersistenceService { public DownloadStatusEntity getStatus(String storageId) { - return downloadStatusRepository.findById(storageId).orElseThrow(() -> new NotFoundException(String.format("DownloadStatus not found for storageId: %s", storageId))); + return downloadStatusRepository.findById(storageId) + .orElseThrow(() -> new NotFoundException(String.format("DownloadStatus not found for storageId: %s", storageId))); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java index 38e3a4f14..e3952250c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java @@ -10,9 +10,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.knecon.fforesight.databasetenantcommons.providers.utils.JDBCWriteUtils; + import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -50,15 +52,14 @@ public class EntryPersistenceService { } } + @Transactional public void insertDeleteEntries(String typeId, Set values, long version, DictionaryEntryType dictionaryEntryType) { switch (dictionaryEntryType) { case ENTRY -> entryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); - case FALSE_POSITIVE -> - falsePositiveEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); - case FALSE_RECOMMENDATION -> - falseRecommendationEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); + case FALSE_POSITIVE -> falsePositiveEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); + case FALSE_RECOMMENDATION -> falseRecommendationEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); } } @@ -68,10 +69,8 @@ public class EntryPersistenceService { switch (dictionaryEntryType) { case ENTRY -> entryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); - case FALSE_POSITIVE -> - falsePositiveEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); - case FALSE_RECOMMENDATION -> - falseRecommendationEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); + case FALSE_POSITIVE -> falsePositiveEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); + case FALSE_RECOMMENDATION -> falseRecommendationEntryRepository.deleteAllByTypeIdAndVersionAndValueIn(typeId, values, version); } } @@ -90,12 +89,9 @@ public class EntryPersistenceService { public List getEntries(String typeId, DictionaryEntryType dictionaryEntryType, Long fromVersion) { return switch (dictionaryEntryType) { - case ENTRY -> - entryRepository.findByTypeIdAndVersionGreaterThan(typeId, fromVersion != null ? fromVersion : -1); - case FALSE_POSITIVE -> - falsePositiveEntryRepository.findByTypeIdAndVersionGreaterThan(typeId, fromVersion != null ? fromVersion : -1); - case FALSE_RECOMMENDATION -> - falseRecommendationEntryRepository.findByTypeIdAndVersionGreaterThan(typeId, fromVersion != null ? fromVersion : -1); + case ENTRY -> entryRepository.findByTypeIdAndVersionGreaterThan(typeId, fromVersion != null ? fromVersion : -1); + case FALSE_POSITIVE -> falsePositiveEntryRepository.findByTypeIdAndVersionGreaterThan(typeId, fromVersion != null ? fromVersion : -1); + case FALSE_RECOMMENDATION -> falseRecommendationEntryRepository.findByTypeIdAndVersionGreaterThan(typeId, fromVersion != null ? fromVersion : -1); }; } @@ -110,16 +106,21 @@ public class EntryPersistenceService { } } + @Transactional public void addEntries(String typeId, Set entries, long version, DictionaryEntryType dictionaryEntryType) { + addEntries(typeId, entries, version, dictionaryEntryType, false); } + @Transactional public void addDeleteEntries(String typeId, Set entries, long version, DictionaryEntryType dictionaryEntryType) { + addEntries(typeId, entries, version, dictionaryEntryType, true); } + @Transactional public void addEntries(String typeId, Set entries, long version, DictionaryEntryType dictionaryEntryType, boolean deleted) { @@ -131,15 +132,17 @@ public class EntryPersistenceService { undeletedEntries.forEach(entries::remove); - var entryEntities = entries.stream().map(e -> { - DictionaryEntryEntity entry = new DictionaryEntryEntity(); - entry.setVersion(version); - entry.setValue(e); - entry.setTypeId(type.getId()); - entry.setDeleted(deleted); - return entry; + var entryEntities = entries.stream() + .map(e -> { + DictionaryEntryEntity entry = new DictionaryEntryEntity(); + entry.setVersion(version); + entry.setValue(e); + entry.setTypeId(type.getId()); + entry.setDeleted(deleted); + return entry; - }).collect(Collectors.toList()); + }) + .collect(Collectors.toList()); jdbcWriteUtils.saveBatch(entryEntities); } @@ -147,30 +150,34 @@ public class EntryPersistenceService { var undeletedEntries = falsePositiveEntryRepository.undeleteEntries(typeId, entries, version); undeletedEntries.forEach(entries::remove); - var entryEntities = entries.stream().map(e -> { - DictionaryFalsePositiveEntryEntity entry = new DictionaryFalsePositiveEntryEntity(); - entry.setVersion(version); - entry.setValue(e); - entry.setTypeId(type.getId()); - entry.setDeleted(deleted); - return entry; + var entryEntities = entries.stream() + .map(e -> { + DictionaryFalsePositiveEntryEntity entry = new DictionaryFalsePositiveEntryEntity(); + entry.setVersion(version); + entry.setValue(e); + entry.setTypeId(type.getId()); + entry.setDeleted(deleted); + return entry; - }).collect(Collectors.toList()); + }) + .collect(Collectors.toList()); jdbcWriteUtils.saveBatch(entryEntities); } case FALSE_RECOMMENDATION -> { var undeletedEntries = falseRecommendationEntryRepository.undeleteEntries(typeId, entries, version); undeletedEntries.forEach(entries::remove); - var entryEntities = entries.stream().map(e -> { - DictionaryFalseRecommendationEntryEntity entry = new DictionaryFalseRecommendationEntryEntity(); - entry.setVersion(version); - entry.setValue(e); - entry.setTypeId(type.getId()); - entry.setDeleted(deleted); - return entry; + var entryEntities = entries.stream() + .map(e -> { + DictionaryFalseRecommendationEntryEntity entry = new DictionaryFalseRecommendationEntryEntity(); + entry.setVersion(version); + entry.setValue(e); + entry.setTypeId(type.getId()); + entry.setDeleted(deleted); + return entry; - }).collect(Collectors.toList()); + }) + .collect(Collectors.toList()); jdbcWriteUtils.saveBatch(entryEntities); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java index c7bc68852..739679c89 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java @@ -75,16 +75,22 @@ public class FileAttributeConfigPersistenceService { public FileAttributesGeneralConfigurationEntity getFileAttributesGeneralConfiguration(String dossierTemplateId) { - return fileAttributesGeneralConfigurationRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException("File Attribute Config not found")); + return fileAttributesGeneralConfigurationRepository.findById(dossierTemplateId) + .orElseThrow(() -> new NotFoundException("File Attribute Config not found")); } @Transactional public List setFileAttributesConfig(String dossierTemplateId, List fileAttributesConfig) { - Set toSetIds = fileAttributesConfig.stream().map(FileAttributeConfigEntity::getId).filter(Objects::nonNull).collect(Collectors.toSet()); + Set toSetIds = fileAttributesConfig.stream() + .map(FileAttributeConfigEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); var currentConfigs = fileAttributeConfigRepository.findByDossierTemplateId(dossierTemplateId); - Set configsToRemove = currentConfigs.stream().filter(c -> !toSetIds.contains(c.getId())).collect(Collectors.toSet()); + Set configsToRemove = currentConfigs.stream() + .filter(c -> !toSetIds.contains(c.getId())) + .collect(Collectors.toSet()); fileAttributesConfig.forEach(fac -> addOrUpdateFileAttribute(dossierTemplateId, fac)); @@ -156,14 +162,16 @@ public class FileAttributeConfigPersistenceService { private void uniqueLabelAndPlaceholder(FileAttributeConfigEntity fileAttributeConfig) { - getFileAttributes(fileAttributeConfig.getDossierTemplate().getId()).stream().filter(d -> !d.getId().equals(fileAttributeConfig.getId())).forEach(other -> { - if (other.getLabel().equalsIgnoreCase(fileAttributeConfig.getLabel())) { - throw new ConflictException("Label already exists."); - } - if (other.getPlaceholder().equalsIgnoreCase(fileAttributeConfig.getPlaceholder())) { - throw new ConflictException("Placeholder already exists."); - } - }); + getFileAttributes(fileAttributeConfig.getDossierTemplate().getId()).stream() + .filter(d -> !d.getId().equals(fileAttributeConfig.getId())) + .forEach(other -> { + if (other.getLabel().equalsIgnoreCase(fileAttributeConfig.getLabel())) { + throw new ConflictException("Label already exists."); + } + if (other.getPlaceholder().equalsIgnoreCase(fileAttributeConfig.getPlaceholder())) { + throw new ConflictException("Placeholder already exists."); + } + }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 633a8bfd2..69abd670b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -71,16 +71,18 @@ public class FileStatusPersistenceService { log.info("File " + fileId + " has been optimized with file size " + fileSize); fileRepository.updateProcessingStatus(fileId, - ProcessingStatus.PRE_PROCESSED, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - hasHighlights, - calculateProcessingErrorCounter(fileId, ProcessingStatus.PRE_PROCESSED)); + ProcessingStatus.PRE_PROCESSED, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + hasHighlights, + calculateProcessingErrorCounter(fileId, ProcessingStatus.PRE_PROCESSED)); } private boolean isFileDeleted(String fileId) { - return fileRepository.findById(fileId).map(FileEntity::isSoftOrHardDeleted).orElse(false); + return fileRepository.findById(fileId) + .map(FileEntity::isSoftOrHardDeleted) + .orElse(false); } @@ -88,14 +90,18 @@ public class FileStatusPersistenceService { switch (processingStatus) { case ERROR: - return fileRepository.findById(fileId).map(FileEntity::getProcessingErrorCounter).orElse(0) + 1; + return fileRepository.findById(fileId) + .map(FileEntity::getProcessingErrorCounter) + .orElse(0) + 1; case PROCESSED: case REPROCESS: return 0; default: - return fileRepository.findById(fileId).map(FileEntity::getProcessingErrorCounter).orElse(0); + return fileRepository.findById(fileId) + .map(FileEntity::getProcessingErrorCounter) + .orElse(0); } } @@ -117,19 +123,19 @@ public class FileStatusPersistenceService { return; } fileRepository.updateProcessingStatus(fileId, - numberOfPages, - ProcessingStatus.PROCESSED, - dictionaryVersion, - rulesVersion, - componentRulesVersion, - legalBasisVersion, - duration, - dossierDictionaryVersion, - analysisVersion, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - analysisNumber, - calculateProcessingErrorCounter(fileId, ProcessingStatus.PROCESSED)); + numberOfPages, + ProcessingStatus.PROCESSED, + dictionaryVersion, + rulesVersion, + componentRulesVersion, + legalBasisVersion, + duration, + dossierDictionaryVersion, + analysisVersion, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + analysisNumber, + calculateProcessingErrorCounter(fileId, ProcessingStatus.PROCESSED)); } @@ -151,10 +157,10 @@ public class FileStatusPersistenceService { } if (approval) { fileRepository.updateWorkflowStatus(fileId, - workflowStatus, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - true); + workflowStatus, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + true); } else { fileRepository.updateWorkflowStatus(fileId, workflowStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null); } @@ -176,10 +182,10 @@ public class FileStatusPersistenceService { fileRepository.updateStatusErrorInfo(fileId, null, null, null, null); } else { fileRepository.updateStatusErrorInfo(fileId, - fileErrorInfo.getCause().substring(0, Math.min(fileErrorInfo.getCause().length(), 255)), - fileErrorInfo.getQueue(), - fileErrorInfo.getService(), - fileErrorInfo.getTimestamp()); + fileErrorInfo.getCause().substring(0, Math.min(fileErrorInfo.getCause().length(), 255)), + fileErrorInfo.getQueue(), + fileErrorInfo.getService(), + fileErrorInfo.getTimestamp()); } } @@ -196,15 +202,15 @@ public class FileStatusPersistenceService { fileRepository.updateStatusErrorInfo(fileId, null, null, null, null); // In case the file is updated to "processed", "lastProcessed" date should be updated to "now" fileRepository.updateProcessingStatus(fileId, - processingStatus, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - calculateProcessingErrorCounter(fileId, ProcessingStatus.PROCESSED)); + processingStatus, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + calculateProcessingErrorCounter(fileId, ProcessingStatus.PROCESSED)); } else { fileRepository.updateProcessingStatus(fileId, - processingStatus, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - calculateProcessingErrorCounter(fileId, processingStatus)); + processingStatus, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + calculateProcessingErrorCounter(fileId, processingStatus)); } } @@ -244,10 +250,10 @@ public class FileStatusPersistenceService { return; } fileRepository.setUpdateStatusIndexingSuccessful(fileId, - ProcessingStatus.PROCESSED, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - calculateProcessingErrorCounter(fileId, ProcessingStatus.PROCESSED)); + ProcessingStatus.PROCESSED, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + calculateProcessingErrorCounter(fileId, ProcessingStatus.PROCESSED)); } @@ -277,22 +283,26 @@ public class FileStatusPersistenceService { var dossier = dossierService.getAndValidateDossier(dossierId); List configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); - return fileAttributesMap.entrySet().stream().map(entry -> { - var fa = new FileAttributeEntity(); - var id = new FileAttributeEntity.FileAttributeEntityId(); - id.setFileId(file.getId()); - id.setFileAttributeConfigId(configuration.stream() - .filter(c -> c.getId().equals(entry.getKey())) - .findAny() - .map(FileAttributeConfigEntity::getId) - .orElseThrow(() -> new BadRequestException("Invalid File Attribute Id"))); - fa.setFileAttributeId(id); - validateFileAttributeLength(entry.getValue()); - fa.setValue(StringUtils.isBlank(entry.getValue()) ? null : entry.getValue()); - return fa; - }).collect(Collectors.toList()); + return fileAttributesMap.entrySet() + .stream() + .map(entry -> { + var fa = new FileAttributeEntity(); + var id = new FileAttributeEntity.FileAttributeEntityId(); + id.setFileId(file.getId()); + id.setFileAttributeConfigId(configuration.stream() + .filter(c -> c.getId().equals(entry.getKey())) + .findAny() + .map(FileAttributeConfigEntity::getId) + .orElseThrow(() -> new BadRequestException("Invalid File Attribute Id"))); + fa.setFileAttributeId(id); + validateFileAttributeLength(entry.getValue()); + fa.setValue(StringUtils.isBlank(entry.getValue()) ? null : entry.getValue()); + return fa; + }) + .collect(Collectors.toList()); } + private void validateFileAttributeLength(String fileAttributesValue) { if (!StringUtils.isBlank(fileAttributesValue) && fileAttributesValue.length() > MAX_STATUS_NAME_LENGTH) { @@ -313,7 +323,10 @@ public class FileStatusPersistenceService { List configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); fileAttributes.forEach(attributeToAdd -> { - var configId = configuration.stream().filter(c -> c.getLabel().equals(attributeToAdd.getLabel())).map(c -> c.getId()).findFirst(); + var configId = configuration.stream() + .filter(c -> c.getLabel().equals(attributeToAdd.getLabel())) + .map(c -> c.getId()) + .findFirst(); if (configId.isPresent()) { var fileAttributeEntity = new FileAttributeEntity(new FileAttributeEntity.FileAttributeEntityId(fileId, configId.get()), attributeToAdd.getValue()); fileAttributesRepository.saveAndFlush(fileAttributeEntity); @@ -330,7 +343,8 @@ public class FileStatusPersistenceService { public FileEntity getStatus(String fileId) { - return fileRepository.findById(fileId).orElseThrow(() -> new NotFoundException(String.format("File with ID \"%s\" not found!", fileId))); + return fileRepository.findById(fileId) + .orElseThrow(() -> new NotFoundException(String.format("File with ID \"%s\" not found!", fileId))); } @@ -365,7 +379,10 @@ public class FileStatusPersistenceService { public List getActiveFiles(String dossierId) { - return fileRepository.findByDossierId(dossierId).stream().filter(f -> !f.isSoftOrHardDeleted()).collect(Collectors.toList()); + return fileRepository.findByDossierId(dossierId) + .stream() + .filter(f -> !f.isSoftOrHardDeleted()) + .collect(Collectors.toList()); } @@ -464,22 +481,23 @@ public class FileStatusPersistenceService { if (keepManualRedactions) { countUpdate = fileRepository.overwriteFileAndKeepManualRedactions(fileId, - filename, - uploader, - ProcessingStatus.UNPROCESSED, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + filename, + uploader, + ProcessingStatus.UNPROCESSED, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } else { - fileRepository.findById(fileId).ifPresent(file -> file.setExcludedPages(new HashSet<>())); + fileRepository.findById(fileId) + .ifPresent(file -> file.setExcludedPages(new HashSet<>())); countUpdate = fileRepository.overwriteFile(fileId, - filename, - uploader, - ProcessingStatus.UNPROCESSED, - WorkflowStatus.NEW, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + filename, + uploader, + ProcessingStatus.UNPROCESSED, + WorkflowStatus.NEW, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); deleteFileAttributes(fileId); } @@ -552,10 +570,10 @@ public class FileStatusPersistenceService { public void updateOCRStatus(OCRStatusUpdateResponse response) { fileRepository.updateOCRStatus(response.getFileId(), - response.getNumberOfPagesToOCR(), - response.getNumberOfOCRedPages(), - response.isOcrFinished() ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + response.getNumberOfPagesToOCR(), + response.getNumberOfOCRedPages(), + response.isOcrFinished() ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } @@ -574,7 +592,8 @@ public class FileStatusPersistenceService { public String getFilenameById(String fileId) { - return fileRepository.getFilenameById(fileId).orElseThrow(); + return fileRepository.getFilenameById(fileId) + .orElseThrow(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java index c0df1aec6..35d7bf35a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java @@ -33,7 +33,10 @@ public class LegalBasisMappingPersistenceService { public void deleteLegalBasis(String dossierTemplateId, List legalBasisNames) { var mapping = getLegalBasisMappingOrCreate(dossierTemplateId); - var filteredLegalBasis = mapping.getLegalBasis().stream().filter(l -> !legalBasisNames.contains(l.getName())).collect(Collectors.toList()); + var filteredLegalBasis = mapping.getLegalBasis() + .stream() + .filter(l -> !legalBasisNames.contains(l.getName())) + .collect(Collectors.toList()); mapping.setLegalBasis(filteredLegalBasis); mapping.setVersion(mapping.getVersion() + 1); @@ -54,15 +57,16 @@ public class LegalBasisMappingPersistenceService { private LegalBasisMappingEntity getLegalBasisMappingOrCreate(String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).orElseGet(() -> { - // create on get if not present - var lbm = new LegalBasisMappingEntity(); - lbm.setDossierTemplateId(dossierTemplateId); - lbm.setLegalBasis(new ArrayList<>()); - lbm.setVersion(1); - return legalBasisMappingRepository.save(lbm); + return legalBasisMappingRepository.findById(dossierTemplateId) + .orElseGet(() -> { + // create on get if not present + var lbm = new LegalBasisMappingEntity(); + lbm.setDossierTemplateId(dossierTemplateId); + lbm.setLegalBasis(new ArrayList<>()); + lbm.setVersion(1); + return legalBasisMappingRepository.save(lbm); - }); + }); } @@ -72,18 +76,26 @@ public class LegalBasisMappingPersistenceService { validateLegalBasis(legalBasis); var mapping = getLegalBasisMappingOrCreate(dossierTemplateId); - mapping.getLegalBasis().stream().filter(l -> l.getName().equals(legalBasis.getName())).findAny().ifPresentOrElse(existingBasis -> { - existingBasis.setReason(legalBasis.getReason()); - existingBasis.setDescription(legalBasis.getDescription()); - }, - () -> mapping.getLegalBasis() - .add(LegalBasisEntity.builder().name(legalBasis.getName()).description(legalBasis.getDescription()).reason(legalBasis.getReason()).build())); + mapping.getLegalBasis() + .stream() + .filter(l -> l.getName().equals(legalBasis.getName())) + .findAny().ifPresentOrElse(existingBasis -> { + existingBasis.setReason(legalBasis.getReason()); + existingBasis.setDescription(legalBasis.getDescription()); + }, + () -> mapping.getLegalBasis() + .add(LegalBasisEntity.builder() + .name(legalBasis.getName()) + .description(legalBasis.getDescription()) + .reason(legalBasis.getReason()) + .build())); mapping.setVersion(mapping.getVersion() + 1); legalBasisMappingRepository.save(mapping); } + private void validateLegalBasis(LegalBasis legalBasis) { if (legalBasis.getName().length() > MAX_NAME_LENGTH) { @@ -127,7 +139,9 @@ public class LegalBasisMappingPersistenceService { public long getVersion(String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getVersion).orElse(0L); + return legalBasisMappingRepository.findById(dossierTemplateId) + .map(LegalBasisMappingEntity::getVersion) + .orElse(0L); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/MigrationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/MigrationPersistenceService.java index 0870ea4da..69bb08687 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/MigrationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/MigrationPersistenceService.java @@ -32,7 +32,8 @@ public class MigrationPersistenceService { return version <= lastProcessedVersion; } - return migrations.stream().anyMatch(m -> m.getVersion() == version); + return migrations.stream() + .anyMatch(m -> m.getVersion() == version); } @@ -42,7 +43,10 @@ public class MigrationPersistenceService { if (migrations.isEmpty()) { return null; } - return migrations.stream().sorted(Comparator.comparing(MigrationEntity::getVersion).reversed()).collect(Collectors.toList()).get(0).getVersion(); + return migrations.stream() + .sorted(Comparator.comparing(MigrationEntity::getVersion).reversed()) + .collect(Collectors.toList()) + .get(0).getVersion(); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java index e7e08b387..96572bf34 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java @@ -49,8 +49,9 @@ public class NotificationPersistenceService { notification.setSoftDeleted(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } - if (notificationPreferences.isEmailNotificationsEnabled() && notificationPreferences.getEmailNotifications() - .contains(notification.getNotificationType()) && notificationPreferences.getEmailNotificationType() == EmailNotificationType.DAILY) { + if (notificationPreferences.isEmailNotificationsEnabled() + && notificationPreferences.getEmailNotifications().contains(notification.getNotificationType()) + && notificationPreferences.getEmailNotificationType() == EmailNotificationType.DAILY) { notificationEmailService.sendNotificationEmail(notification.getUserId(), EmailNotificationType.DAILY, List.of(notification)); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java index 53015482b..d1e7b585c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java @@ -44,16 +44,20 @@ public class NotificationPreferencesPersistenceService { notificationPreference.setUserId(userId); notificationPreference.setEmailNotificationsEnabled(false); notificationPreference.setInAppNotificationsEnabled(true); - notificationPreference.setInAppNotifications(Arrays.stream(NotificationType.values()).map(Enum::name).collect(Collectors.toList())); + notificationPreference.setInAppNotifications(Arrays.stream(NotificationType.values()) + .map(Enum::name) + .collect(Collectors.toList())); notificationPreferencesRepository.save(notificationPreference); } + @Transactional - public NotificationPreferences getByUserId(String userId){ + public NotificationPreferences getByUserId(String userId) { var notificationPreferencesEntityOptional = notificationPreferencesRepository.findByUserId(userId); - return notificationPreferencesEntityOptional.map(this::convertPreferences).orElse(null); + return notificationPreferencesEntityOptional.map(this::convertPreferences) + .orElse(null); } @@ -98,8 +102,8 @@ public class NotificationPreferencesPersistenceService { } + private NotificationPreferences convertPreferences(NotificationPreferencesEntity preferences) { - private NotificationPreferences convertPreferences(NotificationPreferencesEntity preferences){ var result = MagicConverter.convert(preferences, NotificationPreferences.class); result.setInAppNotifications(new ArrayList<>(preferences.getInAppNotifications())); result.setEmailNotifications(new ArrayList<>(preferences.getEmailNotifications())); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java index e321e9d88..bf4d4b1fb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java @@ -56,7 +56,8 @@ public class ReportTemplatePersistenceService { public ReportTemplateEntity find(String templateId) { - return reportTemplateRepository.findById(templateId).orElseThrow(() -> new NotFoundException("Report Template not found: " + templateId)); + return reportTemplateRepository.findById(templateId) + .orElseThrow(() -> new NotFoundException("Report Template not found: " + templateId)); } @@ -65,10 +66,10 @@ public class ReportTemplatePersistenceService { public void updateTemplate(String dossierTemplateId, String templateId, ReportTemplateUpdateRequest updateRequest) { int countUpdate = reportTemplateRepository.updateReportTemplate(dossierTemplateId, - templateId, - updateRequest.getFileName(), - updateRequest.isMultiFileReport(), - updateRequest.isActiveByDefault()); + templateId, + updateRequest.getFileName(), + updateRequest.isMultiFileReport(), + updateRequest.isActiveByDefault()); if (countUpdate == 0) { throw new NotFoundException("Report Template not found for dossier template Id: " + dossierTemplateId + " and templateId: " + templateId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java index 430190ae8..357d15f94 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java @@ -114,7 +114,8 @@ public class RulesPersistenceService { public long getVersion(String dossierTemplateId, RuleFileType ruleFileType) { - return ruleSetRepository.findVersionByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()).orElse(-1L); + return ruleSetRepository.findVersionByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()) + .orElse(-1L); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java index 8b2a98046..c6d45b56a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/CommentPersistenceService.java @@ -35,7 +35,8 @@ public class CommentPersistenceService { public CommentEntity findComment(long commentId) { - return commentRepository.findById(commentId).orElseThrow(() -> new NotFoundException("Comment with id: " + commentId + " not found")); + return commentRepository.findById(commentId) + .orElseThrow(() -> new NotFoundException("Comment with id: " + commentId + " not found")); } @@ -43,7 +44,9 @@ public class CommentPersistenceService { List comments = commentRepository.findByFileId(fileId, includeDeletions); - return comments.stream().sorted(Comparator.comparing(CommentEntity::getDate)).collect(Collectors.groupingBy(CommentEntity::getAnnotationId)); + return comments.stream() + .sorted(Comparator.comparing(CommentEntity::getDate)) + .collect(Collectors.groupingBy(CommentEntity::getAnnotationId)); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ForceRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ForceRedactionPersistenceService.java index 85013f762..5b756439c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ForceRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ForceRedactionPersistenceService.java @@ -37,11 +37,13 @@ public class ForceRedactionPersistenceService { forceRedactionRepository.saveAndFlush(manualForceRedaction); } + public List findEntriesByFileIdAndOptions(String fileId, ManualChangesQueryOptions options) { return forceRedactionRepository.findByFileIdAndOptions(fileId, options.isIncludeDeletions(), options.isIncludeOnlyUnprocessed()); } + @Transactional public void hardDelete(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java index 987ca5c7b..ec01d5635 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java @@ -97,6 +97,7 @@ public class LegalBasisChangePersistenceService { legalBasisChangeRepository.markAsProcessed(new AnnotationEntityId(annotationId, fileId), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } + public List findEntriesByFileIdAndOptions(String fileId, ManualChangesQueryOptions options) { return legalBasisChangeRepository.findByFileIdAndOptions(fileId, options.isIncludeDeletions(), options.isIncludeOnlyUnprocessed()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/RemoveRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/RemoveRedactionPersistenceService.java index 119928129..dc213dd2e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/RemoveRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/RemoveRedactionPersistenceService.java @@ -65,11 +65,13 @@ public class RemoveRedactionPersistenceService { return removeRedactionRepository.findAll(); } + public List findEntriesByFileIdAndOptions(String fileId, ManualChangesQueryOptions options) { return removeRedactionRepository.findByFileIdAndOptions(fileId, options.isIncludeDeletions(), options.isIncludeOnlyUnprocessed(), options.isIncludeDictChanges()); } + @Transactional public void hardDelete(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java index 333a8b8d3..689d0a5ac 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java @@ -13,10 +13,15 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.annotati public interface CommentRepository extends JpaRepository { @Query("select e from CommentEntity e where e.fileId = :fileId and e.annotationId = :annotationId and (:includeDeletions = true or e.softDeletedTime is null)") - List findByFileIdAndAnnotationId(@Param("fileId") String fileId, @Param("annotationId") String annotationId, @Param("includeDeletions") boolean includeDeletions); + List findByFileIdAndAnnotationId(@Param("fileId") String fileId, + @Param("annotationId") String annotationId, + @Param("includeDeletions") boolean includeDeletions); + @Query("select e from CommentEntity e where e.fileId = :fileId and e.annotationId = :annotationId and (:includeDeletions = true or e.softDeletedTime is null) ORDER BY e.date") - List findByFileIdAndAnnotationIdOrderByDate(@Param("fileId") String fileId, @Param("annotationId") String annotationId, @Param("includeDeletions") boolean includeDeletions); + List findByFileIdAndAnnotationIdOrderByDate(@Param("fileId") String fileId, + @Param("annotationId") String annotationId, + @Param("includeDeletions") boolean includeDeletions); @Query("select e from CommentEntity e where e.fileId = :fileId and (:includeDeletions = true or e.softDeletedTime is null)") @@ -30,6 +35,7 @@ public interface CommentRepository extends JpaRepository { @Query("update CommentEntity c set c.softDeletedTime = :softDeleteTime where c.id = :id") int updateSoftDelete(@Param("id") long id, @Param("softDeleteTime") OffsetDateTime softDeleteTime); + @Modifying @Query("update CommentEntity c set c.annotationId = :newAnnotationId where c.annotationId = :oldAnnotationId and c.fileId = :fileId") int saasMigrationUpdateAnnotationIds(@Param("fileId") String fileId, @Param("oldAnnotationId") String oldAnnotationId, @Param("newAnnotationId") String newAnnotationId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java index 139ebb27c..c575de3ca 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java @@ -10,7 +10,8 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur public interface DigitalSignatureRepository extends JpaRepository { @Modifying - @Query("update DigitalSignatureEntity e set e.reason = :reason, e.location = :location, e.contactInfo = :contactInfo, e.certificateName= :certificateName " + "where e.id = :id") + @Query("update DigitalSignatureEntity e set e.reason = :reason, e.location = :location, e.contactInfo = :contactInfo, e.certificateName= :certificateName " + + "where e.id = :id") int updateDigitalSignature(@Param("id") String id, @Param("reason") String reason, @Param("location") String location, diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java index 6ed4d4e07..1b4b47ceb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java @@ -15,6 +15,8 @@ public interface DossierAttributeConfigRepository extends JpaRepository findAttributeByIdOrDossierTemplateIdAndLabel(@Param("dossierTemplateId") String dossierTemplateId, @Param("dossierAttributeId") String dossierAttributeId, @Param("label") String label); + Optional findAttributeByIdOrDossierTemplateIdAndLabel(@Param("dossierTemplateId") String dossierTemplateId, + @Param("dossierAttributeId") String dossierAttributeId, + @Param("label") String label); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java index b37492eb9..d32747b92 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java @@ -26,6 +26,7 @@ public interface DossierAttributeRepository extends JpaRepository @Modifying @Query("update DossierEntity d set d.softDeletedTime = :softDeletedTime, d.lastUpdated = :lastUpdated where d.id = :dossierId") - void markDossierAsDeleted(@Param("dossierId") String dossierId, - @Param("softDeletedTime") OffsetDateTime softDeletedTime, - @Param("lastUpdated") OffsetDateTime lastUpdated); + void markDossierAsDeleted(@Param("dossierId") String dossierId, @Param("softDeletedTime") OffsetDateTime softDeletedTime, @Param("lastUpdated") OffsetDateTime lastUpdated); @Modifying - @Query("update DossierEntity d set d.hardDeletedTime = :hardDeletedTime, d.lastUpdated = :lastUpdated, " + "d.softDeletedTime = " + "case " + "when d.softDeletedTime is null then :hardDeletedTime " + "else d.softDeletedTime " + "end " + "where d.id = :dossierId") - void hardDelete(@Param("dossierId") String dossierId, - @Param("hardDeletedTime") OffsetDateTime hardDeletedTime, - @Param("lastUpdated") OffsetDateTime lastUpdated); + @Query("update DossierEntity d set d.hardDeletedTime = :hardDeletedTime, d.lastUpdated = :lastUpdated, " + + "d.softDeletedTime = " + + "case " + + "when d.softDeletedTime is null then :hardDeletedTime " + + "else d.softDeletedTime " + + "end " + + "where d.id = :dossierId") + void hardDelete(@Param("dossierId") String dossierId, @Param("hardDeletedTime") OffsetDateTime hardDeletedTime, @Param("lastUpdated") OffsetDateTime lastUpdated); @Modifying @@ -57,6 +59,7 @@ public interface DossierRepository extends JpaRepository @Query("select count(d) from DossierEntity d where d.archivedTime is null and d.softDeletedTime is null and d.hardDeletedTime is null and d.dossierTemplateId = :dossierTemplateId") int countActive(@Param("dossierTemplateId") String dossierTemplateId); + @Query("select d.id from DossierEntity d where d.archivedTime is not null and d.softDeletedTime is null and d.hardDeletedTime is null and d.dossierTemplateId = :dossierTemplateId") List findArchivedIds(@Param("dossierTemplateId") String dossierTemplateId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java index 2bf81fd94..d92e507ef 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; import org.springframework.data.repository.query.Param; + import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; @@ -13,14 +14,18 @@ public interface DossierStatusRepository extends JpaRepository findByDossierTemplateIdIn(List dossierTemplateIds); + @Modifying @Query("update DossierStatusEntity d set d.rank = :newRank where d.id = :dossierStatusId") void updateRank(@Param("dossierStatusId") String dossierStatusId, @Param("newRank") int newRank); + @Modifying @Query("update DossierStatusEntity d set d.rank = d.rank + 1 where d.dossierTemplateId = :dossierTemplateId and d.rank >= :rank") void adjustRanksForDossierTemplate(@Param("dossierTemplateId") String dossierTemplateId, @Param("rank") int rank); + @Query("select count(d) from DossierStatusEntity d where d.dossierTemplateId = :dossierTemplateId and d.rank = :rankToCheck") int getDuplicateRanks(@Param("dossierTemplateId") String dossierTemplateId, @Param("rankToCheck") int rankToCheck); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadRedactionFileStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadRedactionFileStatusRepository.java index e49272116..e222b1964 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadRedactionFileStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadRedactionFileStatusRepository.java @@ -14,12 +14,16 @@ public interface DownloadRedactionFileStatusRepository extends JpaRepository findAllByDownloadStorageId(String storageId); + Optional findByDownloadStorageIdAndFileId(String storageId, String fileId); @Modifying @Query("update DownloadRedactionFileStatusEntity e set e.processingErrorCounter = :processingErrorCounter where e.downloadStorageId = :downloadStorageId and e.fileId = :fileId") - void updateStatusErrorInfo(@Param("downloadStorageId") String downloadStorageId, @Param("fileId") String fileId, @Param("processingErrorCounter") Integer processingErrorCounter); + void updateStatusErrorInfo(@Param("downloadStorageId") String downloadStorageId, + @Param("fileId") String fileId, + @Param("processingErrorCounter") Integer processingErrorCounter); + @Modifying Integer deleteIfPresentByDownloadStorageId(String downloadStorageId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java index 5f62b95a8..0ccfdc594 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java @@ -26,6 +26,8 @@ public interface FileAttributeConfigRepository extends JpaRepository findByIdOrDossierTemplateIdAndLabel(@Param("dossierTemplateId") String dossierTemplateId, @Param("fileAttributeId") String fileAttributeId, @Param("label") String label); + Optional findByIdOrDossierTemplateIdAndLabel(@Param("dossierTemplateId") String dossierTemplateId, + @Param("fileAttributeId") String fileAttributeId, + @Param("label") String label); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index 4bd687674..fc1e6e484 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -31,7 +31,11 @@ public interface FileRepository extends JpaRepository { @Modifying - @Query("update FileEntity e set e.hasRedactions = :hasRedactions ," + " e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions," + " e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments, " + " e.lastUpdated = :lastUpdated " + " where e.id =:fileId") + @Query("update FileEntity e set e.hasRedactions = :hasRedactions ," + + " e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions," + + " e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments, " + + " e.lastUpdated = :lastUpdated " + + " where e.id =:fileId") void updateFlags(@Param("fileId") String fileId, @Param("lastUpdated") OffsetDateTime lastUpdated, @Param("hasRedactions") boolean hasRedactions, @@ -43,7 +47,12 @@ public interface FileRepository extends JpaRepository { @Modifying - @Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.componentRulesVersion = :componentRulesVersion, f.legalBasisVersion = :legalBasisVersion, " + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " + "f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId") + @Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.componentRulesVersion = :componentRulesVersion, f.legalBasisVersion = :legalBasisVersion, " + + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " + + "f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + + "where f.id = :fileId") void updateProcessingStatus(@Param("fileId") String fileId, @Param("numberOfPages") int numberOfPages, @Param("processingStatus") ProcessingStatus processingStatus, @@ -61,7 +70,8 @@ public interface FileRepository extends JpaRepository { @Modifying - @Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate," + " f.excludedFromAutomaticAnalysis = :excludedFromAutomaticAnalysis where f.id = :fileId") + @Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate," + + " f.excludedFromAutomaticAnalysis = :excludedFromAutomaticAnalysis where f.id = :fileId") void updateWorkflowStatus(@Param("fileId") String fileId, @Param("workflowStatus") WorkflowStatus workflowStatus, @Param("lastUpdated") OffsetDateTime lastUpdated, @@ -83,7 +93,9 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + " f.hasHighlights = :hasHighlights, f.processingErrorCounter = :processingErrorCounter " + " where f.id = :fileId") + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + + " f.hasHighlights = :hasHighlights, f.processingErrorCounter = :processingErrorCounter " + + " where f.id = :fileId") void updateProcessingStatus(@Param("fileId") String fileId, @Param("processingStatus") ProcessingStatus processingStatus, @Param("lastUpdated") OffsetDateTime lastUpdated, @@ -92,7 +104,8 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId") + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.processingErrorCounter = :processingErrorCounter " + + "where f.id = :fileId") void updateProcessingStatus(@Param("fileId") String fileId, @Param("processingStatus") ProcessingStatus processingStatus, @Param("lastUpdated") OffsetDateTime lastUpdated, @@ -109,7 +122,8 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true, flushAutomatically = true) - @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId") + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + + "where f.id = :fileId") void updateProcessingStatus(@Param("fileId") String fileId, @Param("processingStatus") ProcessingStatus processingStatus, @Param("lastUpdated") OffsetDateTime lastUpdated, @@ -118,7 +132,8 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + "f.lastIndexed = :lastIndexed, f.processingErrorCounter = :processingErrorCounter where f.id = :fileId") + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + + "f.lastIndexed = :lastIndexed, f.processingErrorCounter = :processingErrorCounter where f.id = :fileId") void setUpdateStatusIndexingSuccessful(@Param("fileId") String fileId, @Param("processingStatus") ProcessingStatus processingStatus, @Param("lastUpdated") OffsetDateTime lastUpdated, @@ -155,7 +170,13 @@ public interface FileRepository extends JpaRepository { @Modifying - @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + "f.hardDeletedTime = :hardDeletedTime, " + "f.deleted = case " + " when f.deleted is null then :deleted " + " when f.deleted is not null then f.deleted " + "end " + "where f.id = :fileId") + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + + "f.hardDeletedTime = :hardDeletedTime, " + + "f.deleted = case " + + " when f.deleted is null then :deleted " + + " when f.deleted is not null then f.deleted " + + "end " + + "where f.id = :fileId") int setHardDelete(@Param("fileId") String fileId, @Param("processingStatus") ProcessingStatus processingStatus, @Param("lastUpdated") OffsetDateTime lastUpdated, @@ -185,7 +206,18 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " + "f.fileManipulationDate = :lastUploaded, " + "f.ocrEndTime = null, f.ocrStartTime = null, f.numberOfPagesToOCR = null, f.numberOfOCRedPages = null, " + "f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + "f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, " + "f.redactionModificationDate = null, " + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = false, f.excludedFromAutomaticAnalysis = false, " + "f.processingErrorCounter = 0, f.errorCause = null, f.errorQueue = null, f.errorService = null, " + "f.errorTimestamp = null where f.id = :fileId") + @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " + + "f.fileManipulationDate = :lastUploaded, " + + "f.ocrEndTime = null, f.ocrStartTime = null, f.numberOfPagesToOCR = null, f.numberOfOCRedPages = null, " + + "f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + + "f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, " + + "f.redactionModificationDate = null, " + + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = false, f.excludedFromAutomaticAnalysis = false, " + + "f.processingErrorCounter = 0, f.errorCause = null, f.errorQueue = null, f.errorService = null, " + + "f.errorTimestamp = null where f.id = :fileId") int overwriteFile(@Param("fileId") String fileId, @Param("filename") String filename, @Param("uploader") String uploader, @@ -196,7 +228,16 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + "f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + "f.lastProcessed = null," + "f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null, " + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = false, f.processingErrorCounter = 0, " + "f.ocrStartTime = null, f.ocrEndTime = null, f.numberOfPagesToOCR = null, f.numberOfOCRedPages = null, " + "f.errorCause = null, f.errorQueue = null, f.errorService = null, f.errorTimestamp = null " + "where f.id = :fileId") + @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + + "f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + + "f.lastProcessed = null," + + "f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null, " + + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = false, f.processingErrorCounter = 0, " + + "f.ocrStartTime = null, f.ocrEndTime = null, f.numberOfPagesToOCR = null, f.numberOfOCRedPages = null, " + + "f.errorCause = null, f.errorQueue = null, f.errorService = null, f.errorTimestamp = null " + + "where f.id = :fileId") int overwriteFileAndKeepManualRedactions(@Param("fileId") String fileId, @Param("filename") String filename, @Param("uploader") String uploader, @@ -205,11 +246,17 @@ public interface FileRepository extends JpaRepository { @Param("lastUpdated") OffsetDateTime lastUpdated); - @Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId " + "where d.dossierTemplateId = :dossierTemplateId" + " and ((f.deleted is not null and f.hardDeletedTime is null) or " + " (d.softDeletedTime is not null and d.hardDeletedTime is null)) and d.archivedTime is null") + @Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId " + + "where d.dossierTemplateId = :dossierTemplateId" + + " and ((f.deleted is not null and f.hardDeletedTime is null) or " + + " (d.softDeletedTime is not null and d.hardDeletedTime is null)) and d.archivedTime is null") int countSoftDeletedFilesPerDossierTemplateId(@Param("dossierTemplateId") String dossierTemplateId); - @Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId " + "where d.id = :dossierId" + " and ((f.deleted is not null and f.hardDeletedTime is null) or " + " (d.softDeletedTime is not null and d.hardDeletedTime is null))") + @Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId " + + "where d.id = :dossierId" + + " and ((f.deleted is not null and f.hardDeletedTime is null) or " + + " (d.softDeletedTime is not null and d.hardDeletedTime is null))") int countSoftDeletedFilesPerDossierId(@Param("dossierId") String dossierId); @@ -238,7 +285,11 @@ public interface FileRepository extends JpaRepository { @Param("lastUpdated") OffsetDateTime lastUpdated); - @Query("select f from FileEntity f join DossierEntity d on d.id = f.dossierId " + "where f.excluded = false and f.workflowStatus <> 'APPROVED' and f.excludedFromAutomaticAnalysis = false " + " and ( f.processingStatus = 'PROCESSED' or f.processingStatus = 'ERROR' )" + " and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + " and f.deleted is null and f.hardDeletedTime is null and f.processingErrorCounter <= :maxRetries") + @Query("select f from FileEntity f join DossierEntity d on d.id = f.dossierId " + + "where f.excluded = false and f.workflowStatus <> 'APPROVED' and f.excludedFromAutomaticAnalysis = false " + + " and ( f.processingStatus = 'PROCESSED' or f.processingStatus = 'ERROR' )" + + " and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + + " and f.deleted is null and f.hardDeletedTime is null and f.processingErrorCounter <= :maxRetries") List getAllRelevantStatusesForReanalysisScheduler(@Param("maxRetries") int maxRetries); @@ -251,25 +302,45 @@ public interface FileRepository extends JpaRepository { List getSoftDeletedFiles(@Param("dossierIds") List dossierIds); - @Query("select f.processingStatus as processingStatus, count(f) as count from FileEntity f " + "inner join DossierEntity d on d.id = f.dossierId " + "where f.deleted is null and f.hardDeletedTime is null " + "and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + "and d.dossierTemplateId = :dossierTemplateId " + "group by f.processingStatus ") + @Query("select f.processingStatus as processingStatus, count(f) as count from FileEntity f " + + "inner join DossierEntity d on d.id = f.dossierId " + + "where f.deleted is null and f.hardDeletedTime is null " + + "and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + + "and d.dossierTemplateId = :dossierTemplateId " + + "group by f.processingStatus ") List countFilesByProcessingStatus(@Param("dossierTemplateId") String dossierTemplateId); - @Query("select f.workflowStatus as workflowStatus, count(f) as count from FileEntity f " + "inner join DossierEntity d on d.id = f.dossierId " + "where f.deleted is null and f.hardDeletedTime is null " + "and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + "and d.dossierTemplateId = :dossierTemplateId " + "group by f.workflowStatus ") + @Query("select f.workflowStatus as workflowStatus, count(f) as count from FileEntity f " + + "inner join DossierEntity d on d.id = f.dossierId " + + "where f.deleted is null and f.hardDeletedTime is null " + + "and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + + "and d.dossierTemplateId = :dossierTemplateId " + + "group by f.workflowStatus ") List countFilesByWorkflowStatus(@Param("dossierTemplateId") String dossierTemplateId); - @Query(value = "select COALESCE(sum(number_of_pages),0) as numberOfAnalyzedPages, " + "COALESCE(sum(json_array_length(cast(excluded_pages AS json))),0) as numberOfExcludedPages " + "from file join dossier on file.dossier_id = dossier.id " + "where file.deleted is null and file.hard_deleted_time is null " + "and dossier.archived_time is null and dossier.soft_deleted_time is null and dossier.hard_deleted_time is null" + " and dossier.dossier_template_id = :dossierTemplateId", nativeQuery = true) + @Query(value = "select COALESCE(sum(number_of_pages),0) as numberOfAnalyzedPages, " + + "COALESCE(sum(json_array_length(cast(excluded_pages AS json))),0) as numberOfExcludedPages " + + "from file join dossier on file.dossier_id = dossier.id " + + "where file.deleted is null and file.hard_deleted_time is null " + + "and dossier.archived_time is null and dossier.soft_deleted_time is null and dossier.hard_deleted_time is null" + + " and dossier.dossier_template_id = :dossierTemplateId", nativeQuery = true) FilePageCountsProjection countPages(@Param("dossierTemplateId") String dossierTemplateId); - @Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId where " + "f.hardDeletedTime is null and f.deleted is null and " + "d.dossierTemplateId = :dossierTemplateId and " + "d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null") + @Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId where " + + "f.hardDeletedTime is null and f.deleted is null and " + + "d.dossierTemplateId = :dossierTemplateId and " + + "d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null") int countActiveFiles(@Param("dossierTemplateId") String dossierTemplateId); @Transactional @Modifying(clearAutomatically = true) - @Query(value = "update FileEntity f set f.numberOfOCRedPages = :numberOfOCRedPages, " + "f.numberOfPagesToOCR = :numberOfPagesToOCR, f.ocrEndTime = :ocrEndTime, " + "f.lastUpdated = :lastUpdated where f.id = :fileId") + @Query(value = "update FileEntity f set f.numberOfOCRedPages = :numberOfOCRedPages, " + + "f.numberOfPagesToOCR = :numberOfPagesToOCR, f.ocrEndTime = :ocrEndTime, " + + "f.lastUpdated = :lastUpdated where f.id = :fileId") void updateOCRStatus(@Param("fileId") String fileId, @Param("numberOfPagesToOCR") int numberOfPagesToOCR, @Param("numberOfOCRedPages") int numberOfOCRedPages, @@ -300,11 +371,11 @@ public interface FileRepository extends JpaRepository { * @return a List of Tuples of fileIds and dossierIds, where a flag calculation is necessary */ @Query(""" - select distinct f.id, f.dossierId - from FileEntity f - left join ViewedPageEntity v on f.id = v.file.id and v.id.userId = f.assignee - where (f.lastFlagCalculation is NULL and f.lastProcessed is not NULL) or f.lastManualChangeDate > f.lastFlagCalculation or f.lastProcessed > f.lastFlagCalculation or f.lastFlagCalculation < v.viewedTime - """) + select distinct f.id, f.dossierId + from FileEntity f + left join ViewedPageEntity v on f.id = v.file.id and v.id.userId = f.assignee + where (f.lastFlagCalculation is NULL and f.lastProcessed is not NULL) or f.lastManualChangeDate > f.lastFlagCalculation or f.lastProcessed > f.lastFlagCalculation or f.lastFlagCalculation < v.viewedTime + """) List getFileIdentifiersWhereAnalysisFlagCalculationIsRequired(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java index ed7e6c227..f151527e4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java @@ -10,6 +10,7 @@ public interface NotificationPreferencesRepository extends JpaRepository findByUserId(String userId); + void deleteByUserId(String userId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java index 06e045ff7..bd98ead79 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java @@ -12,7 +12,9 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.notifica public interface NotificationRepository extends JpaRepository { - @Query("select count(n) from NotificationEntity n where " + " (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " + " and n.softDeleted is null and n.userId = :userId and n.creationDate > :since") + @Query("select count(n) from NotificationEntity n where " + + " (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " + + " and n.softDeleted is null and n.userId = :userId and n.creationDate > :since") int hasInAppNotificationForUser(@Param("userId") String userId, @Param("since") OffsetDateTime since); @@ -39,7 +41,7 @@ public interface NotificationRepository extends JpaRepository removedNotificationTypes, @Param("softDeleted") OffsetDateTime softDeleted); + void deleteAllByUserIdAndNotificationTypeIn(@Param("userId") String userId, + @Param("removedNotificationTypes") List removedNotificationTypes, + @Param("softDeleted") OffsetDateTime softDeleted); - @Query("select n from NotificationEntity n where " + " (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.emailNotifications apn where p.userId = :userId and p.emailNotificationsEnabled = true )) " + " and n.userId = :userId and n.creationDate >= :from and n.creationDate <= :to order by n.creationDate desc") + @Query("select n from NotificationEntity n where " + + " (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.emailNotifications apn where p.userId = :userId and p.emailNotificationsEnabled = true )) " + + " and n.userId = :userId and n.creationDate >= :from and n.creationDate <= :to order by n.creationDate desc") List findEmailNotificationsForUserId(@Param("userId") String userId, @Param("from") OffsetDateTime from, @Param("to") OffsetDateTime to); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java index 9b90b9e01..000efdaaf 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java @@ -15,7 +15,12 @@ public interface ReportTemplateRepository extends JpaRepository findAllByStatus(SaasMigrationStatus status); + @Modifying @Query("update SaasMigrationStatusEntity e set e.status = :status where e.fileId = :fileId") void updateStatus(@Param("fileId") String fileId, @Param("status") SaasMigrationStatus status); + @Modifying @Query("update SaasMigrationStatusEntity e set e.status = :status, e.errorCause = :errorCause where e.fileId = :fileId") void updateErrorStatus(@Param("fileId") String fileId, @Param("status") SaasMigrationStatus status, @Param("errorCause") String errorCause); + @Modifying @Query("update SaasMigrationStatusEntity e set e.processingErrorCounter = :processingErrorCounter, e.errorCause = :errorCause where e.fileId = :fileId") void updateErrorCounter(@Param("fileId") String fileId, @Param("processingErrorCounter") Integer processingErrorCounter, @Param("errorCause") String errorCause); + @Query("select count(*) from SaasMigrationStatusEntity e where e.status = :status") int countByStatus(@Param("status") SaasMigrationStatus status); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java index d4688b135..e98d30c46 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java @@ -24,16 +24,20 @@ public interface TypeRepository extends JpaRepository { @Query("select t from TypeEntity t where t.id = :typeId and t.softDeletedTime is null") Optional findByIdAndNotDeleted(@Param("typeId") String typeId); + @Modifying @Query("update TypeEntity t set t.version = t.version + 1 where t.id = :typeId") void updateByIdSetIncrementVersionByOne(@Param("typeId") String typeId); + @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and t.type = :type and t.dossierId is not null") List getAllDossierTypesForDossierTemplateAndType(@Param("dossierTemplateId") String dossierTemplateId, @Param("type") String type); + @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and t.dossierId is null") List getAllTypesForDossierTemplate(@Param("dossierTemplateId") String dossierTemplateId); + @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId or t.dossierId = :dossierId") List findAllTypesByDossierTemplateIdOrDossierId(@Param("dossierTemplateId") String dossierTemplateId, @Param("dossierId") String dossierId); @@ -44,22 +48,26 @@ public interface TypeRepository extends JpaRepository { @Query("select coalesce(sum(t.version), 0) from TypeEntity t where t.dossierId = :dossierId") long getVersionForDossierId(@Param("dossierId") String dossierId); + @Query("select coalesce(sum(t.version), 0) from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and t.dossierId is null") long getVersionForDossierTemplateId(@Param("dossierTemplateId") String dossierTemplateId); + @Query(""" - select new com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionarySummaryResponse(dt.id, t.id, t.type, t.label, count(e)) - from DossierTemplateEntity dt - left join TypeEntity t on t.dossierTemplateId = dt.id - left join DictionaryEntryEntity e on e.typeId = t.id - where t.softDeletedTime is null and dt.id in :dossierTemplateIds and t.dossierId is null and (e.entryId is null or e.deleted = false) - group by dt.id, t.id, t.type, t.label""") + select new com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionarySummaryResponse(dt.id, t.id, t.type, t.label, count(e)) + from DossierTemplateEntity dt + left join TypeEntity t on t.dossierTemplateId = dt.id + left join DictionaryEntryEntity e on e.typeId = t.id + where t.softDeletedTime is null and dt.id in :dossierTemplateIds and t.dossierId is null and (e.entryId is null or e.deleted = false) + group by dt.id, t.id, t.type, t.label""") List findDictionarySummaryList(@Param("dossierTemplateIds") Set dossierTemplateIds); + @Modifying(clearAutomatically = true, flushAutomatically = true) @Query("Update TypeEntity t set t.softDeletedTime = offset_datetime where t.id = :typeId") void softDeleteTypeById(@Param("typeId") String typeId); + @Modifying @Query("Update TypeEntity t set t.softDeletedTime = null where t.id = :typeId and t.softDeletedTime is not null") int unSoftDeleteTypeById(@Param("typeId") String typeId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ForceRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ForceRedactionRepository.java index 655681de4..3b5ba3b97 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ForceRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ForceRedactionRepository.java @@ -35,6 +35,7 @@ public interface ForceRedactionRepository extends JpaRepository findByFileIdAndOptions(@Param("fileId") String fileId, - @Param("includeDeletions") boolean includeDeletions, - @Param("unprocessed") boolean unprocessed); + @Param("includeDeletions") boolean includeDeletions, + @Param("unprocessed") boolean unprocessed); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ManualRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ManualRedactionRepository.java index 5785147ad..517da7d84 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ManualRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ManualRedactionRepository.java @@ -51,6 +51,7 @@ public interface ManualRedactionRepository extends JpaRepository findByIdAndNotSoftDeleted(@Param("annotationEntityId") AnnotationEntityId annotationEntityId); + @Query("select idr from IdRemovalEntity idr where idr.id.fileId = :fileId and (:includeDeletions = true or idr.softDeletedTime is null)") List findByFileIdIncludeDeletions(@Param("fileId") String fileId, @Param("includeDeletions") boolean includeDeletions); + @Query("select idr from IdRemovalEntity idr where idr.id.fileId = :fileId and idr.processedDate is null") List findByFileIdAndUnprocessed(@Param("fileId") String fileId); + @Modifying @Query("update IdRemovalEntity idr set idr.processedDate = :processedDate where idr.id = :annotationEntityId") void markAsProcessed(@Param("annotationEntityId") AnnotationEntityId annotationEntityId, @Param("processedDate") OffsetDateTime processedDate); @@ -41,7 +45,8 @@ public interface RemoveRedactionRepository extends JpaRepository findByFileIdAndOptions(@Param("fileId") String fileId, - @Param("includeDeletions") boolean includeDeletions, - @Param("unprocessed") boolean unprocessed, - @Param("includeDictChanges") boolean includeDictChanges); + @Param("includeDeletions") boolean includeDeletions, + @Param("unprocessed") boolean unprocessed, + @Param("includeDictChanges") boolean includeDictChanges); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ResizeRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ResizeRedactionRepository.java index 638a73476..88554ee76 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ResizeRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/ResizeRedactionRepository.java @@ -43,6 +43,7 @@ public interface ResizeRedactionRepository extends JpaRepository findByFileIdAndOptions(@Param("fileId") String fileId, - @Param("includeDeletions") boolean includeDeletions, - @Param("unprocessed") boolean unprocessed, - @Param("includeDictChanges") boolean includeDictChanges); + @Param("includeDeletions") boolean includeDeletions, + @Param("unprocessed") boolean unprocessed, + @Param("includeDictChanges") boolean includeDictChanges); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java index 9d09f76dd..d1892996f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/EntryRepository.java @@ -17,24 +17,28 @@ public interface EntryRepository extends EntryRepositoryCustom, JpaRepository findByTypeIdAndVersionGreaterThan(String typeId, long version); + List findByTypeIdContainsAndValue(String typeId, String value); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java index db36d19c3..77f7229b5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalsePositiveEntryRepository.java @@ -1,7 +1,9 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryFalsePositiveEntryEntity; + import jakarta.transaction.Transactional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -27,7 +29,8 @@ public interface FalsePositiveEntryRepository extends FalsePositiveEntryReposito @Modifying(flushAutomatically = true, clearAutomatically = true) @Transactional - @Query(value = "insert into dictionary_false_positive_entry (value, version, deleted, type_id) " + " select value, 1, false, :newTypeId from dictionary_false_positive_entry where type_id = :originalTypeId and deleted = false", nativeQuery = true) + @Query(value = "insert into dictionary_false_positive_entry (value, version, deleted, type_id) " + + " select value, 1, false, :newTypeId from dictionary_false_positive_entry where type_id = :originalTypeId and deleted = false", nativeQuery = true) void cloneEntries(@Param("originalTypeId") String originalTypeId, @Param("newTypeId") String newTypeId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java index 6121f95e2..e0ac1c12e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/dictionaryentry/FalseRecommendationEntryRepository.java @@ -1,7 +1,9 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryFalseRecommendationEntryEntity; + import jakarta.transaction.Transactional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -27,7 +29,8 @@ public interface FalseRecommendationEntryRepository extends FalseRecommendationE @Modifying(flushAutomatically = true, clearAutomatically = true) @Transactional - @Query(value = "insert into dictionary_false_recommendation_entry (value, version, deleted, type_id) " + " select value, 1, false, :newTypeId from dictionary_false_recommendation_entry where type_id = :originalTypeId and deleted = false", nativeQuery = true) + @Query(value = "insert into dictionary_false_recommendation_entry (value, version, deleted, type_id) " + + " select value, 1, false, :newTypeId from dictionary_false_recommendation_entry where type_id = :originalTypeId and deleted = false", nativeQuery = true) void cloneEntries(@Param("originalTypeId") String originalTypeId, @Param("newTypeId") String newTypeId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/AnalysisFlagsCalculationMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/AnalysisFlagsCalculationMessageReceiver.java index 97084e1c7..8ed2d5eca 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/AnalysisFlagsCalculationMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/AnalysisFlagsCalculationMessageReceiver.java @@ -25,6 +25,7 @@ public class AnalysisFlagsCalculationMessageReceiver { AnalysisFlagsCalculationService analysisFlagsCalculationService; ObjectMapper mapper; + @SneakyThrows @RabbitHandler @RabbitListener(queues = MessagingConfiguration.ANALYSIS_FLAG_CALCULATION_QUEUE) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/CvAnalysisMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/CvAnalysisMessageReceiver.java index a9dac6693..0fbc1d432 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/CvAnalysisMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/CvAnalysisMessageReceiver.java @@ -49,17 +49,22 @@ public class CvAnalysisMessageReceiver { addFileIdToTrace(response.getFileId()); log.warn("Received message from {} for dossierId {} and fileId {}", MessagingConfiguration.IMAGE_SERVICE_DLQ, response.getDossierId(), response.getFileId()); - fileStatusProcessingUpdateService.analysisFailed(response.getDossierId(), response.getFileId(), new FileErrorInfo("cv analysis failed", MessagingConfiguration.IMAGE_SERVICE_DLQ, "cv-analysis-service-v1", OffsetDateTime.now().truncatedTo( - ChronoUnit.MILLIS))); + fileStatusProcessingUpdateService.analysisFailed(response.getDossierId(), + response.getFileId(), + new FileErrorInfo("cv analysis failed", + MessagingConfiguration.IMAGE_SERVICE_DLQ, + "cv-analysis-service-v1", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } + // This can be removed if tracing is implemented in python services. - private void addFileIdToTrace(String fileId){ - if(observationRegistry.getCurrentObservation() != null){ + private void addFileIdToTrace(String fileId) { + + if (observationRegistry.getCurrentObservation() != null) { observationRegistry.getCurrentObservation().highCardinalityKeyValue("fileId", fileId); } } - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/ImageMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/ImageMessageReceiver.java index 30767fc32..00597e9b2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/ImageMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/ImageMessageReceiver.java @@ -61,14 +61,20 @@ public class ImageMessageReceiver { addFileIdToTrace(fileId); log.warn("Received message from {} for dossierId {} and fileId {}", MessagingConfiguration.IMAGE_SERVICE_DLQ, dossierId, fileId); - fileStatusProcessingUpdateService.analysisFailed(dossierId, fileId, new FileErrorInfo("image analysis failed", MessagingConfiguration.IMAGE_SERVICE_DLQ, "image-service-v3", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + fileStatusProcessingUpdateService.analysisFailed(dossierId, + fileId, + new FileErrorInfo("image analysis failed", + MessagingConfiguration.IMAGE_SERVICE_DLQ, + "image-service-v3", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } // This can be removed if tracing is implemented in python services. - private void addFileIdToTrace(String fileId){ - if(observationRegistry.getCurrentObservation() != null){ + private void addFileIdToTrace(String fileId) { + + if (observationRegistry.getCurrentObservation() != null) { observationRegistry.getCurrentObservation().highCardinalityKeyValue("fileId", fileId); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java index 6d9b1b532..5b6003e96 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/LayoutParsingFinishedMessageReceiver.java @@ -43,13 +43,13 @@ public class LayoutParsingFinishedMessageReceiver { if (saasMigrationStatusPersistenceService.isMigrating(layoutParsingRequestIdentifierService.parseFileId(response.identifier()))) { saasMigrationService.handleLayoutParsingFinished(layoutParsingRequestIdentifierService.parseDossierId(response.identifier()), - layoutParsingRequestIdentifierService.parseFileId(response.identifier())); + layoutParsingRequestIdentifierService.parseFileId(response.identifier())); return; } fileStatusService.setStatusAnalyse(layoutParsingRequestIdentifierService.parseDossierId(response.identifier()), - layoutParsingRequestIdentifierService.parseFileId(response.identifier()), - layoutParsingRequestIdentifierService.parsePriority(response.identifier())); + layoutParsingRequestIdentifierService.parseFileId(response.identifier()), + layoutParsingRequestIdentifierService.parsePriority(response.identifier())); fileStatusService.updateLayoutProcessedTime(layoutParsingRequestIdentifierService.parseFileId(response.identifier())); @@ -69,9 +69,9 @@ public class LayoutParsingFinishedMessageReceiver { } if (saasMigrationStatusPersistenceService.isMigrating(layoutParsingRequestIdentifierService.parseFileId(analyzeRequest.identifier()))) { saasMigrationService.handleError(layoutParsingRequestIdentifierService.parseDossierId(analyzeRequest.identifier()), - layoutParsingRequestIdentifierService.parseFileId(analyzeRequest.identifier()), - errorCause, - LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_QUEUE); + layoutParsingRequestIdentifierService.parseFileId(analyzeRequest.identifier()), + errorCause, + LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_QUEUE); return; } @@ -79,8 +79,8 @@ public class LayoutParsingFinishedMessageReceiver { timestamp = timestamp != null ? timestamp : OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); log.info("Failed to process layout parsing request, errorCause: {}, timestamp: {}", errorCause, timestamp); fileStatusProcessingUpdateService.analysisFailed(layoutParsingRequestIdentifierService.parseDossierId(analyzeRequest.identifier()), - layoutParsingRequestIdentifierService.parseFileId(analyzeRequest.identifier()), - new FileErrorInfo(errorCause, LayoutParsingQueueNames.LAYOUT_PARSING_DLQ, "layoutparser-service", timestamp)); + layoutParsingRequestIdentifierService.parseFileId(analyzeRequest.identifier()), + new FileErrorInfo(errorCause, LayoutParsingQueueNames.LAYOUT_PARSING_DLQ, "layoutparser-service", timestamp)); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/NerMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/NerMessageReceiver.java index 62feed4c6..5c6490c92 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/NerMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/NerMessageReceiver.java @@ -58,14 +58,19 @@ public class NerMessageReceiver { addFileIdToTrace(fileId); log.warn("Received message {} for dossierId {} and fileId {}", MessagingConfiguration.NER_SERVICE_DLQ, dossierId, fileId); - fileStatusProcessingUpdateService.analysisFailed(dossierId, fileId, - new FileErrorInfo("ner service failed", MessagingConfiguration.NER_SERVICE_DLQ, "entity-recognition-service-v3", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + fileStatusProcessingUpdateService.analysisFailed(dossierId, + fileId, + new FileErrorInfo("ner service failed", + MessagingConfiguration.NER_SERVICE_DLQ, + "entity-recognition-service-v3", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } // This can be removed if tracing is implemented in python services. - private void addFileIdToTrace(String fileId){ - if(observationRegistry.getCurrentObservation() != null){ + private void addFileIdToTrace(String fileId) { + + if (observationRegistry.getCurrentObservation() != null) { observationRegistry.getCurrentObservation().highCardinalityKeyValue("fileId", fileId); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionAnalysisResponseReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionAnalysisResponseReceiver.java index 9d9d50999..4ee9a7085 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionAnalysisResponseReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionAnalysisResponseReceiver.java @@ -37,42 +37,49 @@ public class RedactionAnalysisResponseReceiver { AddRedactionPersistenceService addRedactionPersistenceService; ResizeRedactionPersistenceService resizeRedactionPersistenceService; + @SneakyThrows @RabbitHandler @RabbitListener(queues = MessagingConfiguration.REDACTION_ANALYSIS_RESPONSE_QUEUE) public void receive(Message message) throws JsonProcessingException { - AnalyzeResponse analyzeResponse = objectMapper.readValue(message.getBody(), new TypeReference<>() {}); + AnalyzeResponse analyzeResponse = objectMapper.readValue(message.getBody(), new TypeReference<>() { + }); String fileId = analyzeResponse.getFileId(); log.info("Received Surrounding Text Analysis response for file: {}", fileId); - analyzeResponse.getUnprocessedManualEntities().forEach(unprocessedManualEntity -> { - Optional optionalManualRedactionEntry = addRedactionPersistenceService.findById(unprocessedManualEntity.getAnnotationId(), fileId); + analyzeResponse.getUnprocessedManualEntities() + .forEach(unprocessedManualEntity -> { + Optional optionalManualRedactionEntry = addRedactionPersistenceService.findById(unprocessedManualEntity.getAnnotationId(), fileId); - if (optionalManualRedactionEntry.isPresent()) { - ManualRedactionEntryEntity manualRedactionEntry = optionalManualRedactionEntry.get(); - manualRedactionEntry.setTextBefore(unprocessedManualEntity.getTextBefore()); - manualRedactionEntry.setTextAfter(unprocessedManualEntity.getTextAfter()); - manualRedactionEntry.setPositions(convertPositions(unprocessedManualEntity.getPositions())); - if (StringUtils.isNullOrEmpty(manualRedactionEntry.getSection()) || (!StringUtils.isNullOrEmpty(unprocessedManualEntity.getSection()) && !manualRedactionEntry.getSection().equals(unprocessedManualEntity.getSection()))) { - manualRedactionEntry.setSection(unprocessedManualEntity.getSection()); - } - addRedactionPersistenceService.update(manualRedactionEntry); - } + if (optionalManualRedactionEntry.isPresent()) { + ManualRedactionEntryEntity manualRedactionEntry = optionalManualRedactionEntry.get(); + manualRedactionEntry.setTextBefore(unprocessedManualEntity.getTextBefore()); + manualRedactionEntry.setTextAfter(unprocessedManualEntity.getTextAfter()); + manualRedactionEntry.setPositions(convertPositions(unprocessedManualEntity.getPositions())); + if (StringUtils.isNullOrEmpty(manualRedactionEntry.getSection()) || (!StringUtils.isNullOrEmpty(unprocessedManualEntity.getSection()) + && !manualRedactionEntry.getSection().equals(unprocessedManualEntity.getSection()))) { + manualRedactionEntry.setSection(unprocessedManualEntity.getSection()); + } + addRedactionPersistenceService.update(manualRedactionEntry); + } - Optional optionalManualResizeRedactionEntity = resizeRedactionPersistenceService.findResizeRedactionById(fileId, unprocessedManualEntity.getAnnotationId()); - if (optionalManualResizeRedactionEntity.isPresent()) { - ManualResizeRedactionEntity manualResizeRedaction = optionalManualResizeRedactionEntity.get(); - resizeRedactionPersistenceService.updateSurroundingText(manualResizeRedaction.getId(), - unprocessedManualEntity.getTextBefore(), - unprocessedManualEntity.getTextAfter()); - } - }); + Optional optionalManualResizeRedactionEntity = resizeRedactionPersistenceService.findResizeRedactionById(fileId, + unprocessedManualEntity.getAnnotationId()); + if (optionalManualResizeRedactionEntity.isPresent()) { + ManualResizeRedactionEntity manualResizeRedaction = optionalManualResizeRedactionEntity.get(); + resizeRedactionPersistenceService.updateSurroundingText(manualResizeRedaction.getId(), + unprocessedManualEntity.getTextBefore(), + unprocessedManualEntity.getTextAfter()); + } + }); } + private List convertPositions(List positions) { - return positions.stream().map(position -> RectangleEntity.builder() + return positions.stream() + .map(position -> RectangleEntity.builder() .page(position.getPageNumber()) .height(position.h()) .width(position.w()) @@ -81,4 +88,5 @@ public class RedactionAnalysisResponseReceiver { .build()) .toList(); } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionServiceSaasMigrationMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionServiceSaasMigrationMessageReceiver.java index 0e278b050..6bb603668 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionServiceSaasMigrationMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/RedactionServiceSaasMigrationMessageReceiver.java @@ -26,6 +26,7 @@ public class RedactionServiceSaasMigrationMessageReceiver { private final SaasMigrationService saasMigrationService; private final ObjectMapper objectMapper; + @SneakyThrows @RabbitListener(queues = MIGRATION_RESPONSE_QUEUE) public void receive(MigrationResponse response) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/VisualLayoutParsingMessageReceiver.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/VisualLayoutParsingMessageReceiver.java index 48eb30e9b..bc70bf145 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/VisualLayoutParsingMessageReceiver.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/VisualLayoutParsingMessageReceiver.java @@ -46,8 +46,11 @@ public class VisualLayoutParsingMessageReceiver { log.warn("Received message from {} for dossierId {} and fileId {}", MessagingConfiguration.VISUAL_LAYOUT_DLQ, response.getDossierId(), response.getFileId()); fileStatusProcessingUpdateService.analysisFailed(response.getDossierId(), - response.getFileId(), - new FileErrorInfo("table extractor failed", MessagingConfiguration.VISUAL_LAYOUT_DLQ, "table-extractor", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + response.getFileId(), + new FileErrorInfo("table extractor failed", + MessagingConfiguration.VISUAL_LAYOUT_DLQ, + "table-extractor", + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java index e69e3d488..f051e9ff5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/UserService.java @@ -60,21 +60,21 @@ public class UserService { private final UsersClient usersClient; - @RabbitListener(queues = PERSISTENCE_SERVICE_USER_CREATED_QUEUE) public void userCreated(UserCreatedEvent user) { auditPersistenceService.audit(AuditRequest.builder() - .userId(user.getCreatingUserId()) - .objectId(user.getUser().getUserId()) - .category(AuditCategory.USER.name()) - .message("User created") - .build()); + .userId(user.getCreatingUserId()) + .objectId(user.getUser().getUserId()) + .category(AuditCategory.USER.name()) + .message("User created") + .build()); customPermissionService.syncAllCustomPermissions(); } + @RabbitListener(queues = PERSISTENCE_SERVICE_USER_ROLES_UPDATED_QUEUE) public void rolesUpdated(UserRolesUpdatedEvent userRolesUpdatedEvent) { @@ -92,23 +92,24 @@ public class UserService { } auditPersistenceService.audit(AuditRequest.builder() - .userId(userRolesUpdatedEvent.getModifyingUserId()) - .objectId(userRolesUpdatedEvent.getUser().getUserId()) - .category(AuditCategory.USER.name()) - .message("Roles updated for user") - .details(Map.of("CurrentRoles", newRoles)) - .build()); + .userId(userRolesUpdatedEvent.getModifyingUserId()) + .objectId(userRolesUpdatedEvent.getUser().getUserId()) + .category(AuditCategory.USER.name()) + .message("Roles updated for user") + .details(Map.of("CurrentRoles", newRoles)) + .build()); } private void removeUserFromDossiers(String userId, UserRemovalModel mode) { - dossierManagementService.getAllDossiers(true, true).forEach(dossier -> { + dossierManagementService.getAllDossiers(true, true) + .forEach(dossier -> { - dossierACLService.enhanceDossierWithACLData(dossier); + dossierACLService.enhanceDossierWithACLData(dossier); - updateDossierUsers(userId, mode, dossier); - }); + updateDossierUsers(userId, mode, dossier); + }); } @@ -120,36 +121,37 @@ public class UserService { dossier.getMemberIds().remove(userId); dossier.getApproverIds().remove(userId); } - fileStatusManagementService.getAllDossierStatus(dossier.getId()).forEach(fileStatus -> { - if (userId.equals(fileStatus.getAssignee()) && (mode == UserRemovalModel.REMOVE_USER || mode == UserRemovalModel.PERMANENT)) { - fileStatusManagementService.setCurrentFileAssignee(dossier.getId(), fileStatus.getId(), null); - } - }); + fileStatusManagementService.getAllDossierStatus(dossier.getId()) + .forEach(fileStatus -> { + if (userId.equals(fileStatus.getAssignee()) && (mode == UserRemovalModel.REMOVE_USER || mode == UserRemovalModel.PERMANENT)) { + fileStatusManagementService.setCurrentFileAssignee(dossier.getId(), fileStatus.getId(), null); + } + }); if (userId.equals(dossier.getOwnerId()) && (mode == UserRemovalModel.REMOVE_MANAGER || mode == UserRemovalModel.PERMANENT)) { dossier.setOwnerId(null); dossier.getMemberIds() .forEach(member -> notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .userId(member) - .issuerId(KeycloakSecurity.getUserId()) - .notificationType(NotificationType.DOSSIER_OWNER_DELETED.name()) - .target(Map.of("dossierId", dossier.getId())) - .build())); + .userId(member) + .issuerId(KeycloakSecurity.getUserId()) + .notificationType(NotificationType.DOSSIER_OWNER_DELETED.name()) + .target(Map.of("dossierId", dossier.getId())) + .build())); } dossierManagementService.updateDossier(CreateOrUpdateDossierRequest.builder() - .dossierTemplateId(dossier.getDossierTemplateId()) - .dossierName(dossier.getDossierName()) - .description(dossier.getDescription()) - .dossierTemplateId(dossier.getDossierTemplateId()) - .downloadFileTypes(dossier.getDownloadFileTypes()) - .dueDate(dossier.getDueDate()) - .reportTemplateIds(Lists.newArrayList(dossier.getReportTemplateIds())) - .watermarkId(dossier.getWatermarkId()) - .previewWatermarkId(dossier.getPreviewWatermarkId()) - .dossierStatusId(dossier.getDossierStatusId()) - .build(), dossier.getId()); + .dossierTemplateId(dossier.getDossierTemplateId()) + .dossierName(dossier.getDossierName()) + .description(dossier.getDescription()) + .dossierTemplateId(dossier.getDossierTemplateId()) + .downloadFileTypes(dossier.getDownloadFileTypes()) + .dueDate(dossier.getDueDate()) + .reportTemplateIds(Lists.newArrayList(dossier.getReportTemplateIds())) + .watermarkId(dossier.getWatermarkId()) + .previewWatermarkId(dossier.getPreviewWatermarkId()) + .dossierStatusId(dossier.getDossierStatusId()) + .build(), dossier.getId()); dossierACLService.updateDossierACL(dossier.getMemberIds(), dossier.getApproverIds(), dossier.getOwnerId(), dossier.getId()); } @@ -159,14 +161,15 @@ public class UserService { public void myProfileUpdated(UserUpdatedOwnProfileEvent userUpdatedOwnProfileEvent) { auditPersistenceService.audit(AuditRequest.builder() - .userId(userUpdatedOwnProfileEvent.getUser().getUserId()) - .objectId(userUpdatedOwnProfileEvent.getUser().getUserId()) - .category(AuditCategory.USER.name()) - .message("Profile updated for user") - .details(Map.of("Profile", userUpdatedOwnProfileEvent.getUser())) - .build()); + .userId(userUpdatedOwnProfileEvent.getUser().getUserId()) + .objectId(userUpdatedOwnProfileEvent.getUser().getUserId()) + .category(AuditCategory.USER.name()) + .message("Profile updated for user") + .details(Map.of("Profile", userUpdatedOwnProfileEvent.getUser())) + .build()); } + @RabbitListener(queues = PERSISTENCE_SERVICE_USER_DELETED_QUEUE) public void userRemoved(UserRemovedEvent userRemovedEvent) { @@ -175,11 +178,11 @@ public class UserService { customPermissionService.syncAllCustomPermissions(); auditPersistenceService.audit(AuditRequest.builder() - .userId(userRemovedEvent.getDeletingUserId()) - .objectId(userRemovedEvent.getUser().getUserId()) - .category(AuditCategory.USER.name()) - .message("User removed") - .build()); + .userId(userRemovedEvent.getDeletingUserId()) + .objectId(userRemovedEvent.getUser().getUserId()) + .category(AuditCategory.USER.name()) + .message("User removed") + .build()); } @@ -193,7 +196,9 @@ public class UserService { Set deletedUsers = new HashSet<>(); for (String userId : userIds) { - if (users.stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny().isEmpty()) { + if (users.stream() + .filter(u -> u.getUserId().equalsIgnoreCase(userId)) + .findAny().isEmpty()) { log.info("Will delete {} user", userId); removeUserFromDossiers(userId, UserRemovalModel.PERMANENT); @@ -212,12 +217,12 @@ public class UserService { public void userUpdated(UserUpdatedEvent userUpdatedEvent) { auditPersistenceService.audit(AuditRequest.builder() - .userId(userUpdatedEvent.getModifyingUserId()) - .objectId(userUpdatedEvent.getUser().getUserId()) - .category(AuditCategory.USER.name()) - .message("Profile updated for user") - .details(Map.of("Profile", userUpdatedEvent.getUser())) - .build()); + .userId(userUpdatedEvent.getModifyingUserId()) + .objectId(userUpdatedEvent.getUser().getUserId()) + .category(AuditCategory.USER.name()) + .message("Profile updated for user") + .details(Map.of("Profile", userUpdatedEvent.getUser())) + .build()); } @@ -225,24 +230,31 @@ public class UserService { public void userStatusToggled(UserStatusToggleEvent userStatusToggleEvent) { auditPersistenceService.audit(AuditRequest.builder() - .userId(userStatusToggleEvent.getModifyingUserId()) - .objectId(userStatusToggleEvent.getUser().getUserId()) - .category(AuditCategory.USER.name()) - .message("Profile activated/deactivated for user") - .details(Map.of("Profile activated", userStatusToggleEvent.getUser().isActive())) - .build()); + .userId(userStatusToggleEvent.getModifyingUserId()) + .objectId(userStatusToggleEvent.getUser().getUserId()) + .category(AuditCategory.USER.name()) + .message("Profile activated/deactivated for user") + .details(Map.of("Profile activated", userStatusToggleEvent.getUser().isActive())) + .build()); } public Optional getUserById(String userId) { - return usersClient.getAllUsers(false).stream().filter(u -> u.getUserId().equalsIgnoreCase(userId)).findAny(); + return usersClient.getAllUsers(false) + .stream() + .filter(u -> u.getUserId().equalsIgnoreCase(userId)) + .findAny(); } public List getUsersByIds(Set actualMemberIds) { - return usersClient.getAllUsers(false).stream().filter(u -> actualMemberIds.contains(u.getUserId())).collect(Collectors.toList()); + + return usersClient.getAllUsers(false) + .stream() + .filter(u -> actualMemberIds.contains(u.getUserId())) + .collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java index 46d913afe..a73de6bec 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserCreatedEvent.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.users.events; - import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User; import lombok.AllArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java index b934fd839..995f58729 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserRemovedEvent.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.users.events; - import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User; import lombok.AllArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java index dec2cd79c..60c16995d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserStatusToggleEvent.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.users.events; - import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User; import lombok.AllArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java index 2f9e51e7b..4f361a6a8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedEvent.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.users.events; - import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User; import lombok.AllArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java index abe09d66d..fafbd5750 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/UserUpdatedOwnProfileEvent.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.users.events; - import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User; import lombok.AllArgsConstructor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java index a63227bcb..d730a9b25 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java @@ -24,6 +24,7 @@ public final class ColorUtils { } } + public static float[] convertColor(String hex) { Color color = Color.decode(hex); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierMapper.java index 061deb52e..41ab73755 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierMapper.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierMapper.java @@ -12,7 +12,10 @@ public class DossierMapper implements BiConsumer { @Override public void accept(DossierEntity dossierEntity, Dossier dossier) { - dossier.setReportTemplateIds(dossierEntity.getReportTemplates().stream().map(ReportTemplateEntity::getTemplateId).collect(Collectors.toSet())); + dossier.setReportTemplateIds(dossierEntity.getReportTemplates() + .stream() + .map(ReportTemplateEntity::getTemplateId) + .collect(Collectors.toSet())); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierStatusFilteringMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierStatusFilteringMapper.java index e16be8c2c..d0968b35a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierStatusFilteringMapper.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/DossierStatusFilteringMapper.java @@ -22,10 +22,11 @@ public class DossierStatusFilteringMapper implements BiConsumer { @Override public void accept(FileEntity fileEntity, FileModel fileModel) { - fileEntity.getFileAttributes().forEach(fa -> fileModel.getFileAttributes().put(fa.getFileAttributeId().getFileAttributeConfigId(), fa.getValue())); + fileEntity.getFileAttributes() + .forEach(fa -> fileModel.getFileAttributes().put(fa.getFileAttributeId().getFileAttributeConfigId(), fa.getValue())); fileModel.setFileErrorInfo(new FileErrorInfo(fileEntity.getErrorCause(), fileEntity.getErrorQueue(), fileEntity.getErrorService(), fileEntity.getErrorTimestamp())); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadRedactionFileDetailsConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadRedactionFileDetailsConverter.java index 8acb90cf8..016056a39 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadRedactionFileDetailsConverter.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONDownloadRedactionFileDetailsConverter.java @@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.utils; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; + import jakarta.persistence.AttributeConverter; import jakarta.persistence.Converter; import lombok.SneakyThrows; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ResourceLoader.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ResourceLoader.java index eff21a914..f0b942e6c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ResourceLoader.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ResourceLoader.java @@ -21,7 +21,8 @@ public class ResourceLoader { throw new IllegalArgumentException("could not load classpath resource: " + classpathPath); } try (BufferedReader br = new BufferedReader(new InputStreamReader(resource.openStream(), StandardCharsets.UTF_8))) { - return br.lines().collect(Collectors.toSet()); + return br.lines() + .collect(Collectors.toSet()); } catch (IOException e) { throw new IllegalArgumentException("could not load classpath resource: " + classpathPath, e); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TypeIdUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TypeIdUtils.java index 2d5b7f501..d4dd5ec58 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TypeIdUtils.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TypeIdUtils.java @@ -15,22 +15,31 @@ public class TypeIdUtils { public static boolean isDossierTypeId(String typeId) { - long count = typeId.chars().filter(ch -> ch == ':').count(); + + long count = typeId.chars() + .filter(ch -> ch == ':') + .count(); return count == 2; } + public static String getDossierIdFromTypeId(String typeId) { + var index = typeId.lastIndexOf(':'); return typeId.substring(index + 1); } + public static String getDosssierTemplateTypeIdFromTypeId(String typeId) { + var index = typeId.lastIndexOf(':'); return typeId.substring(0, index); } + public static String getDossierTemplateIdFromTypeId(String typeId) { + var firstIndex = typeId.indexOf(':'); var secondIndex = typeId.lastIndexOf(':'); return secondIndex == -1 ? typeId.substring(firstIndex + 1) : typeId.substring(firstIndex + 1, secondIndex); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index 523a2e2b7..50f039237 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -148,14 +148,16 @@ public class Application implements ApplicationContextAware { // Make sure that KeyValues entries are already sorted by name for better performance return super.getHighCardinalityKeyValues(context) .and(getValueFromPathVariableOrRequestParam(context, "dossierId"), - getValueFromPathVariableOrRequestParam(context, "dossierTemplateId"), - getValueFromPathVariableOrRequestParam(context, "fileId")); + getValueFromPathVariableOrRequestParam(context, "dossierTemplateId"), + getValueFromPathVariableOrRequestParam(context, "fileId")); } private KeyValue tenantId(ServerRequestObservationContext context) { - return KeyValue.of("tenantId", Optional.ofNullable(context.getCarrier().getHeader("X-Tenant-Id")).orElse("")); + return KeyValue.of("tenantId", + Optional.ofNullable(context.getCarrier().getHeader("X-Tenant-Id")) + .orElse("")); } @@ -167,7 +169,9 @@ public class Application implements ApplicationContextAware { value = pathVariables == null ? null : (String) pathVariables.get(name); } - return KeyValue.of(name, Optional.ofNullable(value).orElse("")); + return KeyValue.of(name, + Optional.ofNullable(value) + .orElse("")); } }; diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/SpringDocRedirectController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/SpringDocRedirectController.java index 5c9ebc37d..132397d52 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/SpringDocRedirectController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/SpringDocRedirectController.java @@ -1,11 +1,13 @@ package com.iqser.red.service.peristence.v1.server; import com.knecon.fforesight.swaggercommons.SpringDocProperties; + import io.swagger.v3.oas.annotations.Hidden; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.GetMapping; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java index 306e0871c..e856e1b16 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java @@ -65,9 +65,22 @@ public class FileTesterAndProvider { assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isGreaterThanOrEqualTo(1); fileManagementStorageService.storeJSONObject(dossier.getId(), - file.getFileId(), - FileType.ENTITY_LOG, - new EntityLog(1, 1, List.of(EntityLogEntry.builder().id("annotationId").type("manual").value("value entry").entryType(EntryType.ENTITY).state(EntryState.APPLIED).build()), null, 0, 0, 0, 0)); + file.getFileId(), + FileType.ENTITY_LOG, + new EntityLog(1, + 1, + List.of(EntityLogEntry.builder() + .id("annotationId") + .type("manual") + .value("value entry") + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .build()), + null, + 0, + 0, + 0, + 0)); fileManagementStorageService.storeObject(dossier.getId(), file.getFileId(), FileType.ORIGIN, new ByteArrayInputStream(objectMapper.writeValueAsBytes("bytes of the file"))); @@ -85,7 +98,8 @@ public class FileTesterAndProvider { var mff = new MockMultipartFile(fileName + ".pdf", fileName + ".pdf", "application/pdf", "lorem ipsum".getBytes()); var uploadResult = uploadClient.upload(mff, dossier.getId(), false); - return uploadResult.getFileIds().iterator().next(); + return uploadResult.getFileIds() + .iterator().next(); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/ReportTemplateProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/ReportTemplateProvider.java index 6e138150a..37fc8f5d4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/ReportTemplateProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/ReportTemplateProvider.java @@ -30,7 +30,7 @@ public class ReportTemplateProvider { public ReportTemplate provideReportTemplate(String dossierTemplateId, String name, byte[] content, boolean multiFile, boolean activeByDefault) { - var template = new MockMultipartFile(name,name,"application/octet-stream", content); + var template = new MockMultipartFile(name, name, "application/octet-stream", content); reportTemplateClient.uploadTemplate(template, dossierTemplateId, multiFile, activeByDefault); var tpl = reportTemplateClient.getAvailableReportTemplates(dossierTemplateId) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java index c245080bf..047cf00ff 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java @@ -56,7 +56,10 @@ public class TypeProvider { dictionaryClient.addType(type); var allTypes = dictionaryClient.getAllTypes(dossierTemplate.getDossierTemplateId(), dossier != null ? dossier.getId() : null, false); - var foundType = allTypes.getTypes().stream().filter(t -> t.getType().equalsIgnoreCase(typeName)).findAny(); + var foundType = allTypes.getTypes() + .stream() + .filter(t -> t.getType().equalsIgnoreCase(typeName)) + .findAny(); assertThat(foundType).isPresent(); return foundType.get(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java index 5f86ad90a..bda4151cb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/UserProvider.java @@ -11,15 +11,21 @@ public class UserProvider { @Autowired private UserService userService; - public String getUserId(){ + + public String getUserId() { + return "manageradmin1@test.com"; } - public String getAltUserId(){ + + public String getAltUserId() { + return "manageradmin2@test.com"; } - public String getMemberUserId(){ + + public String getMemberUserId() { + return "manageradmin3@test.com"; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java index b24ebdbce..9946b3966 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java @@ -41,8 +41,18 @@ public class AuditTest extends AbstractPersistenceServerServiceTest { auditPersistenceService.audit(AuditRequest.builder().category("c2").message("test").userId(userId).objectId("1").details(Map.of("key", "value")).build()); assertThat(auditClient.getAuditCategories().size()).isGreaterThanOrEqualTo(2); - assertThat(auditClient.getAuditCategories().stream().filter(c -> c.getCategory().equals("c1")).findAny().map(CategoryModel::getRecordCount).get()).isEqualTo(2); - assertThat(auditClient.getAuditCategories().stream().filter(c -> c.getCategory().equals("c2")).findAny().map(CategoryModel::getRecordCount).get()).isEqualTo(1); + assertThat(auditClient.getAuditCategories() + .stream() + .filter(c -> c.getCategory().equals("c1")) + .findAny() + .map(CategoryModel::getRecordCount) + .get()).isEqualTo(2); + assertThat(auditClient.getAuditCategories() + .stream() + .filter(c -> c.getCategory().equals("c2")) + .findAny() + .map(CategoryModel::getRecordCount) + .get()).isEqualTo(1); var result = auditClient.searchAuditLog(AuditSearchRequest.builder().category("c1").page(0).pageSize(10).build()); assertThat(result.getTotalHits()).isEqualTo(2); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java index 7fa88c206..38f5d7d97 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/CustomPermissionTest.java @@ -32,24 +32,24 @@ public class CustomPermissionTest extends AbstractPersistenceServerServiceTest { public void testSaveCustomPermissions() { CustomPermissionModel targetViewPermission = new CustomPermissionModel(RedPermission.VIEW_OBJECT.getMask(), - RedPermission.VIEW_OBJECT.getName(), - RedPermission.VIEW_OBJECT.getSort(), - false); + RedPermission.VIEW_OBJECT.getName(), + RedPermission.VIEW_OBJECT.getSort(), + false); List mappedViewPermissions = new ArrayList<>(); mappedViewPermissions.add(new CustomPermissionModel(RedPermission.APPROVE.getMask(), RedPermission.APPROVE.getName(), RedPermission.APPROVE.getSort(), true)); mappedViewPermissions.add(new CustomPermissionModel(RedPermission.REVIEW.getMask(), RedPermission.REVIEW.getName(), RedPermission.REVIEW.getSort(), true)); CustomPermissionModel targetAccessPermission = new CustomPermissionModel(RedPermission.ACCESS_OBJECT.getMask(), - RedPermission.ACCESS_OBJECT.getName(), - RedPermission.ACCESS_OBJECT.getSort(), - false); + RedPermission.ACCESS_OBJECT.getName(), + RedPermission.ACCESS_OBJECT.getSort(), + false); List mappedAccessPermissions = new ArrayList<>(); mappedAccessPermissions.add(new CustomPermissionModel(RedPermission.APPROVE.getMask(), RedPermission.APPROVE.getName(), RedPermission.APPROVE.getSort(), true)); mappedAccessPermissions.add(new CustomPermissionModel(RedPermission.REVIEW.getMask(), RedPermission.REVIEW.getName(), RedPermission.REVIEW.getSort(), true)); mappedAccessPermissions.add(new CustomPermissionModel(CustomPermissionConstants.EVERYONE_ELSE.getMask(), - CustomPermissionConstants.EVERYONE_ELSE.getName(), - CustomPermissionConstants.EVERYONE_ELSE.getSort(), - true)); + CustomPermissionConstants.EVERYONE_ELSE.getName(), + CustomPermissionConstants.EVERYONE_ELSE.getSort(), + true)); List customPermissionMappingModels = new ArrayList<>(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index 6de9dc18e..9035f66be 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -50,13 +50,13 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { private List testList2 = List.of("William C. Spare", "Charalampos", "Carina Wilson", "Patricia A. Sheehy", "William c. Spare", "carlsen", "PATRICIA A. SHEEHY"); - @BeforeEach public void createDossierRedactionDictionary() { TenantContext.setTenantId("redaction"); } + @Test public void testAddEntriesToDossierTemplateDictionaryWithDossierDictionaryOnlyFlag() { @@ -67,9 +67,17 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { var entries = List.of("word1", "word2"); var falsePositives = List.of("false_positive1", "false_positive"); var falseRecommendations = List.of("false_recommendation1", "false_recommendation2"); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), entries, false, null, DictionaryEntryType.ENTRY)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), falsePositives, false, null, DictionaryEntryType.FALSE_POSITIVE)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), falseRecommendations, false, null, DictionaryEntryType.FALSE_RECOMMENDATION)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), entries, false, null, DictionaryEntryType.ENTRY)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), falsePositives, false, null, DictionaryEntryType.FALSE_POSITIVE)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.addEntry(type.getType(), + type.getDossierTemplateId(), + falseRecommendations, + false, + null, + DictionaryEntryType.FALSE_RECOMMENDATION)); var loadedType1 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); assertThat(loadedType1).isNotNull(); @@ -77,14 +85,29 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(loadedType1.getFalsePositiveEntries()).isEmpty(); assertThat(loadedType1.getFalseRecommendationEntries()).isEmpty(); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), entries, null, DictionaryEntryType.ENTRY)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), falsePositives, null, DictionaryEntryType.FALSE_POSITIVE)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), falseRecommendations, null, DictionaryEntryType.FALSE_RECOMMENDATION)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.deleteEntry(type.getType(), type.getDossierTemplateId(), entries.get(0), null, DictionaryEntryType.ENTRY)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.deleteEntry(type.getType(), type.getDossierTemplateId(), falsePositives.get(0), null, DictionaryEntryType.FALSE_POSITIVE)); - Assertions.assertThrows(FeignException.Forbidden.class, () -> dictionaryClient.deleteEntry(type.getType(), type.getDossierTemplateId(), falseRecommendations.get(0), null, DictionaryEntryType.FALSE_RECOMMENDATION)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), entries, null, DictionaryEntryType.ENTRY)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), falsePositives, null, DictionaryEntryType.FALSE_POSITIVE)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.deleteEntries(type.getType(), + type.getDossierTemplateId(), + falseRecommendations, + null, + DictionaryEntryType.FALSE_RECOMMENDATION)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.deleteEntry(type.getType(), type.getDossierTemplateId(), entries.get(0), null, DictionaryEntryType.ENTRY)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.deleteEntry(type.getType(), type.getDossierTemplateId(), falsePositives.get(0), null, DictionaryEntryType.FALSE_POSITIVE)); + Assertions.assertThrows(FeignException.Forbidden.class, + () -> dictionaryClient.deleteEntry(type.getType(), + type.getDossierTemplateId(), + falseRecommendations.get(0), + null, + DictionaryEntryType.FALSE_RECOMMENDATION)); } + @Test public void testAddFalsePositiveAndFalseRecommendation() { @@ -97,11 +120,11 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word2"), false, null, DictionaryEntryType.ENTRY); dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive"), false, null, DictionaryEntryType.FALSE_POSITIVE); dictionaryClient.addEntry(type.getType(), - type.getDossierTemplateId(), - List.of("false_recommendation1", "false_recommendation2"), - false, - null, - DictionaryEntryType.FALSE_RECOMMENDATION); + type.getDossierTemplateId(), + List.of("false_recommendation1", "false_recommendation2"), + false, + null, + DictionaryEntryType.FALSE_RECOMMENDATION); var loadedType1 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); @@ -207,7 +230,8 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { var dictionary = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); assertThat(dictionary.getEntries()).hasSize(1); - assertThat(dictionary.getEntries().iterator().next()).isEqualTo(word); + assertThat(dictionary.getEntries() + .iterator().next()).isEqualTo(word); // Act & Assert: Add same word again; Only one should exist entries = new ArrayList<>(); @@ -216,7 +240,8 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionary = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); assertThat(dictionary.getEntries()).hasSize(1); - assertThat(dictionary.getEntries().iterator().next()).isEqualTo(word); + assertThat(dictionary.getEntries() + .iterator().next()).isEqualTo(word); // Act & Assert: Add same word multiple times again; Only one should exist entries = new ArrayList<>(); @@ -228,7 +253,8 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionary = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); assertThat(dictionary.getEntries()).hasSize(1); - assertThat(dictionary.getEntries().iterator().next()).isEqualTo(word); + assertThat(dictionary.getEntries() + .iterator().next()).isEqualTo(word); assertThat((dictionary.isDossierDictionaryOnly())).isFalse(); // Act & Assert: Delete word; Should have 'deleted' flag @@ -299,18 +325,18 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { var dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "dossier2"); var returnedtype1 = dictionaryClient.addType(CreateTypeValue.builder() - .type("dossier_redaction_1") - .label("Dossier Redactions") - .hexColor("#fcba03") - .rank(100) - .hint(false) - .caseInsensitive(false) - .recommendation(false) - .description("Something") - .addToDictionaryAction(false) - .dossierTemplateId(dossier.getDossierTemplateId()) - .dossierDictionaryOnly(true) - .build()); + .type("dossier_redaction_1") + .label("Dossier Redactions") + .hexColor("#fcba03") + .rank(100) + .hint(false) + .caseInsensitive(false) + .recommendation(false) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossier.getDossierTemplateId()) + .dossierDictionaryOnly(true) + .build()); assertThat(returnedtype1.isDossierDictionaryOnly()).isTrue(); assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), null, false).getTypes().size()).isEqualTo(1); @@ -402,8 +428,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(dictionary.getEntries().size()).isEqualTo(5); } + @Test public void testDossierTemplateAndDossierMissmatched() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); var dossierTemplate1 = dossierTemplateTesterAndProvider.provideTestTemplate("dossierTemplate1"); var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier"); @@ -415,6 +443,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { } + @Test public void testGetMergedDictionaries() { @@ -428,11 +457,11 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word2", "word3"), false, null, DictionaryEntryType.ENTRY); dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive"), false, null, DictionaryEntryType.FALSE_POSITIVE); dictionaryClient.addEntry(type.getType(), - type.getDossierTemplateId(), - List.of("false_recommendation1", "false_recommendation2"), - false, - null, - DictionaryEntryType.FALSE_RECOMMENDATION); + type.getDossierTemplateId(), + List.of("false_recommendation1", "false_recommendation2"), + false, + null, + DictionaryEntryType.FALSE_RECOMMENDATION); var loadedType1 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); @@ -442,14 +471,19 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word4"), false, dossier.getId(), DictionaryEntryType.ENTRY); dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), List.of("word2"), dossier.getId(), DictionaryEntryType.ENTRY); - dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive3"), false, dossier.getId(), DictionaryEntryType.FALSE_POSITIVE); dictionaryClient.addEntry(type.getType(), - type.getDossierTemplateId(), - List.of("false_recommendation3", "false_recommendation4"), - false, - dossier.getId(), - DictionaryEntryType.FALSE_RECOMMENDATION); - Assertions.assertThrows(FeignException.Unauthorized.class, () -> dictionaryClient.getMergedDictionaries(type.getType() + ";", dossierTemplate.getId(), dossier.getId())); + type.getDossierTemplateId(), + List.of("false_positive1", "false_positive3"), + false, + dossier.getId(), + DictionaryEntryType.FALSE_POSITIVE); + dictionaryClient.addEntry(type.getType(), + type.getDossierTemplateId(), + List.of("false_recommendation3", "false_recommendation4"), + false, + dossier.getId(), + DictionaryEntryType.FALSE_RECOMMENDATION); + Assertions.assertThrows(FeignException.Unauthorized.class, () -> dictionaryClient.getMergedDictionaries(type.getType() + ";", dossierTemplate.getId(), dossier.getId())); Dictionary mergedDict = dictionaryClient.getMergedDictionaries(type.getType(), dossierTemplate.getId(), dossier.getId()); assertThat(mergedDict).isNotNull(); @@ -458,6 +492,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(mergedDict.getFalseRecommendationEntries().size()).isEqualTo(4); } + @Test public void testGetDictionaryForType() { @@ -468,11 +503,11 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word2", "word3"), false, null, DictionaryEntryType.ENTRY); dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive"), false, null, DictionaryEntryType.FALSE_POSITIVE); dictionaryClient.addEntry(type.getType(), - type.getDossierTemplateId(), - List.of("false_recommendation1", "false_recommendation2"), - false, - null, - DictionaryEntryType.FALSE_RECOMMENDATION); + type.getDossierTemplateId(), + List.of("false_recommendation1", "false_recommendation2"), + false, + null, + DictionaryEntryType.FALSE_RECOMMENDATION); var loadedType1 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); @@ -482,15 +517,20 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word4"), false, dossier.getId(), DictionaryEntryType.ENTRY); dictionaryClient.deleteEntries(type.getType(), type.getDossierTemplateId(), List.of("word2"), dossier.getId(), DictionaryEntryType.ENTRY); - dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive3"), false, dossier.getId(), DictionaryEntryType.FALSE_POSITIVE); dictionaryClient.addEntry(type.getType(), - type.getDossierTemplateId(), - List.of("false_recommendation3", "false_recommendation4"), - false, - dossier.getId(), - DictionaryEntryType.FALSE_RECOMMENDATION); + type.getDossierTemplateId(), + List.of("false_positive1", "false_positive3"), + false, + dossier.getId(), + DictionaryEntryType.FALSE_POSITIVE); + dictionaryClient.addEntry(type.getType(), + type.getDossierTemplateId(), + List.of("false_recommendation3", "false_recommendation4"), + false, + dossier.getId(), + DictionaryEntryType.FALSE_RECOMMENDATION); - var loadedType2 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), dossier.getId()); + var loadedType2 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), dossier.getId()); assertThat(loadedType2.getEntries()).hasSize(2); assertThat(loadedType2.getFalsePositiveEntries()).hasSize(2); @@ -500,6 +540,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { // assertThat(result.getStatusCode().value()).isEqualTo(HttpStatus.OK.value()); } + @Test public void testSortedEntries() { @@ -513,11 +554,11 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), testList1, false, null, DictionaryEntryType.ENTRY); dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), testList2, false, null, DictionaryEntryType.FALSE_POSITIVE); dictionaryClient.addEntry(type.getType(), - type.getDossierTemplateId(), - List.of("false_recommendation1", "afalse_recommendation2"), - false, - null, - DictionaryEntryType.FALSE_RECOMMENDATION); + type.getDossierTemplateId(), + List.of("false_recommendation1", "afalse_recommendation2"), + false, + null, + DictionaryEntryType.FALSE_RECOMMENDATION); var loadedType1 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); @@ -542,25 +583,46 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(falsePositives.get(5)).isEqualTo("William C. Spare"); assertThat(falsePositives.get(6)).isEqualTo("William c. Spare"); assertThat(loadedType1.getFalseRecommendationEntries()).hasSize(2); - assertThat(loadedType1.getFalseRecommendationEntries().get(0)).isEqualTo("afalse_recommendation2"); - assertThat(loadedType1.getFalseRecommendationEntries().get(1)).isEqualTo("false_recommendation1"); + assertThat(loadedType1.getFalseRecommendationEntries() + .get(0)).isEqualTo("afalse_recommendation2"); + assertThat(loadedType1.getFalseRecommendationEntries() + .get(1)).isEqualTo("false_recommendation1"); } + @Test public void testSortedEntriesTest() { var testList1 = List.of("William c. Spare", "Charalampos", "Carina Wilson", "PATRICIA A. SHEEHY", "William C. Spare", "carlsen", "Patricia A. Sheehy"); var testList2 = List.of("William C. Spare", "Charalampos", "Carina Wilson", "Patricia A. Sheehy", "William c. Spare", "carlsen", "PATRICIA A. SHEEHY"); System.out.println("Test list 1: " + testList1); - var sortedList1 = testList1.stream().sorted().sorted(Comparator.comparing(String::toLowerCase)).toList(); - var sortedList12 = testList1.stream().sorted().toList(); - var sortedList11 = testList1.stream().sorted(String:: compareToIgnoreCase).toList(); - var sortedList13 = testList1.stream().sorted(DictionaryService.entryComparator).toList(); + var sortedList1 = testList1.stream() + .sorted() + .sorted(Comparator.comparing(String::toLowerCase)) + .toList(); + var sortedList12 = testList1.stream() + .sorted() + .toList(); + var sortedList11 = testList1.stream() + .sorted(String::compareToIgnoreCase) + .toList(); + var sortedList13 = testList1.stream() + .sorted(DictionaryService.entryComparator) + .toList(); - var sortedList2 = testList2.stream().sorted().sorted(Comparator.comparing(String::toLowerCase)).toList(); - var sortedList22 = testList2.stream().sorted().toList(); - var sortedList21 = testList2.stream().sorted(String::compareToIgnoreCase).toList(); - var sortedList23 = testList2.stream().sorted(DictionaryService.entryComparator).toList(); + var sortedList2 = testList2.stream() + .sorted() + .sorted(Comparator.comparing(String::toLowerCase)) + .toList(); + var sortedList22 = testList2.stream() + .sorted() + .toList(); + var sortedList21 = testList2.stream() + .sorted(String::compareToIgnoreCase) + .toList(); + var sortedList23 = testList2.stream() + .sorted(DictionaryService.entryComparator) + .toList(); System.out.println("Test list 2: " + testList2); System.out.println("With sorted()sorted(Comparator.comparing(String::toLowerCase)): " + sortedList1); System.out.println("With sorted()sorted(Comparator.comparing(String::toLowerCase)): " + sortedList2); @@ -577,6 +639,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(sortedList11).isNotEqualTo(sortedList21); } + @Test public void testCreateAndDeleteLargeDictionary() { @@ -629,14 +692,16 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { var dictionary = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); assertThat(dictionary.getEntries()).hasSize(1); - assertThat(dictionary.getEntries().get(0)).isEqualTo(word); + assertThat(dictionary.getEntries() + .get(0)).isEqualTo(word); } @SuppressWarnings("SameParameterValue") private List createDummyEntries(int numberOfEntries) { - return IntStream.range(0, numberOfEntries).mapToObj(i -> "someWord" + i).toList(); + return IntStream.range(0, numberOfEntries).mapToObj(i -> "someWord" + i) + .toList(); } @@ -652,21 +717,19 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { } - private TypeValue createDossierRedactionsDictionary(String dossierTemplateId){ + private TypeValue createDossierRedactionsDictionary(String dossierTemplateId) { + return dictionaryClient.addType(CreateTypeValue.builder() - .type("dossier_redaction") - .label("Dossier Redaction") - .addToDictionaryAction(true) - .hasDictionary(true) - .hint(false) - .rank(100) - .dossierTemplateId(dossierTemplateId) - .hexColor("#FFFFFF") - .recommendationHexColor("#FFFFFF") - .build()); + .type("dossier_redaction") + .label("Dossier Redaction") + .addToDictionaryAction(true) + .hasDictionary(true) + .hint(false) + .rank(100) + .dossierTemplateId(dossierTemplateId) + .hexColor("#FFFFFF") + .recommendationHexColor("#FFFFFF") + .build()); } - - - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java index a50495569..d5394986a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java @@ -68,6 +68,7 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest { @Autowired private EncryptionDecryptionService encryptionDecryptionService; + @Test @SneakyThrows public void testDigitalSignatureKms() { @@ -81,7 +82,7 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest { final String kmsServiceEndpoint = "kmsServiceEndpoint"; final byte[] certificate = Files.readAllBytes(new ClassPathResource("files/TestCert.cer").getFile().toPath()); - var data =encryptionDecryptionService.encrypt(new String(certificate)); + var data = encryptionDecryptionService.encrypt(new String(certificate)); var res = encryptionDecryptionService.decrypt(data); DigitalSignatureKms digitalSignature = DigitalSignatureKms.builder() diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java index e8bd62bc2..49014a429 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java @@ -81,8 +81,7 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { .iterator().next().getId(); List dossierAttributes = new ArrayList<>(); - dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configId).dossierId(dossier.getId()).value("lorem ipsum") - .build()); + dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configId).dossierId(dossier.getId()).value("lorem ipsum").build()); dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(dossierAttributes)); var loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId()); @@ -140,20 +139,15 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedAttributes.getDossierAttributeConfigs()).isEmpty(); dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), - DossierAttributeConfig.builder().label("Text").editable(true).type(DossierAttributeType.TEXT) - .build()); + DossierAttributeConfig.builder().label("Text").editable(true).type(DossierAttributeType.TEXT).build()); dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), - DossierAttributeConfig.builder().label("Number").editable(true).type(DossierAttributeType.NUMBER) - .build()); + DossierAttributeConfig.builder().label("Number").editable(true).type(DossierAttributeType.NUMBER).build()); dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), - DossierAttributeConfig.builder().label("Date").editable(true).type(DossierAttributeType.DATE) - .build()); + DossierAttributeConfig.builder().label("Date").editable(true).type(DossierAttributeType.DATE).build()); dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), - DossierAttributeConfig.builder().label("Image1").editable(true).type(DossierAttributeType.IMAGE) - .build()); + DossierAttributeConfig.builder().label("Image1").editable(true).type(DossierAttributeType.IMAGE).build()); dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), - DossierAttributeConfig.builder().label("Image2").editable(true).type(DossierAttributeType.IMAGE) - .build()); + DossierAttributeConfig.builder().label("Image2").editable(true).type(DossierAttributeType.IMAGE).build()); loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId()); assertThat(loadedAttributes.getDossierAttributeConfigs().size()).isEqualTo(5); @@ -165,18 +159,13 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { String valueConfig3 = "data:image/png;base64,w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==..."; String valueConfig4 = "data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4..."; List dossierAttributes = new ArrayList<>(); - dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(0).getId()).dossierId(dossier.getId()).value(valueConfig0) - .build()); - dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(1).getId()).dossierId(dossier.getId()).value(valueConfig1) - .build()); - dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(2).getId()).dossierId(dossier.getId()).value(valueConfig2) - .build()); - dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(3).getId()).dossierId(dossier.getId()).value(valueConfig3) - .build()); + dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(0).getId()).dossierId(dossier.getId()).value(valueConfig0).build()); + dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(1).getId()).dossierId(dossier.getId()).value(valueConfig1).build()); + dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(2).getId()).dossierId(dossier.getId()).value(valueConfig2).build()); + dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(3).getId()).dossierId(dossier.getId()).value(valueConfig3).build()); dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(dossierAttributes)); - DossierAttribute imageAttribute = DossierAttribute.builder().dossierAttributeConfigId(configIds.get(4).getId()).dossierId(dossier.getId()).value(valueConfig4) - .build(); + DossierAttribute imageAttribute = DossierAttribute.builder().dossierAttributeConfigId(configIds.get(4).getId()).dossierId(dossier.getId()).value(valueConfig4).build(); dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(), imageAttribute); var loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId()); @@ -285,7 +274,6 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { e = assertThrows(FeignException.class, () -> dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(invalidDossierAttributes3))); assertEquals(400, e.status()); - } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java index bd3af379b..7df03e79d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java @@ -56,6 +56,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { @BeforeEach public void setupData() { + TenantContext.setTenantId("redaction"); var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); dossier1 = dossierTesterAndProvider.provideTestDossier(dossierTemplate); @@ -68,46 +69,50 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { // alter file 1 var loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId()); assertThat(loadedFile1.isHasRedactions()).isFalse(); - fileRepository.findById(file1.getId()).ifPresent((file) -> { - file.setNumberOfPages(NUMBER_PAGES_ANALYZED); - file.setHasRedactions(true); - file.setHasHints(true); - file.setHasUpdates(true); - file.setLastUpdated(NOW); - file.setFileManipulationDate(null); - fileRepository.save(file); - }); + fileRepository.findById(file1.getId()) + .ifPresent((file) -> { + file.setNumberOfPages(NUMBER_PAGES_ANALYZED); + file.setHasRedactions(true); + file.setHasHints(true); + file.setHasUpdates(true); + file.setLastUpdated(NOW); + file.setFileManipulationDate(null); + fileRepository.save(file); + }); loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId()); assertThat(loadedFile1.isHasRedactions()).isTrue(); assertThat(loadedFile1.getLastUpdated()).isEqualTo(NOW); // alter file 2 - fileRepository.findById(file2.getId()).ifPresent((file) -> { - file.setHasSuggestions(true); - file.setLastUpdated(OLDER_1); - file.setFileManipulationDate(OLDER_2); - fileRepository.save(file); - }); + fileRepository.findById(file2.getId()) + .ifPresent((file) -> { + file.setHasSuggestions(true); + file.setLastUpdated(OLDER_1); + file.setFileManipulationDate(OLDER_2); + fileRepository.save(file); + }); // second dossier dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier2"); var file3 = fileTesterAndProvider.testAndProvideFile(dossier2, "file3"); var file4 = fileTesterAndProvider.testAndProvideFile(dossier2, "file4"); //alter file 2 - fileRepository.findById(file3.getId()).ifPresent((file) -> { - file.setLastUpdated(OLDER_1); - file.setFileManipulationDate(null); - fileRepository.save(file); - }); + fileRepository.findById(file3.getId()) + .ifPresent((file) -> { + file.setLastUpdated(OLDER_1); + file.setFileManipulationDate(null); + fileRepository.save(file); + }); //alter file 4 - fileRepository.findById(file4.getId()).ifPresent((file) -> { - file.setHasHints(true); - file.setWorkflowStatus(WorkflowStatus.APPROVED); - file.setLastUpdated(OLDER_2); - file.setFileManipulationDate(OLDER_2); - fileRepository.save(file); - }); + fileRepository.findById(file4.getId()) + .ifPresent((file) -> { + file.setHasHints(true); + file.setWorkflowStatus(WorkflowStatus.APPROVED); + file.setLastUpdated(OLDER_2); + file.setFileManipulationDate(OLDER_2); + fileRepository.save(file); + }); } @@ -123,7 +128,8 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(dossierStats.isHasSuggestionsFilePresent()).isTrue(); assertThat(dossierStats.isHasUpdatesFilePresent()).isTrue(); assertThat(dossierStats.isHasNoFlagsFilePresent()).isFalse(); - assertThat(dossierStats.getFileCountPerProcessingStatus().get(ProcessingStatus.PRE_PROCESSING_QUEUED)).isEqualTo(2); + assertThat(dossierStats.getFileCountPerProcessingStatus() + .get(ProcessingStatus.PRE_PROCESSING_QUEUED)).isEqualTo(2); assertThat(dossierStats.getLastFileUpdateDate()).isEqualTo(NOW); assertThat(dossierStats.getFileManipulationDate()).isEqualTo(OLDER_2); } @@ -131,6 +137,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { @Test public void testDossierStatsWithMoreDossierIds() { + Set dossierIds = new HashSet<>(); dossierIds.add(dossier1.getId()); dossierIds.add(dossier2.getId()); @@ -138,7 +145,10 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { List dossierStatsList = dossierStatsClient.getDossierStats(dossierIds); // get the result for dossier2 - DossierStats dossierStats = dossierStatsList.stream().filter(d -> d.getDossierId().equals(dossier2.getId())).findAny().get(); + DossierStats dossierStats = dossierStatsList.stream() + .filter(d -> d.getDossierId().equals(dossier2.getId())) + .findAny() + .get(); assertThat(dossierStats.getNumberOfFiles()).isEqualTo(2); assertThat(dossierStats.getNumberOfPages()).isEqualTo(0); assertThat(dossierStats.isHasRedactionsFilePresent()).isFalse(); @@ -146,8 +156,10 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(dossierStats.isHasSuggestionsFilePresent()).isFalse(); assertThat(dossierStats.isHasUpdatesFilePresent()).isFalse(); assertThat(dossierStats.isHasNoFlagsFilePresent()).isTrue(); - assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.NEW)).isEqualTo(1); - assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1); + assertThat(dossierStats.getFileCountPerWorkflowStatus() + .get(WorkflowStatus.NEW)).isEqualTo(1); + assertThat(dossierStats.getFileCountPerWorkflowStatus() + .get(WorkflowStatus.APPROVED)).isEqualTo(1); assertThat(dossierStats.getLastFileUpdateDate()).isEqualTo(OLDER_1); assertThat(dossierStats.getFileManipulationDate()).isEqualTo(OLDER_2); } @@ -155,6 +167,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { @Test public void testArchivedAndDeletedDossierStats() { + DossierStats dossierStats = dossierStatsClient.getDossierStats(dossier1.getId()); assertThat(dossierStats.getNumberOfFiles()).isEqualTo(2); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java index b4b82ff22..232d8cc6d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java @@ -69,16 +69,17 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT try (ZipOutputStream zs = new ZipOutputStream(bos)) { try (Stream paths = Files.walk(p)) { { - paths.filter(path -> !Files.isDirectory(path)).forEach(path -> { - ZipEntry zipEntry = new ZipEntry(p.relativize(path).toString()); - try { - zs.putNextEntry(zipEntry); - Files.copy(path, zs); - zs.closeEntry(); - } catch (IOException e) { - log.error("Failed to read a file", e); - } - }); + paths.filter(path -> !Files.isDirectory(path)) + .forEach(path -> { + ZipEntry zipEntry = new ZipEntry(p.relativize(path).toString()); + try { + zs.putNextEntry(zipEntry); + Files.copy(path, zs); + zs.closeEntry(); + } catch (IOException e) { + log.error("Failed to read a file", e); + } + }); } } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java index 04c1a6ace..fb7674c77 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java @@ -93,29 +93,29 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe var dossier = dossierTesterAndProvider.provideTestDossier(); var addedType1 = dictionaryClient.addType(CreateTypeValue.builder() - .type("type_dossier") - .label("Dossier Redactions") - .hexColor("#fcba03") - .rank(100) - .description("Something") - .addToDictionaryAction(false) - .dossierTemplateId(dossier.getDossierTemplateId()) - .build()); + .type("type_dossier") + .label("Dossier Redactions") + .hexColor("#fcba03") + .rank(100) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossier.getDossierTemplateId()) + .build()); assertThat(addedType1).isNotNull(); var dossierTemplate2 = provideTestTemplate("dossierTemp2"); var addedType = dictionaryClient.addType(CreateTypeValue.builder() - .type(TYPE_ID_1) - .label("Dossier Redactions") - .hexColor("#fcba03") - .rank(100) - .description("Something") - .addToDictionaryAction(false) - .dossierTemplateId(dossierTemplate2.getId()) - .hasDictionary(true) - .build()); + .type(TYPE_ID_1) + .label("Dossier Redactions") + .hexColor("#fcba03") + .rank(100) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate2.getId()) + .hasDictionary(true) + .build()); assertThat(addedType).isNotNull(); var entries1 = new ArrayList(); @@ -127,15 +127,15 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe assertThat(dictionary.getEntries().size()).isEqualTo(entries1.size()); var addedType2 = dictionaryClient.addType(CreateTypeValue.builder() - .type(TYPE_ID_2) - .label("Dossier Redactions 2") - .hexColor("#fcba03") - .rank(102) - .description("Something") - .addToDictionaryAction(false) - .dossierTemplateId(dossierTemplate2.getId()) - .hasDictionary(true) - .build()); + .type(TYPE_ID_2) + .label("Dossier Redactions 2") + .hexColor("#fcba03") + .rank(102) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate2.getId()) + .hasDictionary(true) + .build()); var entries2 = new ArrayList(); entries2.add("entry1"); entries2.add("entry2"); @@ -147,15 +147,15 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe var dossierTemplate3 = provideTestTemplate("dossierTemp3"); var addedType3 = dictionaryClient.addType(CreateTypeValue.builder() - .type(TYPE_ID_3) - .label("Dossier Redactions 3") - .hexColor("#fcba03") - .rank(100) - .description("Something") - .addToDictionaryAction(false) - .dossierTemplateId(dossierTemplate3.getId()) - .hasDictionary(true) - .build()); + .type(TYPE_ID_3) + .label("Dossier Redactions 3") + .hexColor("#fcba03") + .rank(100) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate3.getId()) + .hasDictionary(true) + .build()); assertThat(addedType3).isNotNull(); var entries3 = new ArrayList(); @@ -171,15 +171,15 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe var dossierTemplate5 = provideTestTemplate("dossierTemp5"); var addedType5 = dictionaryClient.addType(CreateTypeValue.builder() - .type("type_dossier5") - .label("5") - .hexColor("#fcba03") - .rank(100) - .description("Something") - .addToDictionaryAction(false) - .dossierTemplateId(dossierTemplate5.getId()) - .hasDictionary(true) - .build()); + .type("type_dossier5") + .label("5") + .hexColor("#fcba03") + .rank(100) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate5.getId()) + .hasDictionary(true) + .build()); assertThat(addedType5).isNotNull(); Set dossierTemplateIds = new HashSet<>(); @@ -199,8 +199,14 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe assertThat(dossierTemplateStats1.getDossierTemplateId()).isEqualTo(dossierTemplate2.getId()); assertThat(dossierTemplateStats1.getNumberOfDictionaries()).isEqualTo(2); List dictionarySummaryList = dossierTemplateStats1.getDictionarySummaryList(); - assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_1)).findAny().get().getEntriesCount()).isEqualTo(entries1.size()); - assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().get().getEntriesCount()).isEqualTo(entries2.size()); + assertThat(dictionarySummaryList.stream() + .filter(d -> d.getType().equals(TYPE_ID_1)) + .findAny() + .get().getEntriesCount()).isEqualTo(entries1.size()); + assertThat(dictionarySummaryList.stream() + .filter(d -> d.getType().equals(TYPE_ID_2)) + .findAny() + .get().getEntriesCount()).isEqualTo(entries2.size()); // dossier template with no type DossierTemplateDictionaryStats dossierTemplateStats3 = dossierTemplateStatsList.stream() @@ -224,7 +230,10 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe .get(); dictionarySummaryList = dossierTemplateStats2.getDictionarySummaryList(); - assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().get().getEntriesCount()).isEqualTo(entries2.size() - entries22.size()); + assertThat(dictionarySummaryList.stream() + .filter(d -> d.getType().equals(TYPE_ID_2)) + .findAny() + .get().getEntriesCount()).isEqualTo(entries2.size() - entries22.size()); // delete all entries, stats should be updated var entries23 = new ArrayList(); @@ -246,7 +255,9 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe .get(); dictionarySummaryList = dossierTemplateStats23.getDictionarySummaryList(); - assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().isEmpty()).isTrue(); + assertThat(dictionarySummaryList.stream() + .filter(d -> d.getType().equals(TYPE_ID_2)) + .findAny().isEmpty()).isTrue(); } @@ -274,11 +285,11 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe var template = dossierTemplateTesterAndProvider.provideTestTemplate("test template: " + i); var status = dossierStatusClient.createOrUpdateDossierStatus(DossierStatusRequest.builder() - .dossierTemplateId(template.getId()) - .name("test") - .color("#cccccc") - .rank(100) - .build()); + .dossierTemplateId(template.getId()) + .name("test") + .color("#cccccc") + .rank(100) + .build()); for (int j = 0; j < 4; j++) { var dossier = dossierTesterAndProvider.provideTestDossierQuick(template, "test dossier: " + j + " - " + i, j % 2 == 0 ? status : null); @@ -320,11 +331,11 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe var template = dossierTemplateTesterAndProvider.provideTestTemplate("test template inactive: "); var status = dossierStatusClient.createOrUpdateDossierStatus(DossierStatusRequest.builder() - .dossierTemplateId(template.getId()) - .name("test") - .color("#cccccc") - .rank(100) - .build()); + .dossierTemplateId(template.getId()) + .name("test") + .color("#cccccc") + .rank(100) + .build()); var dossier = dossierTesterAndProvider.provideTestDossierQuick(template, "test dossier: ", status); dossierClient.deleteDossier(dossier.getId()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index 3f8e82bc8..79f4383a8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -27,8 +27,10 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; + import feign.FeignException; import lombok.SneakyThrows; + import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -231,27 +233,27 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(createdType1.getType(), createdType1.getDossierTemplateId(), List.of("entry5", "entry6"), false, null, DictionaryEntryType.FALSE_RECOMMENDATION); dossierAttributeConfigClient.setDossierAttributesConfig(dossierTemplate.getId(), - new DossierAttributesConfig(List.of(DossierAttributeConfig.builder() - .dossierTemplateId(dossierTemplate.getId()) - .editable(false) - .id("dossierAttributeId") - .label("labelDossierAttribute") - .type(DossierAttributeType.TEXT) - .placeholder("placeholderDossier") - .build()))); + new DossierAttributesConfig(List.of(DossierAttributeConfig.builder() + .dossierTemplateId(dossierTemplate.getId()) + .editable(false) + .id("dossierAttributeId") + .label("labelDossierAttribute") + .type(DossierAttributeType.TEXT) + .placeholder("placeholderDossier") + .build()))); fileAttributeConfigClient.setFileAttributesConfig(dossierTemplate.getId(), - new FileAttributesConfig(List.of(FileAttributeConfig.builder() - .dossierTemplateId(dossierTemplate.getId()) - .primaryAttribute(true) - .csvColumnHeader("12345") - .displayedInFileList(false) - .editable(false) - .filterable(false) - .id("fileAttributeId") - .label("labelFileAttribute") - .type(FileAttributeType.TEXT) - .placeholder("placeholderFile") - .build()))); + new FileAttributesConfig(List.of(FileAttributeConfig.builder() + .dossierTemplateId(dossierTemplate.getId()) + .primaryAttribute(true) + .csvColumnHeader("12345") + .displayedInFileList(false) + .editable(false) + .filterable(false) + .id("fileAttributeId") + .label("labelFileAttribute") + .type(FileAttributeType.TEXT) + .placeholder("placeholderFile") + .build()))); var template = new MockMultipartFile("template", "asd".getBytes()); reportTemplateClient.uploadTemplate(template, dossierTemplate.getId(), true, false); var col = Colors.builder() @@ -318,34 +320,41 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.getModifiedBy()).isEqualTo("user"); assertThat(loadedTemplate.getCreatedBy()).isEqualTo("user"); - assertThat(dossierAttributeConfigClient.getDossierAttributesConfig(dossierTemplate.getId()).getDossierAttributeConfigs().get(0).getLabel()).isEqualTo( - dossierAttributeConfigClient.getDossierAttributesConfig(clonedDT.getId()).getDossierAttributeConfigs().get(0).getLabel()); - assertThat(fileAttributeConfigClient.getFileAttributesConfiguration(dossierTemplate.getId()).getFileAttributeConfigs().get(0).getCsvColumnHeader()).isEqualTo( - fileAttributeConfigClient.getFileAttributesConfiguration(clonedDT.getId()).getFileAttributeConfigs().get(0).getCsvColumnHeader()); + assertThat(dossierAttributeConfigClient.getDossierAttributesConfig(dossierTemplate.getId()).getDossierAttributeConfigs() + .get(0).getLabel()).isEqualTo(dossierAttributeConfigClient.getDossierAttributesConfig(clonedDT.getId()).getDossierAttributeConfigs() + .get(0).getLabel()); + assertThat(fileAttributeConfigClient.getFileAttributesConfiguration(dossierTemplate.getId()).getFileAttributeConfigs() + .get(0).getCsvColumnHeader()).isEqualTo(fileAttributeConfigClient.getFileAttributesConfiguration(clonedDT.getId()).getFileAttributeConfigs() + .get(0).getCsvColumnHeader()); assertThat(fileAttributeConfigClient.getFileAttributesConfiguration(dossierTemplate.getId()) - .getFilenameMappingColumnHeaderName()).isEqualTo(fileAttributeConfigClient.getFileAttributesConfiguration(clonedDT.getId()).getFilenameMappingColumnHeaderName()); + .getFilenameMappingColumnHeaderName()).isEqualTo(fileAttributeConfigClient.getFileAttributesConfiguration(clonedDT.getId()) + .getFilenameMappingColumnHeaderName()); assertThat(fileAttributeConfigClient.getFileAttributesConfiguration(dossierTemplate.getId()) - .getEncoding()).isEqualTo(fileAttributeConfigClient.getFileAttributesConfiguration(clonedDT.getId()).getEncoding()); - assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).get(0).getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates( - clonedDT.getId()).get(0).getFileName()); + .getEncoding()).isEqualTo(fileAttributeConfigClient.getFileAttributesConfiguration(clonedDT.getId()).getEncoding()); + assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .get(0).getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates(clonedDT.getId()) + .get(0).getFileName()); assertThat(dictionaryClient.getColors(dossierTemplate.getId()).getRequestAddColor()).isEqualTo(dictionaryClient.getColors(clonedDT.getId()).getRequestAddColor()); var types = getTypesSortedByRank(dossierTemplate.getId()); var clonedTypes = getTypesSortedByRank(clonedDT.getId()); assertThat(types).usingElementComparatorIgnoringFields("typeId", "dossierTemplateId").isEqualTo(clonedTypes); assertThat(dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()) - .get(0) - .getDescription()).isEqualTo(dossierStatusClient.getAllDossierStatusForTemplate(clonedDT.getId()).get(0).getDescription()); + .get(0).getDescription()).isEqualTo(dossierStatusClient.getAllDossierStatusForTemplate(clonedDT.getId()) + .get(0).getDescription()); assertThat(watermarkClient.getWatermarksForDossierTemplateId(clonedDT.getId()).size()).isEqualTo(1); assertThat(watermarkClient.getWatermarksForDossierTemplateId(dossierTemplate.getId()) - .get(0) - .getName()).isEqualTo(watermarkClient.getWatermarksForDossierTemplateId(clonedDT.getId()).get(0).getName()); + .get(0).getName()).isEqualTo(watermarkClient.getWatermarksForDossierTemplateId(clonedDT.getId()) + .get(0).getName()); } @NotNull private List getTypesSortedByRank(String dossierTemplateId) { - return dictionaryClient.getAllTypes(dossierTemplateId, null, false).getTypes().stream().sorted(DossierTemplateTest::compareByRank).toList(); + return dictionaryClient.getAllTypes(dossierTemplateId, null, false).getTypes() + .stream() + .sorted(DossierTemplateTest::compareByRank) + .toList(); } @@ -413,27 +422,27 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { dictionaryClient.addEntry(createdType1.getType(), createdType1.getDossierTemplateId(), List.of("entry5", "entry6"), false, null, DictionaryEntryType.FALSE_RECOMMENDATION); dossierAttributeConfigClient.setDossierAttributesConfig(dossierTemplate.getId(), - new DossierAttributesConfig(List.of(DossierAttributeConfig.builder() - .dossierTemplateId(dossierTemplate.getId()) - .editable(false) - .id("dossierAttributeId") - .label("labelDossierAttribute") - .type(DossierAttributeType.TEXT) - .placeholder("placeholderDossier") - .build()))); + new DossierAttributesConfig(List.of(DossierAttributeConfig.builder() + .dossierTemplateId(dossierTemplate.getId()) + .editable(false) + .id("dossierAttributeId") + .label("labelDossierAttribute") + .type(DossierAttributeType.TEXT) + .placeholder("placeholderDossier") + .build()))); fileAttributeConfigClient.setFileAttributesConfig(dossierTemplate.getId(), - new FileAttributesConfig(List.of(FileAttributeConfig.builder() - .dossierTemplateId(dossierTemplate.getId()) - .primaryAttribute(true) - .csvColumnHeader("12345") - .displayedInFileList(false) - .editable(false) - .filterable(false) - .id("fileAttributeId") - .label("labelFileAttribute") - .type(FileAttributeType.TEXT) - .placeholder("placeholderFile") - .build()))); + new FileAttributesConfig(List.of(FileAttributeConfig.builder() + .dossierTemplateId(dossierTemplate.getId()) + .primaryAttribute(true) + .csvColumnHeader("12345") + .displayedInFileList(false) + .editable(false) + .filterable(false) + .id("fileAttributeId") + .label("labelFileAttribute") + .type(FileAttributeType.TEXT) + .placeholder("placeholderFile") + .build()))); var template = new MockMultipartFile("template", "asd".getBytes()); reportTemplateClient.uploadTemplate(template, dossierTemplate.getId(), true, false); @@ -505,7 +514,10 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(existingLegalBasis.size()).isEqualTo(1); // delete justifications for export - legalBasisClient.deleteLegalBasis(dossierTemplate.getId(), existingLegalBasis.stream().map(LegalBasis::getName).collect(Collectors.toList())); + legalBasisClient.deleteLegalBasis(dossierTemplate.getId(), + existingLegalBasis.stream() + .map(LegalBasis::getName) + .collect(Collectors.toList())); existingLegalBasis = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); assertThat(existingLegalBasis.isEmpty()).isTrue(); @@ -513,7 +525,8 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var statuses = downloadClient.getDownloadStatus(); assertThat(statuses.getDownloadStatus()).isNotEmpty(); - var status = statuses.getDownloadStatus().iterator().next(); + var status = statuses.getDownloadStatus() + .iterator().next(); exportDownloadReportMessageReceiver.receive(new DownloadJob(status.getUserId(), status.getStorageId(), false)); // add new justifications @@ -550,9 +563,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { List entriesValuesList = List.of("Adam", "Eva", "drei sdfs"); - try (ByteArrayOutputStream bt = new ByteArrayOutputStream(); - OutputStreamWriter osw = new OutputStreamWriter(bt, StandardCharsets.UTF_8); - BufferedWriter writer = new BufferedWriter(osw)) { + try (ByteArrayOutputStream bt = new ByteArrayOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(bt, + StandardCharsets.UTF_8); BufferedWriter writer = new BufferedWriter( + osw)) { for (String entry : entriesValuesList) { writer.write(entry); @@ -567,22 +580,24 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { } } + @Test @Disabled @SneakyThrows public void changeEncodingFromModUTF8ToUTF8() { + String dossierTemplatesRepo = "/home/aoezyetimoglu/repositories/PROJECTMANAGEMENT/Syngenta/business-logic/dev-v2/"; - Stream.of( - Files.walk(Path.of(dossierTemplatesRepo + "EFSA_Regulation_2021")), - Files.walk(Path.of(dossierTemplatesRepo + "EFSA_sanitisation_GFL_v1")), - Files.walk(Path.of(dossierTemplatesRepo + "EFSA_sanitisation_pre_GFL_v1")), - Files.walk(Path.of(dossierTemplatesRepo + "Flora_SCM_(Syngenta_Evaluation)")), - Files.walk(Path.of(dossierTemplatesRepo + "Manual_Redaction"))// + Stream.of(Files.walk(Path.of(dossierTemplatesRepo + "EFSA_Regulation_2021")), + Files.walk(Path.of(dossierTemplatesRepo + "EFSA_sanitisation_GFL_v1")), + Files.walk(Path.of(dossierTemplatesRepo + "EFSA_sanitisation_pre_GFL_v1")), + Files.walk(Path.of(dossierTemplatesRepo + "Flora_SCM_(Syngenta_Evaluation)")), + Files.walk(Path.of(dossierTemplatesRepo + "Manual_Redaction")) +// ) .flatMap(Function.identity())// .filter(path -> path.getFileName().toString().equals("entries.txt") || // - path.getFileName().toString().equals("falsePositives.txt") || // - path.getFileName().toString().equals("falseRecommendations.txt")// + path.getFileName().toString().equals("falsePositives.txt") || // + path.getFileName().toString().equals("falseRecommendations.txt")// ) .map(Path::toFile)// .forEach(file -> { @@ -595,7 +610,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { }); } + private void changeEncoding(File modUTF8File) throws IOException { + var path = modUTF8File.getPath(); var bytes = convertFileToByteArray(modUTF8File); @@ -605,7 +622,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { } + private static byte[] convertFileToByteArray(File file) throws IOException { + Path path = file.toPath(); return Files.readAllBytes(path); } @@ -627,12 +646,12 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { return entries; } + private void writeEntriesListToFileUTF8(List entriesValuesList, String path) { - try (ByteArrayOutputStream bt = new ByteArrayOutputStream(); - OutputStreamWriter osw = new OutputStreamWriter(bt, StandardCharsets.UTF_8); - BufferedWriter writer = new BufferedWriter(osw); - FileOutputStream fileOutputStream = new FileOutputStream(path)) { + try (ByteArrayOutputStream bt = new ByteArrayOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(bt, + StandardCharsets.UTF_8); BufferedWriter writer = new BufferedWriter( + osw); FileOutputStream fileOutputStream = new FileOutputStream(path)) { Iterator iterator = entriesValuesList.iterator(); @@ -841,6 +860,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { // } } + @Test public void testDossierTemplateWithOcrByDefault() { @@ -867,6 +887,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.isOcrByDefault()).isFalse(); } + @Test public void testDossierTemplateWithRemoveWatermark() { @@ -893,6 +914,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.isRemoveWatermark()).isFalse(); } + @Test public void testUpdateDossierTemplateWithInvalidDates() { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 0650edd3a..f87d39a54 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -66,13 +66,16 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { @Autowired private TypeProvider typeProvider; + @Test @Disabled // TODO parallel does not work with tenantContext currently public void testDossierRaceCondition() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); dossierTemplateTesterAndProvider.provideDefaultColors(dossierTemplate.getId()); - IntStream.range(0, 10).parallel().forEach(x -> dossierTesterAndProvider.provideTestDossier(dossierTemplate, "race condition dossier: " + x)); + IntStream.range(0, 10) + .parallel() + .forEach(x -> dossierTesterAndProvider.provideTestDossier(dossierTemplate, "race condition dossier: " + x)); var allDossiers = dossierClient.getDossiers(true, true); var dossierCount = allDossiers.size(); assertThat(dossierCount).isEqualTo(10); @@ -85,14 +88,16 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); dossierTemplateTesterAndProvider.provideDefaultColors(dossierTemplate.getId()); - IntStream.range(0, 4).parallel().forEach(x -> { - try { - dossierTesterAndProvider.provideTestDossier(dossierTemplate, "sameNameDossier"); - } catch (Exception e) { - // conflict exception is expected - log.debug("conflict exception is expected"); - } - }); + IntStream.range(0, 4) + .parallel() + .forEach(x -> { + try { + dossierTesterAndProvider.provideTestDossier(dossierTemplate, "sameNameDossier"); + } catch (Exception e) { + // conflict exception is expected + log.debug("conflict exception is expected"); + } + }); var allDossiers = dossierClient.getDossiers(true, true); var dossierCount = allDossiers.size(); assertThat(dossierCount).isEqualTo(1); @@ -195,7 +200,8 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate).isEqualTo(updated); - dossierClient.getDossiers(false, false).forEach(ld -> dossierClient.deleteDossier(ld.getId())); + dossierClient.getDossiers(false, false) + .forEach(ld -> dossierClient.deleteDossier(ld.getId())); assertThat(dossierClient.getDossiers(false, false)).isEmpty(); assertThat(dossierClient.getSoftDeletedDossiers().size()).isEqualTo(1); @@ -438,7 +444,8 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); // Remove dossier - dossierClient.getDossiers(false, false).forEach(ld -> dossierClient.deleteDossier(ld.getId())); + dossierClient.getDossiers(false, false) + .forEach(ld -> dossierClient.deleteDossier(ld.getId())); dossierClient.hardDeleteDossiers(Sets.newHashSet(dossier.getId())); assertThat(dossierClient.getDossiers(false, false)).isEmpty(); assertThat(dossierClient.getSoftDeletedDossiers()).isEmpty(); @@ -447,9 +454,9 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { private List provideTestReportTemplates(Dossier dossier) { - var template1 = new MockMultipartFile("reportTemplate1.docx","reportTemplate1.docx","application/word" ,new byte[]{1, 2, 3, 4}); - var template2 = new MockMultipartFile("reportTemplate2.docx","reportTemplate2.docx","application/word" ,new byte[]{1, 2, 3, 4}); - var template3 = new MockMultipartFile("reportTemplate2.docx","reportTemplate3.docx","application/word" ,new byte[]{1, 2, 3, 4}); + var template1 = new MockMultipartFile("reportTemplate1.docx", "reportTemplate1.docx", "application/word", new byte[]{1, 2, 3, 4}); + var template2 = new MockMultipartFile("reportTemplate2.docx", "reportTemplate2.docx", "application/word", new byte[]{1, 2, 3, 4}); + var template3 = new MockMultipartFile("reportTemplate2.docx", "reportTemplate3.docx", "application/word", new byte[]{1, 2, 3, 4}); reportTemplateClient.uploadTemplate(template1, dossier.getDossierTemplateId(), true, false); reportTemplateClient.uploadTemplate(template2, dossier.getDossierTemplateId(), true, false); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java index 855322c1e..fe9391237 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -45,9 +45,11 @@ import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.model.TenantResponse; + import lombok.AccessLevel; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -121,11 +123,11 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes assertThat(updatedDossier.getReportTemplateIds()).isNotEmpty(); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .dossierId(testData.getDossierId()) - .downloadFileTypes(Set.of(DownloadFileType.ORIGINAL)) - .fileIds(Collections.singletonList(testData.file.getId())) - .redactionPreviewColor("#aaaaaa") - .build()); + .dossierId(testData.getDossierId()) + .downloadFileTypes(Set.of(DownloadFileType.ORIGINAL)) + .fileIds(Collections.singletonList(testData.file.getId())) + .redactionPreviewColor("#aaaaaa") + .build()); List downloadStatuses = downloadClient.getDownloadStatus().getDownloadStatus(); assertThat(downloadStatuses).hasSize(1); @@ -145,11 +147,11 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes downloadReportMessageReceiver.receive(reportResultMessage); redactionResultMessageReceiver.receive(RedactionResultMessage.builder() - .downloadId(downloadId) - .dossierId(testData.getDossierId()) - .fileId(testData.getFileId()) - .redactionResultDetails(Collections.emptyList()) - .build()); + .downloadId(downloadId) + .dossierId(testData.getDossierId()) + .fileId(testData.getFileId()) + .redactionResultDetails(Collections.emptyList()) + .build()); // This set in DownloadMessageReceiver first async step via queue is unneeded and can be removed later. downloadStatusPersistenceService.updateStatus(downloadId, DownloadStatusValue.GENERATING); @@ -171,18 +173,20 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes private void createDossierInService(DossierWithSingleFile testData, List availableTemplates) { dossierClient.createDossierOrUpdateDossier(DossierRequest.builder() - .dossierId(testData.getDossierId()) - .dossierName(testData.dossier.getDossierName()) - .description(testData.dossier.getDescription()) - .ownerId(testData.dossier.getOwnerId()) - .memberIds(testData.dossier.getMemberIds()) - .approverIds(testData.dossier.getApproverIds()) - .downloadFileTypes(testData.dossier.getDownloadFileTypes()) - .watermarkId(testData.dossier.getWatermarkId()) - .dueDate(testData.dossier.getDueDate()) - .dossierTemplateId(testData.dossier.getDossierTemplateId()) - .reportTemplateIds(availableTemplates.stream().map(ReportTemplate::getTemplateId).collect(Collectors.toSet())) - .build()); + .dossierId(testData.getDossierId()) + .dossierName(testData.dossier.getDossierName()) + .description(testData.dossier.getDescription()) + .ownerId(testData.dossier.getOwnerId()) + .memberIds(testData.dossier.getMemberIds()) + .approverIds(testData.dossier.getApproverIds()) + .downloadFileTypes(testData.dossier.getDownloadFileTypes()) + .watermarkId(testData.dossier.getWatermarkId()) + .dueDate(testData.dossier.getDueDate()) + .dossierTemplateId(testData.dossier.getDossierTemplateId()) + .reportTemplateIds(availableTemplates.stream() + .map(ReportTemplate::getTemplateId) + .collect(Collectors.toSet())) + .build()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index c67697144..42f473d6e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -10,6 +10,7 @@ import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetai import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; + import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -92,10 +93,10 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { } var downloads = downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .downloadFileTypes(Set.of(DownloadFileType.ORIGINAL)) - .dossierId(dossier.getId()) - .fileIds(List.of(file2.getId())) - .build()); + .downloadFileTypes(Set.of(DownloadFileType.ORIGINAL)) + .dossierId(dossier.getId()) + .fileIds(List.of(file2.getId())) + .build()); downloadMessageReceiver.receive(new DownloadJob(userProvider.getUserId(), downloads.getStorageId(), false)); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; @@ -103,14 +104,24 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { downloadPreparationService.createDownload(ReportResultMessage.builder().downloadId(downloads.getStorageId()).build()); - downloadPreparationService.markFileAsProcessed(RedactionResultMessage.builder().downloadId(downloads.getStorageId()).dossierId(dossier.getId()).fileId(file.getId()).build()); - downloadPreparationService.markFileAsProcessed(RedactionResultMessage.builder().downloadId(downloads.getStorageId()).dossierId(dossier.getId()).fileId(file2.getId()).build()); + downloadPreparationService.markFileAsProcessed(RedactionResultMessage.builder() + .downloadId(downloads.getStorageId()) + .dossierId(dossier.getId()) + .fileId(file.getId()) + .build()); + downloadPreparationService.markFileAsProcessed(RedactionResultMessage.builder() + .downloadId(downloads.getStorageId()) + .dossierId(dossier.getId()) + .fileId(file2.getId()) + .build()); var statuses = downloadClient.getDownloadStatus(); assertThat(statuses.getDownloadStatus()).isNotEmpty(); - assertThat(statuses.getDownloadStatus().iterator().next().getLastDownload()).isNull(); + assertThat(statuses.getDownloadStatus() + .iterator().next().getLastDownload()).isNull(); - downloadClient.deleteDownloadStatus(new RemoveDownloadRequest(List.of(statuses.getDownloadStatus().iterator().next().getStorageId()))); + downloadClient.deleteDownloadStatus(new RemoveDownloadRequest(List.of(statuses.getDownloadStatus() + .iterator().next().getStorageId()))); statuses = downloadClient.getDownloadStatus(); assertThat(statuses.getDownloadStatus()).isEmpty(); @@ -118,9 +129,17 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { @Test - public void testMarkAsProcessed(){ + public void testMarkAsProcessed() { - downloadPreparationService.markFileAsProcessed(RedactionResultMessage.builder().downloadId("dsfsdf").dossierId("sdfsdf").fileId("rwerwe").redactionResultDetails(List.of(RedactionResultDetail.builder().redactionType(RedactionType.REDACTED).storageId("dsfsdf").build())).build()); + downloadPreparationService.markFileAsProcessed(RedactionResultMessage.builder() + .downloadId("dsfsdf") + .dossierId("sdfsdf") + .fileId("rwerwe") + .redactionResultDetails(List.of(RedactionResultDetail.builder() + .redactionType(RedactionType.REDACTED) + .storageId("dsfsdf") + .build())) + .build()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java index eeac0e5af..ee28a7996 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java @@ -92,10 +92,15 @@ public class EntityLogMergeTest { private EntityLogMergeService entityLogMergeService; + @BeforeEach public void setUp() { - entityLogMergeService = new EntityLogMergeService(dictionaryPersistenceService, rabbitTemplate, fileStatusService, fileStatusPersistenceService, new PendingDictionaryEntryFactory()); + entityLogMergeService = new EntityLogMergeService(dictionaryPersistenceService, + rabbitTemplate, + fileStatusService, + fileStatusPersistenceService, + new PendingDictionaryEntryFactory()); } @@ -118,27 +123,22 @@ public class EntityLogMergeTest { var entityLog = provideEntityLog(entryToRemoveId, entryToResizeId, entryLegalBasisId, forceRedactionId); when(manualRedactionProviderService.getManualRedactions(any(), any())).thenReturn(manualRedactions); - when(fileStatusService.getStatus(fileId)).thenReturn(FileModel.builder() - .excluded(false) - .dossierStatusId(dossierTemplateId) - .id(fileId) - .build()); + when(fileStatusService.getStatus(fileId)).thenReturn(FileModel.builder().excluded(false).dossierStatusId(dossierTemplateId).id(fileId).build()); when(fileManagementStorageService.getEntityLog(dossierId, fileId)).thenReturn(entityLog); - when(dossierService.getDossierById(dossierId)).thenReturn(DossierEntity.builder() - .dossierTemplateId(dossierTemplateId) - .build()); + when(dossierService.getDossierById(dossierId)).thenReturn(DossierEntity.builder().dossierTemplateId(dossierTemplateId).build()); when(dictionaryPersistenceService.getType(anyString())).thenReturn(TypeEntity.builder().isHint(false).build()); when(fileStatusPersistenceService.getStatus(fileId)).thenReturn(FileEntity.builder().id(fileId).fileAttributes(Collections.emptyList()).build()); when(fileStatusService.convertAttributes(any(), anyString())).thenReturn(Collections.emptyList()); - EntityLog response = entityLogMergeService.mergeEntityLog(manualRedactions, entityLog, DossierEntity.builder() - .dossierTemplateId(dossierTemplateId) - .build()); + EntityLog response = entityLogMergeService.mergeEntityLog(manualRedactions, entityLog, DossierEntity.builder().dossierTemplateId(dossierTemplateId).build()); assertNotNull(response); assertFalse(response.getEntityLogEntry().isEmpty()); - var optionalEntityLogEntry = response.getEntityLogEntry().stream().filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToAddId)).findFirst(); + var optionalEntityLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToAddId)) + .findFirst(); assertTrue(optionalEntityLogEntry.isPresent()); var entityLogEntry = optionalEntityLogEntry.get(); assertEquals(entityLogEntry.getType(), "manual"); @@ -147,52 +147,81 @@ public class EntityLogMergeTest { assertEquals(entityLogEntry.getValue(), "Test"); assertEquals(entityLogEntry.getReason(), "Reason"); assertTrue(entityLogEntry.getEngines().contains(Engine.MANUAL)); - assertEquals(entityLogEntry.getManualChanges().get(0).getManualRedactionType(), ManualRedactionType.ADD); + assertEquals(entityLogEntry.getManualChanges() + .get(0).getManualRedactionType(), ManualRedactionType.ADD); - var optionalRemoveEntryLogEntry = response.getEntityLogEntry().stream().filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToRemoveId)).findFirst(); + var optionalRemoveEntryLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToRemoveId)) + .findFirst(); assertTrue(optionalRemoveEntryLogEntry.isPresent()); var removeEntryLogEntry = optionalRemoveEntryLogEntry.get(); assertEquals(removeEntryLogEntry.getEntryType(), EntryType.ENTITY); assertEquals(removeEntryLogEntry.getState(), EntryState.IGNORED); - assertEquals(removeEntryLogEntry.getManualChanges().get(0).getManualRedactionType(), ManualRedactionType.REMOVE); - assertEquals(removeEntryLogEntry.getChanges().get(0).getType(), ChangeType.REMOVED); + assertEquals(removeEntryLogEntry.getManualChanges() + .get(0).getManualRedactionType(), ManualRedactionType.REMOVE); + assertEquals(removeEntryLogEntry.getChanges() + .get(0).getType(), ChangeType.REMOVED); assertTrue(removeEntryLogEntry.getEngines().contains(Engine.MANUAL)); - var optionalResizeEntryLogEntry = response.getEntityLogEntry().stream().filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToResizeId)).findFirst(); + var optionalResizeEntryLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToResizeId)) + .findFirst(); assertTrue(optionalResizeEntryLogEntry.isPresent()); var resizeEntryLogEntry = optionalResizeEntryLogEntry.get(); - assertEquals(resizeEntryLogEntry.getPositions().get(0).getRectangle()[0], 2); - assertEquals(resizeEntryLogEntry.getPositions().get(0).getRectangle()[1], 2); - assertEquals(resizeEntryLogEntry.getPositions().get(0).getRectangle()[2], 2); - assertEquals(resizeEntryLogEntry.getPositions().get(0).getRectangle()[3], 2); - assertEquals(resizeEntryLogEntry.getPositions().get(0).getPageNumber(), 1); + assertEquals(resizeEntryLogEntry.getPositions() + .get(0).getRectangle()[0], 2); + assertEquals(resizeEntryLogEntry.getPositions() + .get(0).getRectangle()[1], 2); + assertEquals(resizeEntryLogEntry.getPositions() + .get(0).getRectangle()[2], 2); + assertEquals(resizeEntryLogEntry.getPositions() + .get(0).getRectangle()[3], 2); + assertEquals(resizeEntryLogEntry.getPositions() + .get(0).getPageNumber(), 1); assertEquals(resizeEntryLogEntry.getEntryType(), EntryType.ENTITY); assertEquals(resizeEntryLogEntry.getState(), EntryState.APPLIED); - assertEquals(resizeEntryLogEntry.getManualChanges().get(0).getManualRedactionType(), ManualRedactionType.RESIZE); - assertEquals(resizeEntryLogEntry.getChanges().get(0).getType(), ChangeType.CHANGED); + assertEquals(resizeEntryLogEntry.getManualChanges() + .get(0).getManualRedactionType(), ManualRedactionType.RESIZE); + assertEquals(resizeEntryLogEntry.getChanges() + .get(0).getType(), ChangeType.CHANGED); assertTrue(resizeEntryLogEntry.getEngines().contains(Engine.MANUAL)); - var optionalLegalBasisEntryLogEntry = response.getEntityLogEntry().stream().filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryLegalBasisId)).findFirst(); + var optionalLegalBasisEntryLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryLegalBasisId)) + .findFirst(); assertTrue(optionalLegalBasisEntryLogEntry.isPresent()); var legalBasisEntryLogEntry = optionalLegalBasisEntryLogEntry.get(); assertEquals(legalBasisEntryLogEntry.getLegalBasis(), "New legal basis"); assertEquals(legalBasisEntryLogEntry.getEntryType(), EntryType.ENTITY); assertEquals(legalBasisEntryLogEntry.getState(), EntryState.APPLIED); - assertEquals(legalBasisEntryLogEntry.getManualChanges().get(0).getManualRedactionType(), ManualRedactionType.LEGAL_BASIS_CHANGE); - assertEquals(legalBasisEntryLogEntry.getChanges().get(0).getType(), ChangeType.CHANGED); + assertEquals(legalBasisEntryLogEntry.getManualChanges() + .get(0).getManualRedactionType(), ManualRedactionType.LEGAL_BASIS_CHANGE); + assertEquals(legalBasisEntryLogEntry.getChanges() + .get(0).getType(), ChangeType.CHANGED); assertTrue(legalBasisEntryLogEntry.getEngines().contains(Engine.MANUAL)); - var optionalForceRedactionEntryLogEntry = response.getEntityLogEntry().stream().filter(entityLogEntry1 -> entityLogEntry1.getId().equals(forceRedactionId)).findFirst(); + var optionalForceRedactionEntryLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(forceRedactionId)) + .findFirst(); assertTrue(optionalForceRedactionEntryLogEntry.isPresent()); var forceRedactionEntryLogEntry = optionalForceRedactionEntryLogEntry.get(); assertEquals(forceRedactionEntryLogEntry.getLegalBasis(), "Force"); assertEquals(forceRedactionEntryLogEntry.getEntryType(), EntryType.ENTITY); assertEquals(forceRedactionEntryLogEntry.getState(), EntryState.APPLIED); - assertEquals(forceRedactionEntryLogEntry.getManualChanges().get(0).getManualRedactionType(), ManualRedactionType.FORCE); - assertEquals(forceRedactionEntryLogEntry.getChanges().get(0).getType(), ChangeType.CHANGED); + assertEquals(forceRedactionEntryLogEntry.getManualChanges() + .get(0).getManualRedactionType(), ManualRedactionType.FORCE); + assertEquals(forceRedactionEntryLogEntry.getChanges() + .get(0).getType(), ChangeType.CHANGED); assertTrue(forceRedactionEntryLogEntry.getEngines().contains(Engine.MANUAL)); - var optionalRectangleEntryLogEntry = response.getEntityLogEntry().stream().filter(entityLogEntry1 -> entityLogEntry1.getId().equals(rectangleToAddId)).findFirst(); + var optionalRectangleEntryLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(rectangleToAddId)) + .findFirst(); assertTrue(optionalRectangleEntryLogEntry.isPresent()); var rectangleEntryLogEntry = optionalRectangleEntryLogEntry.get(); assertEquals(rectangleEntryLogEntry.getType(), "manual"); @@ -200,124 +229,117 @@ public class EntityLogMergeTest { assertEquals(rectangleEntryLogEntry.getState(), EntryState.APPLIED); assertEquals(rectangleEntryLogEntry.getValue(), "Test2"); assertEquals(rectangleEntryLogEntry.getReason(), "Rectangle"); - assertEquals(rectangleEntryLogEntry.getManualChanges().get(0).getManualRedactionType(), ManualRedactionType.ADD); + assertEquals(rectangleEntryLogEntry.getManualChanges() + .get(0).getManualRedactionType(), ManualRedactionType.ADD); assertTrue(rectangleEntryLogEntry.getEngines().contains(Engine.MANUAL)); } + private EntityLog provideEntityLog(String entryToRemoveId, String entryToResizeId, String entryLegalBasisId, String forceRedactionId) { List positions = new ArrayList<>(); positions.add(new Position(1, 1, 1, 1, 1)); return new EntityLog(1, - 1, - Lists.newArrayList(EntityLogEntry.builder() - .id(entryToRemoveId) - .type("manual") - .value("Luke Skywalker") - .entryType(EntryType.ENTITY) - .state(EntryState.APPLIED) - .dictionaryEntry(true) - .build(), - EntityLogEntry.builder() - .id(entryToResizeId) - .type("manual") - .value("Darth Vader") - .entryType(EntryType.ENTITY) - .state(EntryState.APPLIED) - .dictionaryEntry(true) - .positions(positions) - .build(), - EntityLogEntry.builder() - .id(entryLegalBasisId) - .type("manual") - .value("Darth Luke") - .entryType(EntryType.ENTITY) - .state(EntryState.APPLIED) - .dictionaryEntry(true) - .positions(positions) - .build(), - EntityLogEntry.builder() - .id(forceRedactionId) - .type("manual") - .value("Darth Luke") - .entryType(EntryType.ENTITY) - .state(EntryState.APPLIED) - .dictionaryEntry(true) - .positions(positions) - .build()), - null, - 0, - 0, - 0, - 0); + 1, + Lists.newArrayList(EntityLogEntry.builder() + .id(entryToRemoveId) + .type("manual") + .value("Luke Skywalker") + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .dictionaryEntry(true) + .build(), + EntityLogEntry.builder() + .id(entryToResizeId) + .type("manual") + .value("Darth Vader") + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .dictionaryEntry(true) + .positions(positions) + .build(), + EntityLogEntry.builder() + .id(entryLegalBasisId) + .type("manual") + .value("Darth Luke") + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .dictionaryEntry(true) + .positions(positions) + .build(), + EntityLogEntry.builder() + .id(forceRedactionId) + .type("manual") + .value("Darth Luke") + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .dictionaryEntry(true) + .positions(positions) + .build()), + null, + 0, + 0, + 0, + 0); } - private ManualRedactions provideManualRedactions(String entryToAddId, String entryToRemoveId, String entryToResizeId, String entryLegalBasisId, String forceRedactionId, String fileId, String rectangleToAddId) { + + private ManualRedactions provideManualRedactions(String entryToAddId, + String entryToRemoveId, + String entryToResizeId, + String entryLegalBasisId, + String forceRedactionId, + String fileId, + String rectangleToAddId) { List positions = new ArrayList<>(); positions.add(new Rectangle(2, 2, 2, 2, 1)); return ManualRedactions.builder() - .entriesToAdd(Set.of( - ManualRedactionEntry.builder() - .positions(List.of(new Rectangle(1f, 2f, 3f, 4f, 1))) - .annotationId(entryToAddId) - .value("Test") - .reason("Reason") - .addToDictionary(false) - .addToDossierDictionary(false) - .fileId(fileId) - .rectangle(false) - .requestDate(OffsetDateTime.now()) - .dictionaryEntryType(DictionaryEntryType.ENTRY) - .type("manual") - .build(), - ManualRedactionEntry.builder() - .positions(List.of(new Rectangle(5f, 6f, 7f, 8f, 1))) - .annotationId(rectangleToAddId) - .value("Test2") - .reason("Rectangle") - .addToDictionary(false) - .addToDossierDictionary(false) - .fileId(fileId) - .rectangle(true) - .requestDate(OffsetDateTime.now()) - .type("manual") - .build())) - .idsToRemove(Set.of( - IdRemoval.builder() - .annotationId(entryToRemoveId) - .requestDate(OffsetDateTime.now()) - .build() - )) - .resizeRedactions(Set.of( - ManualResizeRedaction.builder() - .fileId(fileId) - .value("Random") - .annotationId(entryToResizeId) - .positions(positions) - .requestDate(OffsetDateTime.now()) - .updateDictionary(false) - .build() - )) - .legalBasisChanges(Set.of( - ManualLegalBasisChange.builder() - .annotationId(entryLegalBasisId) - .value("Random") - .legalBasis("New legal basis") - .section("Section") - .requestDate(OffsetDateTime.now()) - .build() - )) - .forceRedactions(Set.of( - ManualForceRedaction.builder() - .annotationId(forceRedactionId) - .fileId(fileId) - .legalBasis("Force") - .requestDate(OffsetDateTime.now()) - .build() - )) + .entriesToAdd(Set.of(ManualRedactionEntry.builder() + .positions(List.of(new Rectangle(1f, 2f, 3f, 4f, 1))) + .annotationId(entryToAddId) + .value("Test") + .reason("Reason") + .addToDictionary(false) + .addToDossierDictionary(false) + .fileId(fileId) + .rectangle(false) + .requestDate(OffsetDateTime.now()) + .dictionaryEntryType(DictionaryEntryType.ENTRY) + .type("manual") + .build(), + ManualRedactionEntry.builder() + .positions(List.of(new Rectangle(5f, 6f, 7f, 8f, 1))) + .annotationId(rectangleToAddId) + .value("Test2") + .reason("Rectangle") + .addToDictionary(false) + .addToDossierDictionary(false) + .fileId(fileId) + .rectangle(true) + .requestDate(OffsetDateTime.now()) + .type("manual") + .build())) + .idsToRemove(Set.of(IdRemoval.builder().annotationId(entryToRemoveId).requestDate(OffsetDateTime.now()).build())) + .resizeRedactions(Set.of(ManualResizeRedaction.builder() + .fileId(fileId) + .value("Random") + .annotationId(entryToResizeId) + .positions(positions) + .requestDate(OffsetDateTime.now()) + .updateDictionary(false) + .build())) + .legalBasisChanges(Set.of(ManualLegalBasisChange.builder() + .annotationId(entryLegalBasisId) + .value("Random") + .legalBasis("New legal basis") + .section("Section") + .requestDate(OffsetDateTime.now()) + .build())) + .forceRedactions(Set.of(ManualForceRedaction.builder().annotationId(forceRedactionId).fileId(fileId).legalBasis("Force").requestDate(OffsetDateTime.now()).build())) .build(); } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 998b5f991..98437df2b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -83,17 +83,12 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedConfig.getEncoding()).isEqualTo(ASCII_ENCODING); List configs = new ArrayList<>(); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(true).label("Attribute A") - .build()); - FileAttributeConfig attributeB = FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(true).label("Attribute B") - .build(); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(true).label("Attribute A").build()); + FileAttributeConfig attributeB = FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(true).label("Attribute B").build(); configs.add(attributeB); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D") - .build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D").build()); fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), new FileAttributesConfig("Name", ",", UTF_ENCODING, configs)); @@ -205,16 +200,11 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedConfig.getDelimiter()).isEqualTo(","); List configs = new ArrayList<>(); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(false).label("Attribute A") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(false).label("Attribute B") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D") - .build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(false).label("Attribute A").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(false).label("Attribute B").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D").build()); generalConfig.setFileAttributeConfigs(configs); @@ -262,12 +252,9 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedConfig.getDelimiter()).isEqualTo(","); List configs = new ArrayList<>(); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Date").primaryAttribute(true).label("Date").type(FileAttributeType.DATE) - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Number").primaryAttribute(true).label("Number").type(FileAttributeType.NUMBER) - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Text").primaryAttribute(true).label("Text").type(FileAttributeType.TEXT) - .build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Date").primaryAttribute(true).label("Date").type(FileAttributeType.DATE).build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Number").primaryAttribute(true).label("Number").type(FileAttributeType.NUMBER).build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Text").primaryAttribute(true).label("Text").type(FileAttributeType.TEXT).build()); generalConfig.setFileAttributeConfigs(configs); @@ -318,7 +305,8 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { public void testFileAttributeWithNoLabel() { Dossier dossier = dossierTesterAndProvider.provideTestDossier(); - FeignException exception = assertThrows(FeignException.class, () -> fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), new FileAttributeConfig())); + FeignException exception = assertThrows(FeignException.class, + () -> fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), new FileAttributeConfig())); assertTrue(exception.getMessage().contains("File Attribute label can not be empty.")); assertEquals(400, exception.status()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java index a2ea6e617..008235811 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java @@ -51,6 +51,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { @Autowired private UserProvider userProvider; + @Test public void testFileProcessing() { @@ -64,9 +65,15 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() - .manualRedactions(new ManualRedactions()) - .messageType(MessageType.ANALYSE).analysisVersion(0).fileId(file.getId()).dossierId(dossier.getId()).build()); + fileProcessingClient.analysisSuccessful(dossier.getId(), + file.getId(), + AnalyzeResult.builder() + .manualRedactions(new ManualRedactions()) + .messageType(MessageType.ANALYSE) + .analysisVersion(0) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(0); @@ -106,14 +113,21 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { assertThat(file.getOcrStartTime()).isNull(); var queue = "queue1"; - fileProcessingClient.analysisFailed(dossier.getId(), file.getId(), new FileErrorInfo("something failed", queue, "service", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + fileProcessingClient.analysisFailed(dossier.getId(), + file.getId(), + new FileErrorInfo("something failed", queue, "service", OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); assertThat(loadedFile.getFileErrorInfo().getQueue()).isEqualTo(queue); fileProcessingClient.analysisSuccessful(dossier.getId(), - file.getId(), - AnalyzeResult.builder().messageType(MessageType.ANALYSE).analysisVersion(100).fileId(file.getId()).dossierId(dossier.getId()).build()); + file.getId(), + AnalyzeResult.builder() + .messageType(MessageType.ANALYSE) + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(0); @@ -158,13 +172,16 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { fileClient.setStatusUnderReview(dossier.getId(), file.getId(), userId); fileProcessingClient.analysisSuccessful(dossier.getId(), - file.getId(), - AnalyzeResult.builder().messageType(MessageType.ANALYSE).analysisVersion(100).fileId(file.getId()).dossierId(dossier.getId()).build()); + file.getId(), + AnalyzeResult.builder() + .messageType(MessageType.ANALYSE) + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSED); - - reanalysisClient.toggleExclusion(file.getDossierId(), file.getId(), true); reanalysisClient.toggleExclusion(file.getDossierId(), file.getId(), false); @@ -184,8 +201,13 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); fileProcessingClient.analysisSuccessful(dossier.getId(), - file.getId(), - AnalyzeResult.builder().messageType(MessageType.ANALYSE).analysisVersion(100).fileId(file.getId()).dossierId(dossier.getId()).build()); + file.getId(), + AnalyzeResult.builder() + .messageType(MessageType.ANALYSE) + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSED); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index be60ef452..fe831f9d0 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -164,10 +164,8 @@ public class FileTest extends AbstractPersistenceServerServiceTest { reanalysisClient.toggleAutomaticAnalysis(dossier.getId(), file.getId(), true); List configs = new ArrayList<>(); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name") - .build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(true).label("Attribute A") - .build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build()); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(true).label("Attribute A").build()); var loadedConfig = fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), new FileAttributesConfig(configs)); fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), @@ -403,21 +401,21 @@ public class FileTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.removeRedactionBulk(dossierId, fileId, - Set.of(RemoveRedactionRequestModel.builder().annotationId(annotationId).comment("comment").removeFromDictionary(false) - .build()), + Set.of(RemoveRedactionRequestModel.builder().annotationId(annotationId).comment("comment").removeFromDictionary(false).build()), false); manualRedactionClient.forceRedactionBulk(dossierId, fileId, - Set.of(ForceRedactionRequestModel.builder().annotationId("forceRedactionAnnotation").comment("comment").legalBasis("1") - .build())); + Set.of(ForceRedactionRequestModel.builder().annotationId("forceRedactionAnnotation").comment("comment").legalBasis("1").build())); manualRedactionClient.legalBasisChangeBulk(dossierId, fileId, - Set.of(LegalBasisChangeRequestModel.builder().annotationId("legalBasisChangeAnnotation").comment("comment").legalBasis("1") + Set.of(LegalBasisChangeRequestModel.builder() + .annotationId("legalBasisChangeAnnotation") + .comment("comment") + .legalBasis("1") .build())); manualRedactionClient.recategorizeBulk(dossierId, fileId, - Set.of(RecategorizationRequestModel.builder().annotationId(annotationId).comment("comment").type("new-type").legalBasis("") - .build()), + Set.of(RecategorizationRequestModel.builder().annotationId(annotationId).comment("comment").type("new-type").legalBasis("").build()), false); var loadedFile = fileClient.getFileStatus(dossierId, fileId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java index c3d7fb9d8..0fbb86efe 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java @@ -47,21 +47,27 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest { var mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); assertThat(mapping.size()).isEqualTo(2); - assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2"); + assertThat(mapping.stream() + .map(LegalBasis::getName) + .collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2"); var legalBasis = LegalBasis.builder().name("test 3").description("test 3").reason("test 3").build(); legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), legalBasis); mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); assertThat(mapping.size()).isEqualTo(3); - assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3"); + assertThat(mapping.stream() + .map(LegalBasis::getName) + .collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3"); legalBasis = LegalBasis.builder().name("test 3").reason("test 3").description("test 3 - updated").build(); legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), legalBasis); mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); assertThat(mapping.size()).isEqualTo(3); - assertThat(mapping.stream().map(LegalBasis::getDescription).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3 - updated"); + assertThat(mapping.stream() + .map(LegalBasis::getDescription) + .collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3 - updated"); legalBasisClient.deleteLegalBasis(dossierTemplate.getId(), Lists.newArrayList("test 1")); mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java index 2b58fdafa..e2f796699 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java @@ -76,9 +76,9 @@ public class LicenseReportTest extends AbstractPersistenceServerServiceTest { archiveDossier(februaryDossier.getDossierId(), "2023-05-01T10:00:00Z"); LicenseReport licenseReport = licenseReportClient.getReport(LicenseReportRequest.builder() - .startDate(Instant.parse("2023-01-01T10:00:00Z")) - .endDate(Instant.parse("2023-05-01T11:00:00Z")) - .build()); + .startDate(Instant.parse("2023-01-01T10:00:00Z")) + .endDate(Instant.parse("2023-05-01T11:00:00Z")) + .build()); assertThat(licenseReport.getTotalFilesUploadedBytes()).isEqualTo(900L); assertThat(licenseReport.getActiveFilesUploadedBytes()).isEqualTo(700L); @@ -86,8 +86,10 @@ public class LicenseReportTest extends AbstractPersistenceServerServiceTest { assertThat(licenseReport.getTrashFilesUploadedBytes()).isEqualTo(0L); assertThat(licenseReport.getMonthlyData().size()).isEqualTo(5); - assertThat(licenseReport.getMonthlyData().get(1).getTrashFilesUploadedBytes()).isEqualTo(100L); - assertThat(licenseReport.getMonthlyData().get(2).getTrashFilesUploadedBytes()).isEqualTo(0L); + assertThat(licenseReport.getMonthlyData() + .get(1).getTrashFilesUploadedBytes()).isEqualTo(100L); + assertThat(licenseReport.getMonthlyData() + .get(2).getTrashFilesUploadedBytes()).isEqualTo(0L); } @@ -101,40 +103,44 @@ public class LicenseReportTest extends AbstractPersistenceServerServiceTest { private void setAdded(String fileId, String date) { - fileRepository.findById(fileId).ifPresent((file) -> { + fileRepository.findById(fileId) + .ifPresent((file) -> { - file.setAdded(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); - file.setFileSize(100L); - fileRepository.saveAndFlush(file); + file.setAdded(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); + file.setFileSize(100L); + fileRepository.saveAndFlush(file); - }); + }); } private void archiveDossier(String dossierId, String date) { - dossierRepository.findById(dossierId).ifPresent((dossier) -> { - dossier.setArchivedTime(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); - dossierRepository.saveAndFlush(dossier); - }); + dossierRepository.findById(dossierId) + .ifPresent((dossier) -> { + dossier.setArchivedTime(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); + dossierRepository.saveAndFlush(dossier); + }); } private void softDeleteFile(String fileId, String date) { - fileRepository.findById(fileId).ifPresent((file) -> { - file.setDeleted(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); - fileRepository.saveAndFlush(file); - }); + fileRepository.findById(fileId) + .ifPresent((file) -> { + file.setDeleted(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); + fileRepository.saveAndFlush(file); + }); } private void hardDeleteFile(String fileId, String date) { - fileRepository.findById(fileId).ifPresent((file) -> { - file.setHardDeletedTime(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); - fileRepository.saveAndFlush(file); - }); + fileRepository.findById(fileId) + .ifPresent((file) -> { + file.setHardDeletedTime(OffsetDateTime.ofInstant(Instant.parse(date), ZoneId.of("Z"))); + fileRepository.saveAndFlush(file); + }); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java index 8ee1e9c12..4d16624ce 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesServiceTest.java @@ -24,7 +24,6 @@ public class NotificationPreferencesServiceTest extends AbstractPersistenceServe @Autowired NotificationPreferencesService notificationPreferencesService; - @Autowired NotificationPreferencesPersistenceService notificationPreferencesPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java index 69f35d58f..2619802ae 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java @@ -77,15 +77,16 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest { @Test public void testNotification() { + TenantContext.setTenantId("redaction"); var userId = userProvider.getUserId(); notificationPersistenceService.insertNotification(AddNotificationRequest.builder() - .notificationType(NotificationType.ASSIGN_REVIEWER.name()) - .issuerId(userId) - .userId(userId) - .target(Map.of("test", "test")) - .build()); + .notificationType(NotificationType.ASSIGN_REVIEWER.name()) + .issuerId(userId) + .userId(userId) + .target(Map.of("test", "test")) + .build()); var notification = getNotification(); @@ -125,7 +126,8 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest { var currentNotifications = notificationClient.getNotifications(true); assertThat(currentNotifications.getNotifications().size()).isEqualTo(1); - return currentNotifications.getNotifications().iterator().next(); + return currentNotifications.getNotifications() + .iterator().next(); } @@ -149,7 +151,7 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest { @SneakyThrows public void testNotificationsConcurrent() { - Runnable test = () -> notificationClient.getNotifications( false); + Runnable test = () -> notificationClient.getNotifications(false); Runnable afterTest = () -> notificationPreferencesClient.deleteNotificationPreferences(); var exceptions = multithreadedTestRunner.runMutlithreadedCollectingExceptions(test, afterTest); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java index eba7943b2..19f547b96 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java @@ -83,13 +83,14 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest { TenantContext.setTenantId("redaction"); - fileRepository.findById(file.getId()).ifPresent(savedFile -> { + fileRepository.findById(file.getId()) + .ifPresent(savedFile -> { - savedFile.setOcrStartTime(null); - savedFile.setProcessingStatus(ProcessingStatus.PROCESSED); - fileRepository.save(savedFile); + savedFile.setOcrStartTime(null); + savedFile.setProcessingStatus(ProcessingStatus.PROCESSED); + fileRepository.save(savedFile); - }); + }); var loadedFile = fileClient.getFileStatus(file.getDossierId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSED); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index fd74e8512..dcb05aff3 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -44,7 +44,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isNotEmpty(); - var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); assertThat(firstTemplate.getFileName()).isEqualTo(fileName); @@ -78,7 +79,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isNotEmpty(); - var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); assertThat(firstTemplate.getFileName()).isEqualTo("report.xlsx"); @@ -109,7 +111,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isNotEmpty(); - var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); assertThat(firstTemplate.getFileName()).isEqualTo(fileName); @@ -119,7 +122,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(availableTemplates).isNotEmpty(); assertThat(availableTemplates.size()).isEqualTo(2); - var secondTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var secondTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(availableTemplates).contains(secondTemplate); assertThat(secondTemplate.getFileName()).isEqualTo("report.xlsx"); @@ -145,7 +149,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isNotEmpty(); - var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); assertThat(firstTemplate.getFileName()).isEqualTo("report.xlsx"); @@ -155,7 +160,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(availableTemplates).isNotEmpty(); assertThat(availableTemplates.size()).isEqualTo(2); - var secondTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var secondTemplate = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(availableTemplates).contains(secondTemplate); assertThat(secondTemplate.getFileName()).isEqualTo(fileName); @@ -296,7 +302,8 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { var updateRequest = new ReportTemplateUpdateRequest(filenameUpdate, true, true); reportTemplateClient.updateTemplate(dossierTemplate.getId(), firstTemplate.getTemplateId(), updateRequest); - var templateUpdated = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).iterator().next(); + var templateUpdated = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) + .iterator().next(); assertThat(templateUpdated.getFileName()).isEqualTo(filenameUpdate); assertThat(templateUpdated.isMultiFileReport()).isTrue(); assertThat(templateUpdated.isActiveByDefault()).isTrue(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java index 016dcb2e8..db8e4e3d9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java @@ -120,14 +120,13 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { .build()); try { rulesClient.upload(request); - } catch(FeignException e) { + } catch (FeignException e) { assertThat(e.status()).isEqualTo(HttpStatus.SC_BAD_REQUEST); } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - // case 2: dry-run false, no error messages just warning messages when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsSyntaxValidation.builder() .droolsSyntaxErrorMessages(Collections.emptyList()) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/StringCleaningUtilityTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/StringCleaningUtilityTest.java index fb2715516..4620fe162 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/StringCleaningUtilityTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/StringCleaningUtilityTest.java @@ -50,6 +50,7 @@ public class StringCleaningUtilityTest { assertEquals("abc def, ghi-jkl mnopqr", StringCleaningUtility.cleanString(originalValue)); } + @Test public void testRemoveReturnCarriage() { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index bacf19943..1e7dc5242 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -44,19 +44,21 @@ public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { fileClient.setCurrentFileAssignee(dossier.getId(), file.getId(), userId); var fileId = file.getId(); - viewedPagesClient.addPage(dossier.getId(),fileId, new ViewedPagesRequest(1)); - viewedPagesClient.addPage(dossier.getId(),fileId, new ViewedPagesRequest(2)); - viewedPagesClient.addPage(dossier.getId(),fileId, new ViewedPagesRequest(3)); + viewedPagesClient.addPage(dossier.getId(), fileId, new ViewedPagesRequest(1)); + viewedPagesClient.addPage(dossier.getId(), fileId, new ViewedPagesRequest(2)); + viewedPagesClient.addPage(dossier.getId(), fileId, new ViewedPagesRequest(3)); - viewedPagesClient.removePage(dossier.getId(),fileId, 1); + viewedPagesClient.removePage(dossier.getId(), fileId, 1); - var viewedPages = viewedPagesClient.getViewedPages(dossier.getId(),fileId); - assertThat(viewedPages.getPages().stream().map(ViewedPage::getPage)).containsExactlyInAnyOrder(2, 3); + var viewedPages = viewedPagesClient.getViewedPages(dossier.getId(), fileId); + assertThat(viewedPages.getPages() + .stream() + .map(ViewedPage::getPage)).containsExactlyInAnyOrder(2, 3); - viewedPagesClient.removePage(dossier.getId(),fileId, 2); - viewedPagesClient.removePage(dossier.getId(),fileId, 3); + viewedPagesClient.removePage(dossier.getId(), fileId, 2); + viewedPagesClient.removePage(dossier.getId(), fileId, 3); - viewedPages = viewedPagesClient.getViewedPages(dossier.getId(),fileId); + viewedPages = viewedPagesClient.getViewedPages(dossier.getId(), fileId); assertThat(viewedPages.getPages()).isEmpty(); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java index 5f59db92c..5c940ad8c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java @@ -199,6 +199,7 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var loadedWatermark2 = watermarkClient.getWatermark(saved.getId()); } + @Test public void testCreateWatermarkWithInvalidHexColor() { @@ -266,6 +267,7 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { assertThat(saved2.getOpacity()).isEqualTo(30); } + @Test public void testWatermarkTextWithJapaneseText() { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java index 583e646ed..ffff74605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java @@ -110,9 +110,13 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest var type1 = typeProvider.testAndProvideType(template, null, "t1"); var type2 = typeProvider.testAndProvideType(template, null, "t2"); - List type1Entries = entries.stream().map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId())).collect(Collectors.toList()); + List type1Entries = entries.stream() + .map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId())) + .collect(Collectors.toList()); - List type2Entries = entries.stream().map(s -> new DictionaryEntryEntity(0, s, 1, false, type2.getTypeId())).collect(Collectors.toList()); + List type2Entries = entries.stream() + .map(s -> new DictionaryEntryEntity(0, s, 1, false, type2.getTypeId())) + .collect(Collectors.toList()); assertThat(entryRepository.count()).isEqualTo(0); long t1 = System.currentTimeMillis(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java index 951ac17a1..450ab69bb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java @@ -53,7 +53,9 @@ public class FilePerformanceTest extends AbstractPersistenceServerServiceTest { assertThat(allDossiers.size()).isEqualTo(DOSSIER_COUNT); long startDossierStats = System.currentTimeMillis(); - var dossierStats = dossierStatsClient.getDossierStats(allDossiers.stream().map(Dossier::getId).collect(Collectors.toSet())); + var dossierStats = dossierStatsClient.getDossierStats(allDossiers.stream() + .map(Dossier::getId) + .collect(Collectors.toSet())); log.info("Load all dossiers stats time: {}ms", System.currentTimeMillis() - startDossierStats); assertThat(dossierStats.size()).isEqualTo(DOSSIER_COUNT); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java index 9fd81b952..38635fe6d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/PerformanceTestService.java @@ -93,10 +93,10 @@ public class PerformanceTestService { dte.setId(UUID.randomUUID().toString()); dte.setName("Test"); dte.setDownloadFileTypes(Sets.newTreeSet(DownloadFileType.ANNOTATED, - DownloadFileType.REDACTED, - DownloadFileType.ORIGINAL, - DownloadFileType.PREVIEW, - DownloadFileType.FLATTEN)); + DownloadFileType.REDACTED, + DownloadFileType.ORIGINAL, + DownloadFileType.PREVIEW, + DownloadFileType.FLATTEN)); dte.setCreatedBy("123"); dte.setDescription("Lorem Ipsum"); dte.setModifiedBy("123"); @@ -181,10 +181,10 @@ public class PerformanceTestService { d.setApproverIds(Sets.newTreeSet("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")); d.setMemberIds(Sets.newTreeSet("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")); d.setDownloadFileTypes(Sets.newTreeSet(DownloadFileType.ANNOTATED, - DownloadFileType.REDACTED, - DownloadFileType.ORIGINAL, - DownloadFileType.PREVIEW, - DownloadFileType.FLATTEN)); + DownloadFileType.REDACTED, + DownloadFileType.ORIGINAL, + DownloadFileType.PREVIEW, + DownloadFileType.FLATTEN)); d = this.dossierRepository.save(d); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 382c285a2..cb2d2db45 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -32,8 +32,10 @@ import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantsClient; import com.knecon.fforesight.tenantcommons.model.*; + import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; + import org.assertj.core.util.Lists; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -83,8 +85,6 @@ import static org.mockito.Mockito.when; @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO") public abstract class AbstractPersistenceServerServiceTest { - - @MockBean protected Scheduler scheduler; @MockBean @@ -187,7 +187,11 @@ public abstract class AbstractPersistenceServerServiceTest { private static String[] getAllRoles() { - var allRoles = ApplicationRoles.ROLE_DATA.entrySet().stream().flatMap(entry -> entry.getValue().stream()).collect(Collectors.toSet()); + var allRoles = ApplicationRoles.ROLE_DATA.entrySet() + .stream() + .flatMap(entry -> entry.getValue() + .stream()) + .collect(Collectors.toSet()); allRoles.addAll(ApplicationRoles.UNMAPPED_ACTION_ROLES); allRoles.addAll(ApplicationRoles.ROLE_DATA.keySet()); var rolesArray = allRoles.toArray(new String[0]); @@ -223,31 +227,41 @@ public abstract class AbstractPersistenceServerServiceTest { var allUsers = new ArrayList(); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin1@test.com") - .email("manageradmin1@test.com") - .isActive(true) - .roles(Set.of(getAllRoles())) - .build()); + .userId("manageradmin1@test.com") + .email("manageradmin1@test.com") + .isActive(true) + .roles(Set.of(getAllRoles())) + .build()); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin2@test.com") - .email("manageradmin2@test.com") - .isActive(true) - .roles(Set.of(getAllRoles())) - .build()); + .userId("manageradmin2@test.com") + .email("manageradmin2@test.com") + .isActive(true) + .roles(Set.of(getAllRoles())) + .build()); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin3@test.com") - .email("manageradmin3@test.com") - .isActive(true) - .roles(Set.of(getAllRoles())) - .build()); + .userId("manageradmin3@test.com") + .email("manageradmin3@test.com") + .isActive(true) + .roles(Set.of(getAllRoles())) + .build()); when(usersClient.getAllUsers(false)).thenReturn(allUsers); when(usersClient.getAllUsers(true)).thenReturn(allUsers); // doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any()); when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null); when(entityLogService.getEntityLog(Mockito.any(), Mockito.any())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0)); - when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0)); - when(redactionClient.testRules(Mockito.any())).thenReturn(DroolsSyntaxValidation.builder().droolsSyntaxErrorMessages(Collections.emptyList()).droolsSyntaxDeprecatedWarnings(Collections.emptyList()).build()); + when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1, + 1, + Lists.newArrayList(), + null, + 0, + 0, + 0, + 0)); + when(redactionClient.testRules(Mockito.any())).thenReturn(DroolsSyntaxValidation.builder() + .droolsSyntaxErrorMessages(Collections.emptyList()) + .droolsSyntaxDeprecatedWarnings(Collections.emptyList()) + .build()); } @@ -265,31 +279,31 @@ public abstract class AbstractPersistenceServerServiceTest { redactionTenant.setDisplayName("redaction"); redactionTenant.setAuthDetails(new AuthDetails()); redactionTenant.setDatabaseConnection(DatabaseConnection.builder() - .driver("postgresql") - .host(postgreSQLContainerMaster.getHost()) - .port(port) - .database("integration-tests-db-master") - .schema("public") - .username("sa") - .password(encryptionDecryptionService.encrypt("sa")) - .build()); + .driver("postgresql") + .host(postgreSQLContainerMaster.getHost()) + .port(port) + .database("integration-tests-db-master") + .schema("public") + .username("sa") + .password(encryptionDecryptionService.encrypt("sa")) + .build()); redactionTenant.setSearchConnection(SearchConnection.builder() - .hosts(Set.of("elasticsearchHost")) - .port(9200) - .scheme("https") - .username("elastic") - .numberOfShards("1") - .numberOfReplicas("5") - .build()); + .hosts(Set.of("elasticsearchHost")) + .port(9200) + .scheme("https") + .username("elastic") + .numberOfShards("1") + .numberOfReplicas("5") + .build()); redactionTenant.setS3StorageConnection(S3StorageConnection.builder() - .key("key") - .secret("secret") - .signerType("signerType") - .bucketName("bucketName") - .region("eu") - .endpoint("endpoint") - .build()); + .key("key") + .secret("secret") + .signerType("signerType") + .bucketName("bucketName") + .region("eu") + .endpoint("endpoint") + .build()); when(tenantsClient.getTenant("redaction")).thenReturn(redactionTenant); when(tenantsClient.getTenants()).thenReturn(List.of(redactionTenant)); @@ -335,42 +349,43 @@ public abstract class AbstractPersistenceServerServiceTest { @AfterEach public void afterTests() { - tenantsClient.getTenants().forEach(tenant -> { + tenantsClient.getTenants() + .forEach(tenant -> { - TenantContext.setTenantId(tenant.getTenantId()); + TenantContext.setTenantId(tenant.getTenantId()); - falsePositiveEntryRepository.deleteAll(); - falseRecommendationEntryRepository.deleteAll(); - entryRepository.deleteAll(); - dossierAttributeRepository.deleteAll(); - dossierAttributeConfigRepository.deleteAll(); - downloadStatusRepository.deleteAll(); - fileAttributesRepository.deleteAll(); - digitalSignatureRepository.deleteAll(); - fileAttributesGeneralConfigurationRepository.deleteAll(); - fileAttributeConfigRepository.deleteAll(); - reportTemplateRepository.deleteAll(); - typeRepository.deleteAll(); - viewedPagesRepository.deleteAll(); - notificationRepository.deleteAll(); - auditRepository.deleteAll(); - manualRedactionRepository.deleteAll(); - forceRedactionRepository.deleteAll(); - removeRedactionRepository.deleteAll(); - legalBasisChangeRepository.deleteAll(); - recategorizationRepository.deleteAll(); - legalBasisMappingRepository.deleteAll(); - ruleSetRepository.deleteAll(); - fileRepository.deleteAll(); - dossierRepository.deleteAll(); - dossierStatusRepository.deleteAll(); - watermarkRepository.deleteAll(); - dossierTemplateRepository.deleteAll(); - notificationPreferencesRepository.deleteAll(); - indexInformationRepository.deleteAll(); - applicationConfigRepository.deleteAll(); + falsePositiveEntryRepository.deleteAll(); + falseRecommendationEntryRepository.deleteAll(); + entryRepository.deleteAll(); + dossierAttributeRepository.deleteAll(); + dossierAttributeConfigRepository.deleteAll(); + downloadStatusRepository.deleteAll(); + fileAttributesRepository.deleteAll(); + digitalSignatureRepository.deleteAll(); + fileAttributesGeneralConfigurationRepository.deleteAll(); + fileAttributeConfigRepository.deleteAll(); + reportTemplateRepository.deleteAll(); + typeRepository.deleteAll(); + viewedPagesRepository.deleteAll(); + notificationRepository.deleteAll(); + auditRepository.deleteAll(); + manualRedactionRepository.deleteAll(); + forceRedactionRepository.deleteAll(); + removeRedactionRepository.deleteAll(); + legalBasisChangeRepository.deleteAll(); + recategorizationRepository.deleteAll(); + legalBasisMappingRepository.deleteAll(); + ruleSetRepository.deleteAll(); + fileRepository.deleteAll(); + dossierRepository.deleteAll(); + dossierStatusRepository.deleteAll(); + watermarkRepository.deleteAll(); + dossierTemplateRepository.deleteAll(); + notificationPreferencesRepository.deleteAll(); + indexInformationRepository.deleteAll(); + applicationConfigRepository.deleteAll(); - }); + }); } @@ -389,9 +404,9 @@ public abstract class AbstractPersistenceServerServiceTest { log.info("Hosts are - Redis: {}, Postgres: {}", redisContainer.getHost(), postgreSQLContainerMaster.getHost()); TestPropertyValues.of("REDIS_PORT=" + redisContainer.getFirstMappedPort(), - "REDIS_HOST=" + redisContainer.getHost(), - "fforesight.jobs.enabled=false", - "fforesight.keycloak.enabled=false").applyTo(configurableApplicationContext.getEnvironment()); + "REDIS_HOST=" + redisContainer.getHost(), + "fforesight.jobs.enabled=false", + "fforesight.keycloak.enabled=false").applyTo(configurableApplicationContext.getEnvironment()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java index 20035551a..6981e94fa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/KneconSpringPostgreSQLTestContainer.java @@ -52,7 +52,6 @@ public class KneconSpringPostgreSQLTestContainer extends JdbcDatabaseContainer getLivenessCheckPorts() { return Collections.singleton(this.getMappedPort(POSTGRESQL_PORT)); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MetricValidationUtils.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MetricValidationUtils.java index 8781e33a2..7681c34c5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MetricValidationUtils.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MetricValidationUtils.java @@ -13,7 +13,10 @@ public class MetricValidationUtils { public static void validateMetric(PrometheusMeterRegistry registry, String name, int invocationCount, Integer time) { - var metricOptional = registry.getMeters().stream().filter(m -> m.getId().getName().equalsIgnoreCase(name)).findAny(); + var metricOptional = registry.getMeters() + .stream() + .filter(m -> m.getId().getName().equalsIgnoreCase(name)) + .findAny(); assertThat(metricOptional.isPresent()).isTrue(); PrometheusTimer metric = (PrometheusTimer) metricOptional.get(); assertThat(metric.count()).isGreaterThanOrEqualTo(invocationCount); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java index 01a0ccfea..fb6269a5b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/TokenService.java @@ -19,7 +19,7 @@ public class TokenService { public String getToken() { - return Base64.encodeBase64String((this.username+":"+this.password).getBytes()); + return Base64.encodeBase64String((this.username + ":" + this.password).getBytes()); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java index bfc13d056..3aef8fe5c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java @@ -27,7 +27,9 @@ public class FileSystemBackArchiverTest { SplittableRandom sr = new SplittableRandom(); - var data = sr.doubles().limit(1024 * 1024).toArray(); + var data = sr.doubles() + .limit(1024 * 1024) + .toArray(); for (int i = 0; i < 10; i++) { log.info("At entry: {}, using {}MB of memory", i, (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024)); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java index b455bcea5..d32ff0324 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java @@ -37,11 +37,13 @@ public class MetricsPrinterService { var ent = rt.getForEntity(url, JsonNode.class); List metrics = new ArrayList<>(); - ent.getBody().get("names").forEach(name -> { - if (name.asText().startsWith("Timer") || name.asText().startsWith("QueryCounter")) { - metrics.add(name.asText()); - } - }); + ent.getBody() + .get("names") + .forEach(name -> { + if (name.asText().startsWith("Timer") || name.asText().startsWith("QueryCounter")) { + metrics.add(name.asText()); + } + }); double count = 0; double total = 0; @@ -55,9 +57,11 @@ public class MetricsPrinterService { if (metric.startsWith("Timer")) { var m = rt.getForEntity(url + "/" + metric, JsonNode.class); - var baseUnit = m.getBody().get("baseUnit").asText(); + var baseUnit = m.getBody() + .get("baseUnit").asText(); // System.out.println(om.writeValueAsString(m.getBody())); - for (var mes : m.getBody().get("measurements")) { + for (var mes : m.getBody() + .get("measurements")) { if (mes.get("statistic").asText().equals("COUNT")) { count = mes.get("value").asDouble(); } @@ -72,7 +76,8 @@ public class MetricsPrinterService { } if (metric.startsWith("Query")) { var m = rt.getForEntity(url + "/" + metric, JsonNode.class); - for (var mes : m.getBody().get("measurements")) { + for (var mes : m.getBody() + .get("measurements")) { if (mes.get("statistic").asText().equals("COUNT")) { count = mes.get("value").asDouble(); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileSystemBackedArchiverTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileSystemBackedArchiverTest.java index 660da6e90..6cc159acf 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileSystemBackedArchiverTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileSystemBackedArchiverTest.java @@ -30,7 +30,9 @@ public class FileSystemBackedArchiverTest { SplittableRandom sr = new SplittableRandom(); - var data = sr.doubles().limit(1024 * 1024).toArray(); + var data = sr.doubles() + .limit(1024 * 1024) + .toArray(); for (int i = 0; i < 10; i++) { log.info("At entry: {}, using {}MB of memory", i, (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024)); diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java index 77a623c46..720dcbe19 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AuditResponse.java @@ -19,6 +19,4 @@ public class AuditResponse extends PaginationResponse { super(elements, totalHits, page, pageSize); } - - } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java index cc173b71a..c3d7b5a4b 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateTypeValue.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Pattern; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/DossierTemplateModel.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/DossierTemplateModel.java index dca997fc2..b152d201b 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/DossierTemplateModel.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/DossierTemplateModel.java @@ -71,9 +71,9 @@ public class DossierTemplateModel { @Schema(description = "Flag that specifies the watermark removal in documents will be performed before the OCR processing") private boolean removeWatermark; - // TODO: The following getters and setter ensure backwards compatibility. Remove them as soon as UI does not use them anymore + @Deprecated public String getDossierTemplateId() { diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java index 1988021f3..00db7f5b9 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java @@ -19,9 +19,10 @@ public class FileAttribute { private String value; - public boolean valueEqualsAnyOf(String... values){ + public boolean valueEqualsAnyOf(String... values) { return Arrays.asList(values).contains(value); } + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttributesConfig.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttributesConfig.java index 750777667..64183ce83 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttributesConfig.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttributesConfig.java @@ -27,6 +27,7 @@ public class FileAttributesConfig { public FileAttributesConfig(List fileAttributeConfigs) { + this(null, ",", "UTF-8", fileAttributeConfigs); } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java index 9a8e40742..6000c8de3 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/PrepareDownloadWithOptionRequest.java @@ -5,7 +5,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; - import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java index 53c4da6c0..7eecb7639 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/UpdateMyProfileRequest.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotEmpty; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java index 715bc511d..439df697f 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java @@ -1,16 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog; public enum ManualRedactionType { - @Deprecated - ADD_LOCALLY, - @Deprecated - FORCE_REDACT, - @Deprecated - FORCE_HINT, - @Deprecated - REMOVE_LOCALLY, + @Deprecated ADD_LOCALLY, + @Deprecated FORCE_REDACT, + @Deprecated FORCE_HINT, + @Deprecated REMOVE_LOCALLY, - ADD, ADD_TO_DICTIONARY, REMOVE, diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java index 474c52fac..45f29102f 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java @@ -24,13 +24,15 @@ public class MigratedIds { public Map buildOldToNewMapping() { - return mappings.stream().collect(Collectors.toMap(Mapping::oldId, Mapping::newId)); + return mappings.stream() + .collect(Collectors.toMap(Mapping::oldId, Mapping::newId)); } public Map buildNewToOldMapping() { - return mappings.stream().collect(Collectors.toMap(Mapping::newId, Mapping::oldId)); + return mappings.stream() + .collect(Collectors.toMap(Mapping::newId, Mapping::oldId)); } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java index 567ea61d8..2e73c7741 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class ForceRedactionRequest { +public class ForceRedactionRequest { private String annotationId; private String user; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java index 50d234971..b0d8f5447 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java @@ -26,8 +26,10 @@ public abstract class BaseAnnotation { private OffsetDateTime processedDate; private OffsetDateTime softDeletedTime; + public abstract boolean isLocal(); + @Deprecated(forRemoval = true) public boolean isApproved() { diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/common/PaginationResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/common/PaginationResponse.java index 30bd4b2f2..5bcaaf6a8 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/common/PaginationResponse.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/common/PaginationResponse.java @@ -20,7 +20,9 @@ public class PaginationResponse { protected int page; protected int pageSize; - public List getData(){ + + public List getData() { + return this.elements; } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java index 6aa2ae3d0..773e222ea 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/configuration/ApplicationConfig.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration; - import jakarta.validation.constraints.Min; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/Dossier.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/Dossier.java index be9c3cc99..f3c16e436 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/Dossier.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/Dossier.java @@ -39,9 +39,9 @@ public class Dossier { private String dossierStatusId; private DossierVisibility visibility; - // TODO: The following getters and setter ensure backwards compatibility. Remove them as soon as UI does not use them anymore + @Deprecated public String getDossierId() { diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/DossierAttributeTypeFormats.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/DossierAttributeTypeFormats.java index b75823e41..39b0edd84 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/DossierAttributeTypeFormats.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/DossierAttributeTypeFormats.java @@ -7,4 +7,5 @@ public class DossierAttributeTypeFormats { public static String DOSSIER_ATTRIBUTE_TYPE_IMAGE_REGEX = "data:image/(png|jpe?g);base64.*"; public static String DOSSIER_ATTRIBUTE_TYPE_NUMBER_REGEX = "[0-9]+"; + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileAttributeTypeFormats.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileAttributeTypeFormats.java index 5228f10a6..60d25f721 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileAttributeTypeFormats.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileAttributeTypeFormats.java @@ -5,4 +5,5 @@ public class FileAttributeTypeFormats { public static String FILE_ATTRIBUTE_TYPE_DATE_FORMAT = "yyyy-MM-dd"; public static String FILE_ATTRIBUTE_TYPE_NUMBER_REGEX = "[0-9]+"; + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java index f47a286fc..02bd8b189 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java @@ -19,10 +19,13 @@ public class FileErrorInfo { private String service; private OffsetDateTime timestamp; + public FileErrorInfo(String cause, String queue, String service) { + this.cause = cause; this.queue = queue; this.service = service; this.timestamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); } + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RuleSyntaxErrorMessage.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RuleSyntaxErrorMessage.java index 0dc191941..f6274e12b 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RuleSyntaxErrorMessage.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RuleSyntaxErrorMessage.java @@ -23,4 +23,5 @@ public class RuleSyntaxErrorMessage { Integer column; @Schema(description = "The error message.") String message; + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/LicenseReportRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/LicenseReportRequest.java index cee64a0fc..821e29dcc 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/LicenseReportRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/LicenseReportRequest.java @@ -18,6 +18,7 @@ public class LicenseReportRequest { private Instant startDate; private Instant endDate; + public Instant getEndDate() { if (endDate == null) { diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/RedactionLicenseModel.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/RedactionLicenseModel.java index 6735e07d6..53fb8c294 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/RedactionLicenseModel.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/license/RedactionLicenseModel.java @@ -3,7 +3,6 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.license; import java.util.ArrayList; import java.util.List; - import lombok.Data; @Data diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/RedactionLogEntry.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/RedactionLogEntry.java index fa23711f8..b85f74343 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/RedactionLogEntry.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/RedactionLogEntry.java @@ -83,13 +83,15 @@ public class RedactionLogEntry { public boolean lastChangeIsRemoved() { - return last(changes).map(c -> c.getType() == ChangeType.REMOVED).orElse(false); + return last(changes).map(c -> c.getType() == ChangeType.REMOVED) + .orElse(false); } public boolean isManuallyRemoved() { - return manualChanges != null && manualChanges.stream().anyMatch(mc -> mc.getManualRedactionType() == ManualRedactionType.REMOVE_LOCALLY); + return manualChanges != null && manualChanges.stream() + .anyMatch(mc -> mc.getManualRedactionType() == ManualRedactionType.REMOVE_LOCALLY); } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/section/SectionArea.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/section/SectionArea.java index 684f729a0..fee1d9f04 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/section/SectionArea.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/redactionlog/section/SectionArea.java @@ -22,17 +22,22 @@ public class SectionArea { public boolean contains(Rectangle other) { - return page == other.getPage() && this.topLeft.getX() <= other.getTopLeft().getX() && this.topLeft.getX() + this.getWidth() >= other.getTopLeft() - .getX() + other.getWidth() && this.getTopLeft().getY() <= other.getTopLeft().getY() && this.getTopLeft().getY() + this.getHeight() >= other.getTopLeft() - .getY() + other.getHeight(); + return page == other.getPage() + && this.topLeft.getX() <= other.getTopLeft().getX() + && this.topLeft.getX() + this.getWidth() >= other.getTopLeft().getX() + other.getWidth() + && this.getTopLeft().getY() <= other.getTopLeft().getY() + && this.getTopLeft().getY() + this.getHeight() >= other.getTopLeft().getY() + other.getHeight(); } // TODO we should only use one rectangle class. public boolean contains(com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle other) { - return page == other.getPage() && this.topLeft.getX() <= other.getTopLeftX() && this.topLeft.getX() + this.getWidth() >= other.getTopLeftX() + other.getWidth() && this.getTopLeft() - .getY() <= other.getTopLeftY() && this.getTopLeft().getY() + this.getHeight() >= other.getTopLeftY() + other.getHeight(); + return page == other.getPage() + && this.topLeft.getX() <= other.getTopLeftX() + && this.topLeft.getX() + this.getWidth() >= other.getTopLeftX() + other.getWidth() + && this.getTopLeft().getY() <= other.getTopLeftY() + && this.getTopLeft().getY() + this.getHeight() >= other.getTopLeftY() + other.getHeight(); } } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/saas/migration/MigrationStatusResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/saas/migration/MigrationStatusResponse.java index ec3b28ea6..cfce629c0 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/saas/migration/MigrationStatusResponse.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/saas/migration/MigrationStatusResponse.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.saas.migration; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus; + import lombok.*; import java.util.HashMap;