RED-10196: Backend adaptions for RM/DM unification

This commit is contained in:
Maverick Studer 2024-11-11 12:54:31 +01:00
parent b8710d57b3
commit 4d36a3d813
27 changed files with 360 additions and 261 deletions

View File

@ -7,7 +7,7 @@ plugins {
} }
val redactionServiceVersion by rootProject.extra { "4.290.0" } val redactionServiceVersion by rootProject.extra { "4.290.0" }
val pdftronRedactionServiceVersion by rootProject.extra { "4.87.0" } val pdftronRedactionServiceVersion by rootProject.extra { "4.89.0-RED10196.0" }
val redactionReportServiceVersion by rootProject.extra { "4.81.0" } val redactionReportServiceVersion by rootProject.extra { "4.81.0" }
val searchServiceVersion by rootProject.extra { "2.90.0" } val searchServiceVersion by rootProject.extra { "2.90.0" }

View File

@ -21,6 +21,7 @@ import com.iqser.red.persistence.service.v2.external.api.impl.mapper.ComponentMa
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles; import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentLogService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
@ -34,6 +35,7 @@ import com.iqser.red.service.persistence.service.v2.api.external.model.FileCompo
import com.iqser.red.service.persistence.service.v2.api.external.model.FileComponentsList; import com.iqser.red.service.persistence.service.v2.api.external.model.FileComponentsList;
import com.iqser.red.service.persistence.service.v2.api.external.resource.ComponentResource; import com.iqser.red.service.persistence.service.v2.api.external.resource.ComponentResource;
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.knecon.fforesight.tenantcommons.TenantProvider;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AccessLevel; import lombok.AccessLevel;
@ -50,11 +52,9 @@ public class ComponentControllerV2 implements ComponentResource {
private final StatusController statusController; private final StatusController statusController;
private final FileStatusService fileStatusService; private final FileStatusService fileStatusService;
private final DossierTemplatePersistenceService dossierTemplatePersistenceService; private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
private final CurrentApplicationTypeProvider currentApplicationTypeProvider;
private final ComponentMapper componentMapper = ComponentMapper.INSTANCE; private final ComponentMapper componentMapper = ComponentMapper.INSTANCE;
@Value("${application.type}")
private String applicationType;
@Override @Override
public FileComponents getComponents(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId, public FileComponents getComponents(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId,
@ -154,7 +154,7 @@ public class ComponentControllerV2 implements ComponentResource {
private void checkApplicationType() { private void checkApplicationType() {
if(!applicationType.equals("DocuMine")) { if (!currentApplicationTypeProvider.isDocuMine()) {
throw new NotAllowedException("Components can only be accessed in DocuMine"); throw new NotAllowedException("Components can only be accessed in DocuMine");
} }
} }

View File

@ -21,6 +21,7 @@ import com.iqser.red.persistence.service.v1.external.api.impl.controller.Downloa
import com.iqser.red.persistence.service.v1.external.api.impl.controller.StatusController; import com.iqser.red.persistence.service.v1.external.api.impl.controller.StatusController;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService; import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierAttributesManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierAttributesManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService;
@ -42,24 +43,25 @@ import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Tag(name = "2. Dossier endpoints", description = "Provides operations related to dossiers") @Tag(name = "2. Dossier endpoints", description = "Provides operations related to dossiers")
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class DossierControllerV2 implements DossierResource { public class DossierControllerV2 implements DossierResource {
private final DossierTemplateController dossierTemplateController; DossierTemplateController dossierTemplateController;
private final DossierController dossierController; DossierController dossierController;
private final AccessControlService accessControlService; AccessControlService accessControlService;
private final DossierAttributesManagementService dossierAttributesManagementService; DossierAttributesManagementService dossierAttributesManagementService;
private final AuditPersistenceService auditPersistenceService; AuditPersistenceService auditPersistenceService;
private final DownloadController downloadController; DownloadController downloadController;
private final StatusController statusController; StatusController statusController;
private final DownloadStatusPersistenceService downloadStatusPersistenceService; DownloadStatusPersistenceService downloadStatusPersistenceService;
CurrentApplicationTypeProvider currentApplicationTypeProvider;
@Value("${application.type}")
private String applicationType;
public DossierList getDossiers(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId, public DossierList getDossiers(@PathVariable(DOSSIER_TEMPLATE_ID_PARAM) String dossierTemplateId,
@ -191,7 +193,7 @@ public class DossierControllerV2 implements DossierResource {
.description(dossier.getDescription()) .description(dossier.getDescription())
.ownerId(dossier.getOwnerId()) .ownerId(dossier.getOwnerId())
.memberIds(dossier.getMemberIds()) .memberIds(dossier.getMemberIds())
.approverIds(applicationType.equals("DocuMine") ? dossier.getMemberIds() : dossier.getApproverIds()) // for DocuMine, the members are always set as approvers .approverIds(currentApplicationTypeProvider.isDocuMine() ? dossier.getMemberIds() : dossier.getApproverIds()) // for DocuMine, the members are always set as approvers
.downloadFileTypes(Set.of(DownloadFileType.ORIGINAL)) .downloadFileTypes(Set.of(DownloadFileType.ORIGINAL))
.reportTemplateIds(dossier.getReportTemplateIds()) .reportTemplateIds(dossier.getReportTemplateIds())
.watermarkId(null) .watermarkId(null)

View File

@ -30,10 +30,6 @@ dependencies {
exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1") exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1")
exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1") exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1")
} }
api("com.knecon.fforesight:layoutparser-service-internal-api:0.181.0") {
exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1")
exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1")
}
api("com.iqser.red.service:search-service-api-v1:${rootProject.extra.get("searchServiceVersion")}") { api("com.iqser.red.service:search-service-api-v1:${rootProject.extra.get("searchServiceVersion")}") {
exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1") exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1")
exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1") exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1")
@ -42,10 +38,10 @@ dependencies {
implementation("com.knecon.fforesight:llm-service-api:1.20.0-RED10072.2") implementation("com.knecon.fforesight:llm-service-api:1.20.0-RED10072.2")
api("com.knecon.fforesight:jobs-commons:0.10.0") api("com.knecon.fforesight:jobs-commons:0.10.0")
api("com.iqser.red.commons:storage-commons:2.50.0") api("com.iqser.red.commons:storage-commons:2.50.0")
api("com.knecon.fforesight:tenant-commons:0.31.0") { api("com.knecon.fforesight:tenant-commons:0.31.0-RED10196.0") {
exclude(group = "com.iqser.red.commons", module = "storage-commons") exclude(group = "com.iqser.red.commons", module = "storage-commons")
} }
api("com.knecon.fforesight:database-tenant-commons:0.28.0") { api("com.knecon.fforesight:database-tenant-commons:0.28.0-RED10196.0") {
exclude(group = "com.knecon.fforesight", module = "tenant-commons") exclude(group = "com.knecon.fforesight", module = "tenant-commons")
} }
api("com.knecon.fforesight:keycloak-commons:0.30.0") { api("com.knecon.fforesight:keycloak-commons:0.30.0") {

View File

@ -19,10 +19,14 @@ import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ComponentMappingImportModel;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.EntityTypeImportModel; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.EntityTypeImportModel;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ImportTemplateResult;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.TemplateImportInfo;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.zipreaders.DossierTemplateArchiveReader;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.zipreaders.ZipEntryIterator;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
@ -33,14 +37,11 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ComponentMappingImportModel;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ImportTemplateResult;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.TemplateImportInfo;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.zipreaders.DossierTemplateArchiveReader;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.zipreaders.ZipEntryIterator;
import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.DateFormatsValidationService; import com.iqser.red.service.persistence.management.v1.processor.service.DateFormatsValidationService;
import com.iqser.red.service.persistence.management.v1.processor.service.LayoutParsingTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.DefaultDateFormatsProvider; import com.iqser.red.service.persistence.management.v1.processor.service.DefaultDateFormatsProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.ReportTemplateService; import com.iqser.red.service.persistence.management.v1.processor.service.ReportTemplateService;
import com.iqser.red.service.persistence.management.v1.processor.service.RulesValidationService; import com.iqser.red.service.persistence.management.v1.processor.service.RulesValidationService;
@ -72,43 +73,44 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.redaction.v1.model.DroolsValidation; import com.iqser.red.service.redaction.v1.model.DroolsValidation;
import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantContext;
import io.micrometer.observation.annotation.Observed; import io.micrometer.observation.annotation.Observed;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class DossierTemplateImportService { public class DossierTemplateImportService {
@Value("${application.type}") DossierTemplateRepository dossierTemplateRepository;
private String applicationType; LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
RulesPersistenceService rulesPersistenceService;
private final DossierTemplateRepository dossierTemplateRepository; DateFormatsPersistenceService dateFormatsPersistenceService;
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; DossierTemplatePersistenceService dossierTemplatePersistenceService;
private final RulesPersistenceService rulesPersistenceService; DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
private final DateFormatsPersistenceService dateFormatsPersistenceService; FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
private final DossierTemplatePersistenceService dossierTemplatePersistenceService; ColorsService colorsService;
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService; DossierStatusPersistenceService dossierStatusPersistenceService;
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; WatermarkService watermarkService;
private final ColorsService colorsService; ReportTemplateService reportTemplateService;
private final DossierStatusPersistenceService dossierStatusPersistenceService; ReportTemplatePersistenceService reportTemplatePersistenceService;
private final WatermarkService watermarkService; RulesValidationService rulesValidationService;
private final ReportTemplateService reportTemplateService; DateFormatsValidationService dateFormatsValidationService;
private final ReportTemplatePersistenceService reportTemplatePersistenceService; StorageService storageService;
private final RulesValidationService rulesValidationService; FileManagementServiceSettings settings;
private final DateFormatsValidationService dateFormatsValidationService; ComponentMappingService componentMappingService;
private final StorageService storageService; ComponentDefinitionPersistenceService componentDefinitionPersistenceService;
private final FileManagementServiceSettings settings; EntityTypeImportService entityTypeImportService;
private final ComponentMappingService componentMappingService; SystemManagedTypesImport systemManagedTypesImport;
private final ComponentDefinitionPersistenceService componentDefinitionPersistenceService; LayoutParsingTypeProvider layoutParsingTypeProvider;
private final EntityTypeImportService entityTypeImportService; CurrentApplicationTypeProvider currentApplicationTypeProvider;
private final SystemManagedTypesImport systemManagedTypesImport; DefaultDateFormatsProvider defaultDateFormatsProvider;
private final DefaultDateFormatsProvider defaultDateFormatsProvider;
public String importDossierTemplate(ImportDossierTemplateRequest request) { public String importDossierTemplate(ImportDossierTemplateRequest request) {
@ -147,6 +149,10 @@ public class DossierTemplateImportService {
int importStep = 1; int importStep = 1;
var dossierTemplateMeta = request.getDossierTemplate(); var dossierTemplateMeta = request.getDossierTemplate();
if (dossierTemplateMeta.getLayoutParsingType() == null) {
dossierTemplateMeta.setLayoutParsingType(layoutParsingTypeProvider.deferFromCurrentApplicationType());
}
TemplateImportInfo templateImportInfo = TemplateImportInfo.builder().build(); TemplateImportInfo templateImportInfo = TemplateImportInfo.builder().build();
DossierTemplateEntity existingDossierTemplate = null; DossierTemplateEntity existingDossierTemplate = null;
@ -302,7 +308,6 @@ public class DossierTemplateImportService {
dossierTemplateEntity.setId(UUID.randomUUID().toString()); dossierTemplateEntity.setId(UUID.randomUUID().toString());
dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplateEntity.setCreatedBy(request.getUserId()); dossierTemplateEntity.setCreatedBy(request.getUserId());
dossierTemplateEntity.setLayoutParsingType(deferFromApplicationType());
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity);
loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate)); loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate));
@ -496,7 +501,7 @@ public class DossierTemplateImportService {
private void setDataFormats(ImportTemplateResult request, String dossierTemplateId) { private void setDataFormats(ImportTemplateResult request, String dossierTemplateId) {
String dateFormats = request.getDateFormats(); String dateFormats = request.getDateFormats();
if (dateFormats == null && applicationType.equals("DocuMine")) { if (dateFormats == null && currentApplicationTypeProvider.isDocuMine()) {
dateFormats = defaultDateFormatsProvider.getDateFormats(); dateFormats = defaultDateFormatsProvider.getDateFormats();
} }
if (dateFormats != null) { if (dateFormats != null) {
@ -523,7 +528,7 @@ public class DossierTemplateImportService {
dossierTemplateEntity.setModifiedBy(userId); dossierTemplateEntity.setModifiedBy(userId);
dossierTemplateEntity.setValidFrom(dossierTemplate.getValidFrom() == null ? dossierTemplateEntity.getValidFrom() : dossierTemplate.getValidFrom()); dossierTemplateEntity.setValidFrom(dossierTemplate.getValidFrom() == null ? dossierTemplateEntity.getValidFrom() : dossierTemplate.getValidFrom());
dossierTemplateEntity.setValidTo(dossierTemplate.getValidTo() == null ? dossierTemplateEntity.getValidTo() : dossierTemplate.getValidTo()); dossierTemplateEntity.setValidTo(dossierTemplate.getValidTo() == null ? dossierTemplateEntity.getValidTo() : dossierTemplate.getValidTo());
dossierTemplateEntity.setLayoutParsingType(deferFromApplicationType()); dossierTemplateEntity.setLayoutParsingType(layoutParsingTypeProvider.deferFromCurrentApplicationType());
dossierTemplateEntity.setDownloadFileTypes(dossierTemplate.getDownloadFileTypes() == null || dossierTemplate.getDownloadFileTypes() dossierTemplateEntity.setDownloadFileTypes(dossierTemplate.getDownloadFileTypes() == null || dossierTemplate.getDownloadFileTypes()
.isEmpty() ? dossierTemplateEntity.getDownloadFileTypes() : dossierTemplate.getDownloadFileTypes()); .isEmpty() ? dossierTemplateEntity.getDownloadFileTypes() : dossierTemplate.getDownloadFileTypes());
@ -531,12 +536,6 @@ public class DossierTemplateImportService {
} }
private LayoutParsingType deferFromApplicationType() {
return Objects.equals(applicationType, "DocuMine") ? LayoutParsingType.DOCUMINE_OLD : LayoutParsingType.REDACT_MANAGER_WITHOUT_DUPLICATE_PARAGRAPH;
}
private void setColors(String dossierTemplateId, Colors requestedColors) { private void setColors(String dossierTemplateId, Colors requestedColors) {
// set colors // set colors
if (requestedColors != null) { if (requestedColors != null) {

View File

@ -2,7 +2,6 @@ package com.iqser.red.service.persistence.management.v1.processor.migration;
import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.MIGRATION_REQUEST_QUEUE; import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.MIGRATION_REQUEST_QUEUE;
import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -27,7 +26,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.migration.MigratedIds; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.migration.MigratedIds;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry;
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.FileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus;
@ -123,7 +121,7 @@ public class SaasMigrationService implements TenantSyncService {
// delete NER_ENTITIES since offsets depend on old document structure. // delete NER_ENTITIES since offsets depend on old document structure.
storageService.deleteObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(file.getDossierId(), file.getFileId(), FileType.NER_ENTITIES)); storageService.deleteObject(TenantContext.getTenantId(), StorageIdUtils.getStorageId(file.getDossierId(), file.getFileId(), FileType.NER_ENTITIES));
var layoutParsingRequest = layoutParsingRequestFactory.build(file.getDossierId(), file.getFileId(), false); var layoutParsingRequest = layoutParsingRequestFactory.build(dossier.getDossierTemplate().getId(), file.getDossierId(), file.getFileId(), false);
rabbitTemplate.convertAndSend(LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_EXCHANGE, TenantContext.getTenantId(), layoutParsingRequest); rabbitTemplate.convertAndSend(LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_EXCHANGE, TenantContext.getTenantId(), layoutParsingRequest);
@ -159,7 +157,7 @@ public class SaasMigrationService implements TenantSyncService {
log.info("Starting Migration for dossierId {} and fileId {}", dossierId, fileId); log.info("Starting Migration for dossierId {} and fileId {}", dossierId, fileId);
saasMigrationStatusPersistenceService.createMigrationRequiredStatus(dossierId, fileId); saasMigrationStatusPersistenceService.createMigrationRequiredStatus(dossierId, fileId);
var layoutParsingRequest = layoutParsingRequestFactory.build(dossierId, fileId, false); var layoutParsingRequest = layoutParsingRequestFactory.build(dossier.getDossierTemplate().getId(), dossierId, fileId, false);
rabbitTemplate.convertAndSend(LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_EXCHANGE, TenantContext.getTenantId(), layoutParsingRequest); rabbitTemplate.convertAndSend(LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_EXCHANGE, TenantContext.getTenantId(), layoutParsingRequest);
} }

View File

@ -1,20 +1,14 @@
package com.iqser.red.service.persistence.management.v1.processor.migration.migrations; package com.iqser.red.service.persistence.management.v1.processor.migration.migrations;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; import com.iqser.red.service.persistence.management.v1.processor.migration.Migration;
import com.iqser.red.service.persistence.management.v1.processor.service.DefaultDateFormatsProvider; import com.iqser.red.service.persistence.management.v1.processor.service.DefaultDateFormatsProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DateFormatsPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DateFormatsPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
@ -31,14 +25,13 @@ public class AddDateFormatsToTemplatesMigration25 extends Migration {
private static final long VERSION = 25; private static final long VERSION = 25;
@Autowired @Autowired
DateFormatsPersistenceService dateFormatsPersistenceService; private DateFormatsPersistenceService dateFormatsPersistenceService;
@Autowired @Autowired
DossierTemplatePersistenceService dossierTemplatePersistenceService; private DossierTemplatePersistenceService dossierTemplatePersistenceService;
@Autowired @Autowired
DefaultDateFormatsProvider defaultDateFormatsProvider; private DefaultDateFormatsProvider defaultDateFormatsProvider;
@Autowired
@Value("${application.type}") private CurrentApplicationTypeProvider currentApplicationTypeProvider;
private String applicationType;
public AddDateFormatsToTemplatesMigration25() { public AddDateFormatsToTemplatesMigration25() {
@ -51,7 +44,7 @@ public class AddDateFormatsToTemplatesMigration25 extends Migration {
@SneakyThrows @SneakyThrows
protected void migrate() { protected void migrate() {
if (!applicationType.equalsIgnoreCase("DocuMine")) { if (!currentApplicationTypeProvider.isDocuMine()) {
log.info("Skipping AddDateFormatsToTemplatesMigration25 as application type is not DocuMine!!!"); log.info("Skipping AddDateFormatsToTemplatesMigration25 as application type is not DocuMine!!!");
return; return;
} }

View File

@ -3,18 +3,16 @@ package com.iqser.red.service.persistence.management.v1.processor.migration.migr
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.pdftron.redaction.v1.api.model.ApplicationType;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; import com.iqser.red.service.persistence.management.v1.processor.migration.Migration;
import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentDefinitionService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentDefinitionService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinitionAddRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinitionAddRequest;
import lombok.experimental.NonFinal;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@ -116,16 +114,14 @@ public class ComponentOverridesMigration21 extends Migration {
"Certificate of analysis batch identification", "Certificate of analysis batch identification",
"Certificate of analysis batch identification")); "Certificate of analysis batch identification"));
@NonFinal
@Value("${application.type}")
String applicationType;
@Autowired @Autowired
ComponentDefinitionService componentDefinitionService; ComponentDefinitionService componentDefinitionService;
@Autowired @Autowired
DossierTemplatePersistenceService dossierTemplatePersistenceService; DossierTemplatePersistenceService dossierTemplatePersistenceService;
@Autowired @Autowired
StorageToMongoCopyService storageToMongoCopyService; StorageToMongoCopyService storageToMongoCopyService;
@Autowired
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
public ComponentOverridesMigration21() { public ComponentOverridesMigration21() {
@ -137,7 +133,7 @@ public class ComponentOverridesMigration21 extends Migration {
@Override @Override
protected void migrate() { protected void migrate() {
if (!applicationType.equals("DocuMine")) { if (!currentApplicationTypeProvider.isDocuMine()) {
log.info("Skipping component migration, due to application type not being equal to DOCUMINE!"); log.info("Skipping component migration, due to application type not being equal to DOCUMINE!");
} }

View File

@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; import com.iqser.red.service.persistence.management.v1.processor.migration.Migration;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
@ -16,7 +17,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Setter @Setter
@Service @Service
public class DocumineLayoutRewriteMigration20 extends Migration { public class DocumineLayoutRewriteMigration20 extends Migration {
private static final String NAME = "Reanalyse layout for not approved Documine files"; private static final String NAME = "Reanalyse layout for not approved Documine files";
private static final long VERSION = 20; private static final long VERSION = 20;
@ -30,10 +31,8 @@ public class DocumineLayoutRewriteMigration20 extends Migration {
@Autowired @Autowired
private FileStatusPersistenceService fileStatusPersistenceService; private FileStatusPersistenceService fileStatusPersistenceService;
@Autowired
@Value("${application.type}") private CurrentApplicationTypeProvider currentApplicationTypeProvider;
private String applicationType;
public DocumineLayoutRewriteMigration20() { public DocumineLayoutRewriteMigration20() {
@ -45,7 +44,7 @@ public class DocumineLayoutRewriteMigration20 extends Migration {
@Override @Override
protected void migrate() { protected void migrate() {
if(!applicationType.equalsIgnoreCase("DocuMine")){ if (!currentApplicationTypeProvider.isDocuMine()) {
log.info("Skipping DocumineLayoutRewriteMigration20 as application type is not DocuMine!!!"); log.info("Skipping DocumineLayoutRewriteMigration20 as application type is not DocuMine!!!");
return; return;
} }

View File

@ -0,0 +1,44 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.stereotype.Service;
import com.knecon.fforesight.tenantcommons.TenantApplicationType;
import com.knecon.fforesight.tenantcommons.TenantContext;
import com.knecon.fforesight.tenantcommons.TenantProvider;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
@Service
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class CurrentApplicationTypeProvider {
TenantProvider tenantProvider;
Map<String, TenantApplicationType> cache = new ConcurrentHashMap<>();
public TenantApplicationType get() {
return cache.computeIfAbsent(TenantContext.getTenantId(), tenantProvider::getTenantApplicationType);
}
public boolean isDocuMine() {
return get().equals(TenantApplicationType.DocuMine);
}
public boolean isRedactManager() {
return get().equals(TenantApplicationType.RedactManager);
}
}

View File

@ -14,11 +14,9 @@ import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.iqser.red.service.pdftron.redaction.v1.api.model.ApplicationType;
import com.iqser.red.service.pdftron.redaction.v1.api.model.ProcessUntouchedDocumentRequest; import com.iqser.red.service.pdftron.redaction.v1.api.model.ProcessUntouchedDocumentRequest;
import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration; import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
@ -89,7 +87,6 @@ import lombok.AccessLevel;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.NonFinal;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@ -98,10 +95,6 @@ import lombok.extern.slf4j.Slf4j;
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class FileStatusService { public class FileStatusService {
@NonFinal
@Value("${application.type}")
String applicationType;
FileStatusPersistenceService fileStatusPersistenceService; FileStatusPersistenceService fileStatusPersistenceService;
DossierPersistenceService dossierPersistenceService; DossierPersistenceService dossierPersistenceService;
DossierTemplatePersistenceService dossierTemplatePersistenceService; DossierTemplatePersistenceService dossierTemplatePersistenceService;
@ -125,6 +118,7 @@ public class FileStatusService {
ComponentDefinitionPersistenceService componentDefinitionPersistenceService; ComponentDefinitionPersistenceService componentDefinitionPersistenceService;
EntityLogMongoService entityLogMongoService; EntityLogMongoService entityLogMongoService;
ComponentLogMongoService componentLogMongoService; ComponentLogMongoService componentLogMongoService;
CurrentApplicationTypeProvider currentApplicationTypeProvider;
DictionaryPersistenceService dictionaryPersistenceService; DictionaryPersistenceService dictionaryPersistenceService;
WebsocketService websocketService; WebsocketService websocketService;
@ -332,7 +326,7 @@ public class FileStatusService {
FileType.DOCUMENT_TEXT.name(), FileType.DOCUMENT_TEXT.name(),
FileType.DOCUMENT_TEXT_OLD.getExtension())) { FileType.DOCUMENT_TEXT_OLD.getExtension())) {
var layoutParsingRequest = layoutParsingRequestFactory.build(dossierId, fileId, priority); var layoutParsingRequest = layoutParsingRequestFactory.build(dossierTemplate.getId(), dossierId, fileId, priority);
setStatusFullProcessing(fileId); setStatusFullProcessing(fileId);
log.info("Add file: {} from dossier {} to layout parsing request queue", fileId, dossierId); log.info("Add file: {} from dossier {} to layout parsing request queue", fileId, dossierId);
rabbitTemplate.convertAndSend(LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_EXCHANGE, TenantContext.getTenantId(), layoutParsingRequest); rabbitTemplate.convertAndSend(LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_EXCHANGE, TenantContext.getTenantId(), layoutParsingRequest);
@ -495,12 +489,12 @@ public class FileStatusService {
@SneakyThrows @SneakyThrows
public void addToPreprocessingQueue(String dossierId, String fileId, String filename) { public void addToPreprocessingQueue(String dossierId, String fileId, String filename) {
ApplicationType type = ApplicationType.REDACT_MANAGER; var processUntouchedDocumentRequest = ProcessUntouchedDocumentRequest.builder()
if (applicationType.equals("DocuMine")) { .highlightExtractionEnabled(currentApplicationTypeProvider.isRedactManager())
type = ApplicationType.DOCUMINE; .dossierId(dossierId)
} .fileId(fileId)
.fileName(filename)
var processUntouchedDocumentRequest = ProcessUntouchedDocumentRequest.builder().applicationType(type).dossierId(dossierId).fileId(fileId).fileName(filename).build(); .build();
setStatusPreProcessingQueued(fileId); setStatusPreProcessingQueued(fileId);
@ -772,7 +766,7 @@ public class FileStatusService {
if (removeWatermark) { if (removeWatermark) {
features.add(AzureOcrFeature.REMOVE_WATERMARKS); features.add(AzureOcrFeature.REMOVE_WATERMARKS);
} }
if (applicationType.equals("DocuMine")) { if (currentApplicationTypeProvider.isDocuMine()) {
features.add(AzureOcrFeature.ROTATION_CORRECTION); features.add(AzureOcrFeature.ROTATION_CORRECTION);
features.add(AzureOcrFeature.FONT_STYLE_DETECTION); features.add(AzureOcrFeature.FONT_STYLE_DETECTION);
} }

View File

@ -0,0 +1,27 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import org.springframework.stereotype.Service;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
@Service
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class LayoutParsingTypeProvider {
CurrentApplicationTypeProvider currentApplicationTypeProvider;
public LayoutParsingType deferFromCurrentApplicationType() {
return switch (currentApplicationTypeProvider.get()) {
case DocuMine -> LayoutParsingType.DOCUMINE_OLD;
case Clarifynd -> LayoutParsingType.CLARIFYND;
default -> LayoutParsingType.REDACT_MANAGER_WITHOUT_DUPLICATE_PARAGRAPH;
};
}
}

View File

@ -2,10 +2,10 @@ package com.iqser.red.service.persistence.management.v1.processor.service.layout
import java.util.Optional; import java.util.Optional;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
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.FileType;
@ -18,21 +18,17 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LayoutParsingRequestFactory { public class LayoutParsingRequestFactory {
@Value("${application.type}")
private String applicationType;
private final FileManagementStorageService fileManagementStorageService; private final FileManagementStorageService fileManagementStorageService;
private final FileManagementServiceSettings fileManagementServiceSettings; private final FileManagementServiceSettings fileManagementServiceSettings;
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
public LayoutParsingRequest build(String dossierId, String fileId, boolean priority) {
LayoutParsingType type = switch (applicationType) { public LayoutParsingRequest build(String dossierTemplateId, String dossierId, String fileId, boolean priority) {
case "DocuMine" -> LayoutParsingType.DOCUMINE;
case "TAAS" -> LayoutParsingType.CLARIFYND; LayoutParsingType layoutParsingType = dossierTemplatePersistenceService.getDossierTemplate(
default -> LayoutParsingType.REDACT_MANAGER; dossierTemplateId).getLayoutParsingType();
};
Optional<String> optionalImageFileId = fileManagementStorageService.objectExists(dossierId, fileId, FileType.IMAGE_INFO) // Optional<String> optionalImageFileId = fileManagementStorageService.objectExists(dossierId, fileId, FileType.IMAGE_INFO) //
? Optional.of(StorageIdUtils.getStorageId(dossierId, fileId, FileType.IMAGE_INFO)) : Optional.empty(); ? Optional.of(StorageIdUtils.getStorageId(dossierId, fileId, FileType.IMAGE_INFO)) : Optional.empty();
@ -44,7 +40,7 @@ public class LayoutParsingRequestFactory {
? Optional.of(StorageIdUtils.getStorageId(dossierId, fileId, FileType.VISUAL_LAYOUT)) : Optional.empty(); ? Optional.of(StorageIdUtils.getStorageId(dossierId, fileId, FileType.VISUAL_LAYOUT)) : Optional.empty();
return LayoutParsingRequest.builder() return LayoutParsingRequest.builder()
.layoutParsingType(type) .layoutParsingType(layoutParsingType)
.identifier(QueueMessageIdentifierService.buildIdentifier(dossierId, fileId, priority)) .identifier(QueueMessageIdentifierService.buildIdentifier(dossierId, fileId, priority))
.originFileStorageId(StorageIdUtils.getStorageId(dossierId, fileId, FileType.ORIGIN)) .originFileStorageId(StorageIdUtils.getStorageId(dossierId, fileId, FileType.ORIGIN))
.imagesFileStorageId(optionalImageFileId) .imagesFileStorageId(optionalImageFileId)

View File

@ -3,14 +3,12 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
@ -18,6 +16,8 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.LayoutParsingTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository;
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
@ -32,16 +32,14 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class DossierTemplatePersistenceService { public class DossierTemplatePersistenceService {
@Value("${application.type}")
private String applicationType;
public static final String DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE = "DossierTemplate with Id %s not found."; public static final String DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE = "DossierTemplate with Id %s not found.";
private final DossierTemplateRepository dossierTemplateRepository; private final DossierTemplateRepository dossierTemplateRepository;
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
private final RulesPersistenceService rulesPersistenceService; private final RulesPersistenceService rulesPersistenceService;
private final DictionaryPersistenceService dictionaryPersistenceService; private final DictionaryPersistenceService dictionaryPersistenceService;
private final CurrentApplicationTypeProvider currentApplicationTypeProvider;
private final LayoutParsingTypeProvider layoutParsingTypeProvider;
private final TypeRepository typeRepository; private final TypeRepository typeRepository;
private final static int MAX_NAME_LENGTH = 255; private final static int MAX_NAME_LENGTH = 255;
@ -51,6 +49,10 @@ public class DossierTemplatePersistenceService {
@Transactional @Transactional
public DossierTemplateEntity createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) { public DossierTemplateEntity createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) {
if (createOrUpdateDossierRequest.getLayoutParsingType() == null) {
createOrUpdateDossierRequest.setLayoutParsingType(layoutParsingTypeProvider.deferFromCurrentApplicationType());
}
if (createOrUpdateDossierRequest.getDossierTemplateId() != null) { if (createOrUpdateDossierRequest.getDossierTemplateId() != null) {
validateDossierTemplateDates(createOrUpdateDossierRequest.getValidFrom(), createOrUpdateDossierRequest.getValidTo()); validateDossierTemplateDates(createOrUpdateDossierRequest.getValidFrom(), createOrUpdateDossierRequest.getValidTo());
validateDossierTemplate(createOrUpdateDossierRequest.getName(), createOrUpdateDossierRequest.getDescription()); validateDossierTemplate(createOrUpdateDossierRequest.getName(), createOrUpdateDossierRequest.getDescription());
@ -66,7 +68,7 @@ public class DossierTemplatePersistenceService {
dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser()); dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser());
dossierTemplate.get().setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate.get())); dossierTemplate.get().setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate.get()));
dossierTemplate.get().setLayoutParsingType(deferFromApplicationType()); dossierTemplate.get().setLayoutParsingType(createOrUpdateDossierRequest.getLayoutParsingType());
return dossierTemplate.get(); return dossierTemplate.get();
} else { } else {
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId())); throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId()));
@ -83,7 +85,7 @@ public class DossierTemplatePersistenceService {
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate); BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate);
dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser()); dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser());
dossierTemplate.setLayoutParsingType(deferFromApplicationType()); dossierTemplate.setLayoutParsingType(createOrUpdateDossierRequest.getLayoutParsingType());
rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.ENTITY); rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.ENTITY);
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate);
loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate)); loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate));
@ -94,12 +96,6 @@ public class DossierTemplatePersistenceService {
} }
private LayoutParsingType deferFromApplicationType() {
return Objects.equals(applicationType, "DocuMine") ? LayoutParsingType.DOCUMINE_OLD : LayoutParsingType.REDACT_MANAGER_WITHOUT_DUPLICATE_PARAGRAPH;
}
private void validateDossierTemplateDates(OffsetDateTime validFrom, OffsetDateTime validTo) { private void validateDossierTemplateDates(OffsetDateTime validFrom, OffsetDateTime validTo) {
if (validFrom != null && validTo != null && validFrom.isAfter(validTo)) { if (validFrom != null && validTo != null && validFrom.isAfter(validTo)) {
@ -155,7 +151,7 @@ public class DossierTemplatePersistenceService {
if (rulesOptional.isEmpty()) { if (rulesOptional.isEmpty()) {
return DossierTemplateStatus.INCOMPLETE; return DossierTemplateStatus.INCOMPLETE;
} }
if (applicationType.equals("DocuMine")) { if (currentApplicationTypeProvider.isDocuMine()) {
var componentRulesOptional = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT); var componentRulesOptional = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT);
if (componentRulesOptional.isEmpty()) { if (componentRulesOptional.isEmpty()) {
return DossierTemplateStatus.INCOMPLETE; return DossierTemplateStatus.INCOMPLETE;
@ -194,6 +190,14 @@ public class DossierTemplatePersistenceService {
} }
@Transactional
public LayoutParsingType getDossierTemplateLayoutParsingType(String dossierTemplateId) {
return dossierTemplateRepository.findLayoutParsingTypeByIdAndNotDeleted(dossierTemplateId)
.orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)));
}
public void checkDossierTemplateExistsOrElseThrow404(String dossierTemplateId) { public void checkDossierTemplateExistsOrElseThrow404(String dossierTemplateId) {
if (!dossierTemplateRepository.existsByIdAndNotDeleted(dossierTemplateId)) { if (!dossierTemplateRepository.existsByIdAndNotDeleted(dossierTemplateId)) {

View File

@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
public interface DossierTemplateRepository extends JpaRepository<DossierTemplateEntity, String> { public interface DossierTemplateRepository extends JpaRepository<DossierTemplateEntity, String> {
@ -28,4 +29,8 @@ public interface DossierTemplateRepository extends JpaRepository<DossierTemplate
boolean existsByNameAndIdNot(String name, String id); boolean existsByNameAndIdNot(String name, String id);
@Query("select d.layoutParsingType from DossierTemplateEntity d where d.id = :dossierTemplateId and d.softDeleteTime is null")
Optional<LayoutParsingType> findLayoutParsingTypeByIdAndNotDeleted(@Param("dossierTemplateId") String dossierTemplateId);
} }

View File

@ -15,7 +15,6 @@ kubernetes.namespace: ${NAMESPACE:default}
project.version: 1.0-SNAPSHOT project.version: 1.0-SNAPSHOT
application: application:
type: "RedactManager"
rss.component-log.enabled: false rss.component-log.enabled: false
server: server:

View File

@ -23,6 +23,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur
import com.iqser.red.service.persistence.management.v1.processor.migration.migrations.AddDateFormatsToTemplatesMigration25; import com.iqser.red.service.persistence.management.v1.processor.migration.migrations.AddDateFormatsToTemplatesMigration25;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DateFormatsPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DateFormatsPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
import com.knecon.fforesight.tenantcommons.TenantApplicationType;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ -41,6 +42,13 @@ public class AddDateFormatsToTemplatesMigration25Test extends AbstractPersistenc
private DateFormatsPersistenceService dateFormatsPersistenceService; private DateFormatsPersistenceService dateFormatsPersistenceService;
@Override
protected TenantApplicationType getTenantApplicationType() {
return TenantApplicationType.DocuMine;
}
@Test @Test
@SneakyThrows @SneakyThrows
public void testAddDateFormatsMigration() { public void testAddDateFormatsMigration() {

View File

@ -15,12 +15,12 @@ import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockedStatic; import org.mockito.MockedStatic;
import org.springframework.test.util.ReflectionTestUtils;
import com.iqser.red.persistence.service.v1.external.api.impl.controller.StatusController; import com.iqser.red.persistence.service.v1.external.api.impl.controller.StatusController;
import com.iqser.red.persistence.service.v2.external.api.impl.controller.ComponentControllerV2; import com.iqser.red.persistence.service.v2.external.api.impl.controller.ComponentControllerV2;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentLogService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
@ -57,6 +57,8 @@ public class ComponentControllerV2Test {
private StatusController statusController; private StatusController statusController;
@Mock @Mock
private ComponentLog mockComponentLog; private ComponentLog mockComponentLog;
@Mock
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
@BeforeEach @BeforeEach
@ -64,8 +66,7 @@ public class ComponentControllerV2Test {
void setUp() { void setUp() {
openMocks(this); openMocks(this);
when(currentApplicationTypeProvider.isDocuMine()).thenReturn(true);
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "DocuMine");
} }
@ -109,7 +110,7 @@ public class ComponentControllerV2Test {
@Test @Test
void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_getComponents() { void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_getComponents() {
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "RedactManager"); when(currentApplicationTypeProvider.isDocuMine()).thenReturn(false);
when(userService.getUserById(USER_ID)).thenReturn(Optional.of(new User())); when(userService.getUserById(USER_ID)).thenReturn(Optional.of(new User()));
@ -120,7 +121,7 @@ public class ComponentControllerV2Test {
@Test @Test
void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_getComponentsOfDossier() { void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_getComponentsOfDossier() {
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "RedactManager"); when(currentApplicationTypeProvider.isDocuMine()).thenReturn(false);
assertThrows(NotAllowedException.class, () -> componentControllerV2.getComponentsOfDossier(DOSSIER_TEMPLATE_ID, DOSSIER_ID, false)); assertThrows(NotAllowedException.class, () -> componentControllerV2.getComponentsOfDossier(DOSSIER_TEMPLATE_ID, DOSSIER_ID, false));
} }
@ -143,7 +144,7 @@ public class ComponentControllerV2Test {
@Test @Test
void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_addOverride() { void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_addOverride() {
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "RedactManager"); when(currentApplicationTypeProvider.isDocuMine()).thenReturn(false);
Component component = Component.builder().name("dummy").componentValues(Collections.emptyList()).build(); Component component = Component.builder().name("dummy").componentValues(Collections.emptyList()).build();
@ -163,7 +164,7 @@ public class ComponentControllerV2Test {
@Test @Test
void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_getOverrides() { void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_getOverrides() {
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "RedactManager"); when(currentApplicationTypeProvider.isDocuMine()).thenReturn(false);
assertThrows(NotAllowedException.class, () -> componentControllerV2.getOverrides(DOSSIER_TEMPLATE_ID, DOSSIER_ID, FILE_ID)); assertThrows(NotAllowedException.class, () -> componentControllerV2.getOverrides(DOSSIER_TEMPLATE_ID, DOSSIER_ID, FILE_ID));
} }
@ -190,7 +191,7 @@ public class ComponentControllerV2Test {
@Test @Test
void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_revertOverrides() { void shouldThrowNotAllowedExceptionIfApplicationTypeIsRM_revertOverrides() {
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "RedactManager"); when(currentApplicationTypeProvider.isDocuMine()).thenReturn(false);
RevertOverrideRequest revertOverrideRequest = new RevertOverrideRequest(); RevertOverrideRequest revertOverrideRequest = new RevertOverrideRequest();

View File

@ -4,19 +4,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.MockitoAnnotations.openMocks;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.test.util.ReflectionTestUtils;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.persistence.service.v2.external.api.impl.controller.ComponentControllerV2; import com.iqser.red.persistence.service.v2.external.api.impl.controller.ComponentControllerV2;
@ -31,6 +27,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.component.R
import com.iqser.red.service.persistence.service.v2.api.external.model.Component; import com.iqser.red.service.persistence.service.v2.api.external.model.Component;
import com.iqser.red.service.persistence.service.v2.api.external.model.ComponentValue; import com.iqser.red.service.persistence.service.v2.api.external.model.ComponentValue;
import com.iqser.red.service.persistence.service.v2.api.external.model.EntityReference; import com.iqser.red.service.persistence.service.v2.api.external.model.EntityReference;
import com.knecon.fforesight.tenantcommons.TenantApplicationType;
import feign.FeignException; import feign.FeignException;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ -59,11 +56,10 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest
private ComponentControllerV2 componentControllerV2; private ComponentControllerV2 componentControllerV2;
@BeforeEach @Override
@SneakyThrows protected TenantApplicationType getTenantApplicationType() {
void setUp() {
ReflectionTestUtils.setField(componentControllerV2, "applicationType", "DocuMine"); return TenantApplicationType.DocuMine;
} }

View File

@ -30,11 +30,13 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe
import com.iqser.red.service.persistence.management.v1.processor.migration.RankDeDuplicationService; import com.iqser.red.service.persistence.management.v1.processor.migration.RankDeDuplicationService;
import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateImportService; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateImportService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.LayoutParsingTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ComponentDefinitionPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ComponentDefinitionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateExportService; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateExportService;
@ -56,6 +58,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ExportDownloadRequest; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ExportDownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.TypeRankSummary; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.TypeRankSummary;
import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ -114,6 +117,11 @@ public class DossierTemplateCloneAndExportWithDuplicateRanksTest {
@MockBean @MockBean
private SystemManagedTypesImport systemManagedTypesImport; private SystemManagedTypesImport systemManagedTypesImport;
@MockBean
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
@MockBean
private LayoutParsingTypeProvider layoutParsingTypeProvider;
ObjectMapper mapper; ObjectMapper mapper;
private DossierTemplateManagementService dossierTemplateManagementService; private DossierTemplateManagementService dossierTemplateManagementService;
@ -134,6 +142,8 @@ public class DossierTemplateCloneAndExportWithDuplicateRanksTest {
legalBasisMappingPersistenceService, legalBasisMappingPersistenceService,
rulesPersistenceService, rulesPersistenceService,
dictionaryPersistenceService, dictionaryPersistenceService,
currentApplicationTypeProvider,
layoutParsingTypeProvider,
typeRepository); typeRepository);
dossierTemplateCloneService = new DossierTemplateCloneService(dossierTemplateRepository, dossierTemplateCloneService = new DossierTemplateCloneService(dossierTemplateRepository,
legalBasisMappingPersistenceService, legalBasisMappingPersistenceService,
@ -189,6 +199,9 @@ public class DossierTemplateCloneAndExportWithDuplicateRanksTest {
typesValues.add(typeRank2); typesValues.add(typeRank2);
when(dictionaryPersistenceService.getTypeRankSummaryList(dossierTemplateId)).thenReturn(typesValues); when(dictionaryPersistenceService.getTypeRankSummaryList(dossierTemplateId)).thenReturn(typesValues);
when(currentApplicationTypeProvider.isDocuMine()).thenReturn(false);
when(layoutParsingTypeProvider.deferFromCurrentApplicationType()).thenReturn(LayoutParsingType.REDACT_MANAGER_WITHOUT_DUPLICATE_PARAGRAPH);
} }

View File

@ -20,7 +20,6 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.util.ReflectionTestUtils;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
@ -29,8 +28,10 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.LayoutParsingTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ComponentDefinitionPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ComponentDefinitionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DateFormatsPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DateFormatsPersistenceService;
@ -48,6 +49,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest;
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.DossierTemplateStatus;
import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ -103,6 +105,12 @@ public class DossierTemplateCloneServiceTest {
@MockBean @MockBean
private ComponentDefinitionPersistenceService componentDefinitionPersistenceService; private ComponentDefinitionPersistenceService componentDefinitionPersistenceService;
@MockBean
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
@MockBean
private LayoutParsingTypeProvider layoutParsingTypeProvider;
private DossierTemplateCloneService dossierTemplateCloneService; private DossierTemplateCloneService dossierTemplateCloneService;
private DossierTemplatePersistenceService dossierTemplatePersistenceService; private DossierTemplatePersistenceService dossierTemplatePersistenceService;
@ -118,9 +126,12 @@ public class DossierTemplateCloneServiceTest {
legalBasisMappingPersistenceService, legalBasisMappingPersistenceService,
rulesPersistenceService, rulesPersistenceService,
dictionaryPersistenceService, dictionaryPersistenceService,
currentApplicationTypeProvider,
layoutParsingTypeProvider,
typeRepository); typeRepository);
ReflectionTestUtils.setField(dossierTemplatePersistenceService, "applicationType", "RedactManager"); when(currentApplicationTypeProvider.isDocuMine()).thenReturn(true);
when(layoutParsingTypeProvider.deferFromCurrentApplicationType()).thenReturn(LayoutParsingType.DOCUMINE_OLD);
dossierTemplateCloneService = new DossierTemplateCloneService(dossierTemplateRepository, dossierTemplateCloneService = new DossierTemplateCloneService(dossierTemplateRepository,
legalBasisMappingPersistenceService, legalBasisMappingPersistenceService,
@ -152,6 +163,7 @@ public class DossierTemplateCloneServiceTest {
dummyTemplate.setValidFrom(OffsetDateTime.now().minusYears(6)); dummyTemplate.setValidFrom(OffsetDateTime.now().minusYears(6));
dummyTemplate.setValidTo(OffsetDateTime.now().plusYears(2)); dummyTemplate.setValidTo(OffsetDateTime.now().plusYears(2));
dummyTemplate.setDossierTemplateStatus(DossierTemplateStatus.INACTIVE); dummyTemplate.setDossierTemplateStatus(DossierTemplateStatus.INACTIVE);
dummyTemplate.setLayoutParsingType(LayoutParsingType.REDACT_MANAGER_WITHOUT_DUPLICATE_PARAGRAPH);
when(dossierTemplateRepository.findById(anyString())).thenReturn(Optional.of(dummyTemplate)); when(dossierTemplateRepository.findById(anyString())).thenReturn(Optional.of(dummyTemplate));
} }

View File

@ -64,6 +64,7 @@ import com.iqser.red.service.persistence.management.v1.processor.dataexchange.se
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles; import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService; import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
import com.iqser.red.service.persistence.management.v1.processor.service.CurrentApplicationTypeProvider;
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService; import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
@ -116,6 +117,7 @@ import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverte
import com.knecon.fforesight.keycloakcommons.security.TenantAuthenticationManagerResolver; import com.knecon.fforesight.keycloakcommons.security.TenantAuthenticationManagerResolver;
import com.knecon.fforesight.mongo.database.commons.liquibase.TenantCreatedMongoEventHandler; import com.knecon.fforesight.mongo.database.commons.liquibase.TenantCreatedMongoEventHandler;
import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
import com.knecon.fforesight.tenantcommons.TenantApplicationType;
import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantContext;
import com.knecon.fforesight.tenantcommons.TenantsClient; import com.knecon.fforesight.tenantcommons.TenantsClient;
import com.knecon.fforesight.tenantcommons.model.AuthDetails; import com.knecon.fforesight.tenantcommons.model.AuthDetails;
@ -129,8 +131,10 @@ import com.mongodb.MongoCommandException;
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
import io.micrometer.prometheus.PrometheusMeterRegistry; import io.micrometer.prometheus.PrometheusMeterRegistry;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists; import org.assertj.core.util.Lists;
import org.bson.BsonArray; import org.bson.BsonArray;
import org.bson.BsonDocument; import org.bson.BsonDocument;
@ -146,8 +150,7 @@ import org.quartz.Scheduler;
@EnableFeignClients(basePackageClasses = FileClient.class) @EnableFeignClients(basePackageClasses = FileClient.class)
@Import(AbstractPersistenceServerServiceTest.TestConfiguration.class) @Import(AbstractPersistenceServerServiceTest.TestConfiguration.class)
@ContextConfiguration(initializers = {AbstractPersistenceServerServiceTest.Initializer.class}) @ContextConfiguration(initializers = {AbstractPersistenceServerServiceTest.Initializer.class})
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO")
properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO")
public abstract class AbstractPersistenceServerServiceTest { public abstract class AbstractPersistenceServerServiceTest {
public static final String TENANT_1 = "redaction"; public static final String TENANT_1 = "redaction";
@ -279,6 +282,8 @@ public abstract class AbstractPersistenceServerServiceTest {
private SystemManagedTypesImport systemManagedTypesImport; private SystemManagedTypesImport systemManagedTypesImport;
@Autowired @Autowired
private DictionaryManagementService dictionaryManagementService; private DictionaryManagementService dictionaryManagementService;
@MockBean
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
private static String[] getAllRoles() { private static String[] getAllRoles() {
@ -299,6 +304,15 @@ public abstract class AbstractPersistenceServerServiceTest {
public void setupTenantContext() { public void setupTenantContext() {
TenantContext.setTenantId(TENANT_1); TenantContext.setTenantId(TENANT_1);
when(currentApplicationTypeProvider.get()).thenReturn(getTenantApplicationType());
when(currentApplicationTypeProvider.isDocuMine()).thenReturn(getTenantApplicationType().equals(TenantApplicationType.DocuMine));
when(currentApplicationTypeProvider.isRedactManager()).thenReturn(getTenantApplicationType().equals(TenantApplicationType.RedactManager));
}
protected TenantApplicationType getTenantApplicationType() {
return TenantApplicationType.RedactManager;
} }
@ -328,33 +342,33 @@ public abstract class AbstractPersistenceServerServiceTest {
var allUsers = new ArrayList<com.iqser.red.service.persistence.management.v1.processor.service.users.model.User>(); var allUsers = new ArrayList<com.iqser.red.service.persistence.management.v1.processor.service.users.model.User>();
allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
.userId("manageradmin1@test.com") .userId("manageradmin1@test.com")
.email("manageradmin1@test.com") .email("manageradmin1@test.com")
.isActive(true) .isActive(true)
.roles(Set.of(getAllRoles())) .roles(Set.of(getAllRoles()))
.build()); .build());
allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
.userId("manageradmin2@test.com") .userId("manageradmin2@test.com")
.email("manageradmin2@test.com") .email("manageradmin2@test.com")
.isActive(true) .isActive(true)
.roles(Set.of(getAllRoles())) .roles(Set.of(getAllRoles()))
.build()); .build());
allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
.userId("manageradmin3@test.com") .userId("manageradmin3@test.com")
.email("manageradmin3@test.com") .email("manageradmin3@test.com")
.isActive(true) .isActive(true)
.roles(Set.of(getAllRoles())) .roles(Set.of(getAllRoles()))
.build()); .build());
Set<String> allRolesWithoutValid = Arrays.stream(getAllRoles()) Set<String> allRolesWithoutValid = Arrays.stream(getAllRoles())
.collect(Collectors.toSet()); .collect(Collectors.toSet());
allRolesWithoutValid.remove("RED_USER"); allRolesWithoutValid.remove("RED_USER");
allRolesWithoutValid.remove("RED_MANAGER"); allRolesWithoutValid.remove("RED_MANAGER");
allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
.userId("manageradmin4@test.com") .userId("manageradmin4@test.com")
.email("manageradmin4@test.com") .email("manageradmin4@test.com")
.isActive(true) .isActive(true)
.roles(allRolesWithoutValid) .roles(allRolesWithoutValid)
.build()); .build());
when(usersClient.getAllUsers(false)).thenReturn(allUsers); when(usersClient.getAllUsers(false)).thenReturn(allUsers);
when(usersClient.getAllUsers(true)).thenReturn(allUsers); when(usersClient.getAllUsers(true)).thenReturn(allUsers);
// doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any()); // doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any());
@ -362,18 +376,11 @@ public abstract class AbstractPersistenceServerServiceTest {
when(rabbitAdmin.getQueueInfo(any())).thenReturn(null); when(rabbitAdmin.getQueueInfo(any())).thenReturn(null);
when(entityLogService.getEntityLog(any(), any())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0)); when(entityLogService.getEntityLog(any(), any())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0));
when(entityLogService.getEntityLog(any(), any(), any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1, when(entityLogService.getEntityLog(any(), any(), any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0));
1,
Lists.newArrayList(),
null,
0,
0,
0,
0));
when(redactionClient.testRules(any())).thenReturn(DroolsValidation.builder() when(redactionClient.testRules(any())).thenReturn(DroolsValidation.builder()
.syntaxErrorMessages(Collections.emptyList()) .syntaxErrorMessages(Collections.emptyList())
.deprecatedWarnings(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList())
.build()); .build());
} }
@ -392,41 +399,41 @@ public abstract class AbstractPersistenceServerServiceTest {
redactionTenant.setDisplayName(TENANT_1); redactionTenant.setDisplayName(TENANT_1);
redactionTenant.setAuthDetails(new AuthDetails()); redactionTenant.setAuthDetails(new AuthDetails());
redactionTenant.setDatabaseConnection(DatabaseConnection.builder() redactionTenant.setDatabaseConnection(DatabaseConnection.builder()
.driver("postgresql") .driver("postgresql")
.host(postgreSQLContainerMaster.getHost()) .host(postgreSQLContainerMaster.getHost())
.port(port) .port(port)
.database("integration-tests-db-master") .database("integration-tests-db-master")
.schema("public") .schema("public")
.username("sa") .username("sa")
.password(encryptionDecryptionService.encrypt("sa")) .password(encryptionDecryptionService.encrypt("sa"))
.build()); .build());
redactionTenant.setSearchConnection(SearchConnection.builder() redactionTenant.setSearchConnection(SearchConnection.builder()
.hosts(Set.of("elasticsearchHost")) .hosts(Set.of("elasticsearchHost"))
.port(9200) .port(9200)
.scheme("https") .scheme("https")
.username("elastic") .username("elastic")
.numberOfShards("1") .numberOfShards("1")
.numberOfReplicas("5") .numberOfReplicas("5")
.build()); .build());
redactionTenant.setS3StorageConnection(S3StorageConnection.builder() redactionTenant.setS3StorageConnection(S3StorageConnection.builder()
.key("key") .key("key")
.secret("secret") .secret("secret")
.signerType("signerType") .signerType("signerType")
.bucketName("bucketName") .bucketName("bucketName")
.region("eu") .region("eu")
.endpoint("endpoint") .endpoint("endpoint")
.build()); .build());
redactionTenant.setMongoDBConnection(MongoDBConnection.builder() redactionTenant.setMongoDBConnection(MongoDBConnection.builder()
.prefix("mongodb") .prefix("mongodb")
.username(MONGO_USERNAME) .username(MONGO_USERNAME)
.password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD))
.address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort())
.database(MONGO_DATABASE) .database(MONGO_DATABASE)
.options("") .options("")
.build()); .build());
var redactionTenant2 = new TenantResponse(); var redactionTenant2 = new TenantResponse();
redactionTenant2.setTenantId(TENANT_2); redactionTenant2.setTenantId(TENANT_2);
@ -434,41 +441,41 @@ public abstract class AbstractPersistenceServerServiceTest {
redactionTenant2.setDisplayName(TENANT_2); redactionTenant2.setDisplayName(TENANT_2);
redactionTenant2.setAuthDetails(new AuthDetails()); redactionTenant2.setAuthDetails(new AuthDetails());
redactionTenant2.setDatabaseConnection(DatabaseConnection.builder() redactionTenant2.setDatabaseConnection(DatabaseConnection.builder()
.driver("postgresql") .driver("postgresql")
.host(postgreSQLContainerMaster.getHost()) .host(postgreSQLContainerMaster.getHost())
.port(port) .port(port)
.database("integration-tests-db-master") .database("integration-tests-db-master")
.schema("public") .schema("public")
.username("sa") .username("sa")
.password(encryptionDecryptionService.encrypt("sa")) .password(encryptionDecryptionService.encrypt("sa"))
.build()); .build());
redactionTenant2.setSearchConnection(SearchConnection.builder() redactionTenant2.setSearchConnection(SearchConnection.builder()
.hosts(Set.of("elasticsearchHost")) .hosts(Set.of("elasticsearchHost"))
.port(9200) .port(9200)
.scheme("https") .scheme("https")
.username("elastic") .username("elastic")
.numberOfShards("1") .numberOfShards("1")
.numberOfReplicas("5") .numberOfReplicas("5")
.build()); .build());
redactionTenant2.setS3StorageConnection(S3StorageConnection.builder() redactionTenant2.setS3StorageConnection(S3StorageConnection.builder()
.key("key") .key("key")
.secret("secret") .secret("secret")
.signerType("signerType") .signerType("signerType")
.bucketName("bucketName") .bucketName("bucketName")
.region("eu") .region("eu")
.endpoint("endpoint") .endpoint("endpoint")
.build()); .build());
redactionTenant2.setMongoDBConnection(MongoDBConnection.builder() redactionTenant2.setMongoDBConnection(MongoDBConnection.builder()
.prefix("mongodb") .prefix("mongodb")
.username(MONGO_USERNAME) .username(MONGO_USERNAME)
.password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD))
.address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort())
.database(TENANT_2) .database(TENANT_2)
.options("") .options("")
.build()); .build());
when(tenantsClient.getTenant(TENANT_1)).thenReturn(redactionTenant); when(tenantsClient.getTenant(TENANT_1)).thenReturn(redactionTenant);
when(tenantsClient.getTenant(TENANT_2)).thenReturn(redactionTenant2); when(tenantsClient.getTenant(TENANT_2)).thenReturn(redactionTenant2);
@ -593,14 +600,14 @@ public abstract class AbstractPersistenceServerServiceTest {
log.info("Hosts are - Redis: {}, Postgres: {}, MongoDB: {}", redisContainer.getHost(), postgreSQLContainerMaster.getHost(), mongoInstance.getHost()); log.info("Hosts are - Redis: {}, Postgres: {}, MongoDB: {}", redisContainer.getHost(), postgreSQLContainerMaster.getHost(), mongoInstance.getHost());
TestPropertyValues.of("REDIS_PORT=" + redisContainer.getFirstMappedPort(), TestPropertyValues.of("REDIS_PORT=" + redisContainer.getFirstMappedPort(),
"REDIS_HOST=" + redisContainer.getHost(), "REDIS_HOST=" + redisContainer.getHost(),
"MONGODB_HOST=" + mongoInstance.getHost(), "MONGODB_HOST=" + mongoInstance.getHost(),
"MONGODB_PORT=" + mongoInstance.getFirstMappedPort(), "MONGODB_PORT=" + mongoInstance.getFirstMappedPort(),
"MONGODB_USER=" + MONGO_USERNAME, "MONGODB_USER=" + MONGO_USERNAME,
"MONGODB_PASSWORD=" + MONGO_PASSWORD, "MONGODB_PASSWORD=" + MONGO_PASSWORD,
"fforesight.jobs.enabled=false", "fforesight.jobs.enabled=false",
"fforesight.keycloak.enabled=false", "fforesight.keycloak.enabled=false",
"POD_NAME=persistence-service").applyTo(configurableApplicationContext.getEnvironment()); "POD_NAME=persistence-service").applyTo(configurableApplicationContext.getEnvironment());
} }
@ -608,10 +615,10 @@ public abstract class AbstractPersistenceServerServiceTest {
private static void createMongoDBDatabase(MongoDBTestContainer mongoDBTestContainer, String databaseName) { private static void createMongoDBDatabase(MongoDBTestContainer mongoDBTestContainer, String databaseName) {
try (MongoClient mongoClient = MongoClients.create(String.format("mongodb://%s:%s@%s:%s/", try (MongoClient mongoClient = MongoClients.create(String.format("mongodb://%s:%s@%s:%s/",
MONGO_USERNAME, MONGO_USERNAME,
MONGO_PASSWORD, MONGO_PASSWORD,
mongoDBTestContainer.getHost(), mongoDBTestContainer.getHost(),
mongoDBTestContainer.getFirstMappedPort()))) { mongoDBTestContainer.getFirstMappedPort()))) {
MongoDatabase database = mongoClient.getDatabase(databaseName); MongoDatabase database = mongoClient.getDatabase(databaseName);
BsonDocument createUserCommand = new BsonDocument(); BsonDocument createUserCommand = new BsonDocument();
createUserCommand.append("createUser", new BsonString(MONGO_USERNAME)); createUserCommand.append("createUser", new BsonString(MONGO_USERNAME));
@ -651,6 +658,7 @@ public abstract class AbstractPersistenceServerServiceTest {
return mock; return mock;
} }
@Bean @Bean
public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) { public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) {

View File

@ -1,7 +1,5 @@
monitoring.enabled: true monitoring.enabled: true
application:
type: "RedactManager"
spring: spring:
main: main:

View File

@ -6,6 +6,11 @@ plugins {
val springBootStarterVersion = "3.1.5" val springBootStarterVersion = "3.1.5"
dependencies { dependencies {
api("com.knecon.fforesight:layoutparser-service-internal-api:0.188.0") {
exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1")
exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1")
}
api("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2") api("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2")
api("com.google.guava:guava:31.1-jre") api("com.google.guava:guava:31.1-jre")
api("org.springframework.boot:spring-boot-starter-validation:3.1.3") api("org.springframework.boot:spring-boot-starter-validation:3.1.3")

View File

@ -4,6 +4,8 @@ import java.time.OffsetDateTime;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -41,4 +43,6 @@ public class CreateOrUpdateDossierTemplateRequest {
private boolean removeWatermark; private boolean removeWatermark;
private LayoutParsingType layoutParsingType;
} }

View File

@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@ -36,5 +37,6 @@ public class DossierTemplate {
private boolean applyDictionaryUpdatesToAllDossiersByDefault; private boolean applyDictionaryUpdatesToAllDossiersByDefault;
private boolean ocrByDefault; private boolean ocrByDefault;
private boolean removeWatermark; private boolean removeWatermark;
private LayoutParsingType layoutParsingType;
} }

View File

@ -12,7 +12,7 @@ dependencies {
api("com.knecon.fforesight:mongo-database-commons:0.16.0") { api("com.knecon.fforesight:mongo-database-commons:0.16.0") {
exclude(group = "com.knecon.fforesight", module = "tenant-commons") exclude(group = "com.knecon.fforesight", module = "tenant-commons")
} }
api("com.knecon.fforesight:tenant-commons:0.31.0") api("com.knecon.fforesight:tenant-commons:0.31.0-RED10196.0")
api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootStarterVersion}") api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootStarterVersion}")
api("org.springframework.boot:spring-boot-starter-validation:3.1.3") api("org.springframework.boot:spring-boot-starter-validation:3.1.3")
testImplementation("com.iqser.red.commons:test-commons:2.1.0") testImplementation("com.iqser.red.commons:test-commons:2.1.0")