RED-8339: Fixes

This commit is contained in:
Ali Oezyetimoglu 2024-05-27 12:43:25 +02:00
parent 1fda16b6ca
commit ac6b11089b
7 changed files with 780 additions and 13 deletions

View File

@ -124,10 +124,12 @@ public class ComponentLogService {
if (optionalComponentLogEntry.isPresent()) {
ComponentLogEntry componentToUpdate = optionalComponentLogEntry.get();
componentToUpdate.setOverridden(true);
componentToUpdate.setComponentValues(componentOverride.getComponentValues());
saveOverride(dossierId, fileId, componentToUpdate);
auditOverride(dossierId, fileId, componentToUpdate);
} else {
componentOverride.setOverridden(true);
insertOverride(dossierId, fileId, componentOverride);
auditOverride(dossierId, fileId, componentOverride);
}
@ -144,9 +146,7 @@ public class ComponentLogService {
private void insertOverride(String dossierId, String fileId, ComponentLogEntry componentToAdd) {
ComponentLog componentLog = fileManagementStorageService.getComponentLog(dossierId, fileId);
componentLogMongoService.insertComponentLogEntries(dossierId, fileId, componentLog, List.of(componentToAdd));
componentLogMongoService.insertComponentLogEntries(dossierId, fileId, List.of(componentToAdd));
}

View File

@ -0,0 +1,10 @@
package com.iqser.red.service.peristence.v1.server.integration.client;
import org.springframework.cloud.openfeign.FeignClient;
import com.iqser.red.service.persistence.service.v2.api.external.resource.ComponentResource;
@FeignClient(name = "ComponentResource", url = "http://localhost:28080")
public interface ComponentClient extends ComponentResource {
}

View File

@ -0,0 +1,91 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import java.io.IOException;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.peristence.v1.server.integration.client.ComponentClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLog;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
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.EntityReference;
public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private DossierTesterAndProvider dossierTesterAndProvider;
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
@Autowired
private ComponentClient componentClient;
@Autowired
private DossierTemplateClient dossierTemplateClient;
@Test
public void testAddAndGetOverrides() throws IOException {
var dossier = dossierTesterAndProvider.provideTestDossier();
var dossierTemplate = dossierTemplateClient.getDossierTemplate(dossier.getDossierTemplateId());
var file = fileTesterAndProvider.testAndProvideFile(dossier, "filename");
Component componentOverrideModel = Component.builder()
.name("Study_Title")
.componentValues(List.of(ComponentValue.builder()
.value("AAAA Strange Chemical Name And the rest of a title With a dash and some more text")
.valueDescription("First found value of type title or else ''")
.componentRuleId("StudyTitle.0.0")
.entityReferences(List.of(EntityReference.builder()
.id("cf7f0d0c4c07918ce7d67b204f5fdb7d")
.type("title")
.entityRuleId("DOC.6.1")
.page(1)
.build()))
.build()))
.overridden(true)
.build();
var componentLogJson = new ClassPathResource("files/componentlog/exampleComponentLog.json");
// ComponentLog componentLog = objectMapper.readValue(componentLogJson.getInputStream(), ComponentLog.class);
fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.COMPONENT_LOG, componentLogJson.getInputStream());
ComponentLog componentLog = fileManagementStorageService.getComponentLog(dossier.getId(), file.getId());
componentClient.addOverride(dossierTemplate.getId(), dossier.getId(), file.getId(), componentOverrideModel);
var overrides = componentClient.getOverrides(dossierTemplate.getId(), dossier.getId(), file.getId());
assertEquals(dossierTemplate.getId(), overrides.getDossierTemplateId());
assertEquals(dossier.getId(), overrides.getDossierId());
assertEquals(file.getId(), overrides.getFileId());
assertFalse(overrides.getComponentOverrideModels().isEmpty());
var sth = componentClient.getComponents(dossierTemplate.getId(), dossier.getId(), file.getId(), true);
System.out.println(sth);
System.out.println("See ya");
}
}

View File

@ -0,0 +1,655 @@
{
"analysisNumber": 1,
"componentRulesVersion": 1,
"componentLogEntries": [
{
"name": "Study_Title",
"componentValues": [
{
"value": "Strange Chemical Name And the rest of a title With a dash and some more text",
"originalValue": "Strange Chemical Name And the rest of a title With a dash and some more text",
"valueDescription": "First found value of type title or else ''",
"componentRuleId": "StudyTitle.0.0",
"componentLogEntityReferences": [
{
"id": "cf7f0d0c4c07918ce7d67b204f5fdb7d",
"type": "title",
"entityRuleId": "DOC.6.1",
"page": 1
},
{
"id": "cf7f0d0c4c07918ce7d67b204f5fdb7d",
"type": "title",
"entityRuleId": "DOC.6.1",
"page": 1
}
]
}
],
"overridden": false
},
{
"name": "Performing_Laboratory",
"componentValues": [
{
"value": "Test Labor Deutschland AG, Switzerland",
"originalValue": "Test Labor Deutschland AG, Switzerland",
"valueDescription": "Laboratory name and country found!",
"componentRuleId": "PerformingLaboratory.1.0",
"componentLogEntityReferences": [
{
"id": "cdfa1386cc0b1c665c7dfb1b8bd2a134",
"type": "laboratory_name",
"entityRuleId": "DOC.7.0",
"page": 1
},
{
"id": "281e6f46a8b400cfb66e02ed51cd6a7a",
"type": "laboratory_country",
"entityRuleId": "DOC.7.2",
"page": 1
}
]
},
{
"value": "Test Labor Deutschland AG, Switzerland",
"originalValue": "Test Labor Deutschland AG, Switzerland",
"valueDescription": "Laboratory name and country found!",
"componentRuleId": "PerformingLaboratory.1.0",
"componentLogEntityReferences": [
{
"id": "cdfa1386cc0b1c665c7dfb1b8bd2a134",
"type": "laboratory_name",
"entityRuleId": "DOC.7.0",
"page": 1
},
{
"id": "281e6f46a8b400cfb66e02ed51cd6a7a",
"type": "laboratory_country",
"entityRuleId": "DOC.7.2",
"page": 1
}
]
},
{
"value": "Test Labor Deutschland AG, Switzerland",
"originalValue": "Test Labor Deutschland AG, Switzerland",
"valueDescription": "Laboratory name and country found!",
"componentRuleId": "PerformingLaboratory.1.0",
"componentLogEntityReferences": [
{
"id": "cdfa1386cc0b1c665c7dfb1b8bd2a134",
"type": "laboratory_name",
"entityRuleId": "DOC.7.0",
"page": 1
},
{
"id": "281e6f46a8b400cfb66e02ed51cd6a7a",
"type": "laboratory_country",
"entityRuleId": "DOC.7.2",
"page": 1
}
]
},
{
"value": "Test Labor Deutschland AG, Switzerland",
"originalValue": "Test Labor Deutschland AG, Switzerland",
"valueDescription": "Laboratory name and country found!",
"componentRuleId": "PerformingLaboratory.1.0",
"componentLogEntityReferences": [
{
"id": "cdfa1386cc0b1c665c7dfb1b8bd2a134",
"type": "laboratory_name",
"entityRuleId": "DOC.7.0",
"page": 1
},
{
"id": "281e6f46a8b400cfb66e02ed51cd6a7a",
"type": "laboratory_country",
"entityRuleId": "DOC.7.2",
"page": 1
}
]
}
],
"overridden": false
},
{
"name": "Report_Number",
"componentValues": [
{
"value": "11/111-111A",
"originalValue": "11/111-111A",
"valueDescription": "First found value of type report_number or else ''",
"componentRuleId": "ReportNumber.0.0",
"componentLogEntityReferences": [
{
"id": "e2a93bcc72e9740bbfc19bd9cd982e01",
"type": "report_number",
"entityRuleId": "DOC.2.0",
"page": 1
},
{
"id": "e2a93bcc72e9740bbfc19bd9cd982e01",
"type": "report_number",
"entityRuleId": "DOC.2.0",
"page": 1
}
]
}
],
"overridden": false
},
{
"name": "GLP_Study",
"componentValues": [
{
"value": "Yes",
"originalValue": "Yes",
"valueDescription": "Yes if present, No if not",
"componentRuleId": "GLPStudy.0.0",
"componentLogEntityReferences": [
{
"id": "f898e5d91723480a4595d70371066a7f",
"type": "glp_study",
"entityRuleId": "DOC.8.0",
"page": 2
},
{
"id": "f898e5d91723480a4595d70371066a7f",
"type": "glp_study",
"entityRuleId": "DOC.8.0",
"page": 2
},
{
"id": "bb6817a9356ce9569d314a321aa44ad1",
"type": "glp_study",
"entityRuleId": "DOC.8.0",
"page": 11
},
{
"id": "bb6817a9356ce9569d314a321aa44ad1",
"type": "glp_study",
"entityRuleId": "DOC.8.0",
"page": 11
}
]
}
],
"overridden": false
},
{
"name": "Test_Guidelines_1",
"componentValues": [
{
"value": "Nº 402: Acute Dermal Toxicity (09/10/2017)",
"originalValue": "Nº 402: Acute Dermal Toxicity (09/10/2017)",
"valueDescription": "OECD Number and guideline year mapped!",
"componentRuleId": "TestGuideline.0.0",
"componentLogEntityReferences": [
{
"id": "fa103d7d55a67aff195a42d46cf5b1b1",
"type": "oecd_guideline_number",
"entityRuleId": "DOC.1.0",
"page": 1
},
{
"id": "a6a07692a60d3b8ef8d1261f23ab20c7",
"type": "oecd_guideline_year",
"entityRuleId": "DOC.1.0",
"page": 1
}
]
}
],
"overridden": false
},
{
"name": "Test_Guidelines_2",
"componentValues": [
{
"value": "EPA 870.1200 (1998), EPA 870.1200 (1998), EC 440/2008, B.3 (2008), EC 440/2008, B.3 (2008)",
"originalValue": "EPA 870.1200 (1998), EPA 870.1200 (1998), EC 440/2008, B.3 (2008), EC 440/2008, B.3 (2008)",
"valueDescription": "Joining all values of type epa_guideline, ec_guideline with ', '",
"componentRuleId": "TestGuideline.2.0",
"componentLogEntityReferences": [
{
"id": "80890bae7f2ea65c43f2e82ab847c424",
"type": "epa_guideline",
"entityRuleId": "DOC.1.0",
"page": 1
},
{
"id": "80890bae7f2ea65c43f2e82ab847c424",
"type": "epa_guideline",
"entityRuleId": "DOC.1.0",
"page": 1
},
{
"id": "7a23ea595ed928d777d00f1afa61f552",
"type": "ec_guideline",
"entityRuleId": "DOC.1.0",
"page": 1
},
{
"id": "7a23ea595ed928d777d00f1afa61f552",
"type": "ec_guideline",
"entityRuleId": "DOC.1.0",
"page": 1
}
]
}
],
"overridden": false
},
{
"name": "Experimental_Starting_Date",
"componentValues": [
{
"value": "14/05/2010, 14/05/2010",
"originalValue": "14/05/2010, 14/05/2010",
"valueDescription": "Convert values of type 'experimental_start_date' to dd/MM/yyyy joined with ', '",
"componentRuleId": "StartDate.0.0",
"componentLogEntityReferences": [
{
"id": "9819e3a491c9841ba76a526b215c2adf",
"type": "experimental_start_date",
"entityRuleId": "DOC.3.0",
"page": 3
},
{
"id": "9819e3a491c9841ba76a526b215c2adf",
"type": "experimental_start_date",
"entityRuleId": "DOC.3.0",
"page": 3
}
]
}
],
"overridden": false
},
{
"name": "Experimental_Completion_Date",
"componentValues": [
{
"value": "21/05/2010, 21/05/2010",
"originalValue": "21/05/2010, 21/05/2010",
"valueDescription": "Convert values of type 'experimental_end_date' to dd/MM/yyyy joined with ', '",
"componentRuleId": "CompletionDate.0.0",
"componentLogEntityReferences": [
{
"id": "9a2a7922adf21476bd8718f154fc1fb0",
"type": "experimental_end_date",
"entityRuleId": "DOC.4.0",
"page": 3
},
{
"id": "9a2a7922adf21476bd8718f154fc1fb0",
"type": "experimental_end_date",
"entityRuleId": "DOC.4.0",
"page": 3
}
]
}
],
"overridden": false
},
{
"name": "Certificate_of_Analysis_Batch_Identification",
"componentValues": [
{
"value": "AAA111-111-111",
"originalValue": "AAA111-111-111",
"valueDescription": "Joining all unique values of type batch_number with ', '",
"componentRuleId": "AnalysisCertificate.0.0",
"componentLogEntityReferences": [
{
"id": "2910c0d523ad15f9619e3c6b46200533",
"type": "batch_number",
"entityRuleId": "DOC.9.1",
"page": 6
},
{
"id": "2910c0d523ad15f9619e3c6b46200533",
"type": "batch_number",
"entityRuleId": "DOC.9.1",
"page": 6
},
{
"id": "b028246b799b7e32c0aef31e413c187f",
"type": "batch_number",
"entityRuleId": "DOC.9.1",
"page": 10
},
{
"id": "b028246b799b7e32c0aef31e413c187f",
"type": "batch_number",
"entityRuleId": "DOC.9.1",
"page": 10
}
]
}
],
"overridden": false
},
{
"name": "Species",
"componentValues": [
{
"value": "rats",
"originalValue": "rats",
"valueDescription": "First found value of type species or else ''",
"componentRuleId": "Species.0.0",
"componentLogEntityReferences": [
{
"id": "5f0b08c0e3d98545cd7647aac82b6bf2",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "5f0b08c0e3d98545cd7647aac82b6bf2",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "18ab2f51b57c2f91cea9350621e7152f",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "18ab2f51b57c2f91cea9350621e7152f",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "5557fd15f4c4e3e519cce0f47f64d3e1",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "5557fd15f4c4e3e519cce0f47f64d3e1",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "665743f4475ff7c82e642b2901376b28",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
},
{
"id": "665743f4475ff7c82e642b2901376b28",
"type": "species",
"entityRuleId": "DOC.5.2",
"page": 7
}
]
}
],
"overridden": false
},
{
"name": "Strain",
"componentValues": [
{
"value": "Crl:WI Wistar",
"originalValue": "Crl:WI Wistar",
"valueDescription": "First found value of type strain or else ''",
"componentRuleId": "Strain.0.0",
"componentLogEntityReferences": [
{
"id": "a77b13568f8d6885faabf90119dd9b40",
"type": "strain",
"entityRuleId": "DOC.5.3",
"page": 7
},
{
"id": "a77b13568f8d6885faabf90119dd9b40",
"type": "strain",
"entityRuleId": "DOC.5.3",
"page": 7
},
{
"id": "818d354d9dc4158e4c05e96de099f39c",
"type": "strain",
"entityRuleId": "DOC.5.3",
"page": 7
},
{
"id": "818d354d9dc4158e4c05e96de099f39c",
"type": "strain",
"entityRuleId": "DOC.5.3",
"page": 7
}
]
}
],
"overridden": false
},
{
"name": "Doses_mg_per_kg_bw",
"componentValues": [
{
"value": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"originalValue": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"valueDescription": "Joining all values of type doses_(mg_kg_bw) with ' '",
"componentRuleId": "Necropsy.1.0",
"componentLogEntityReferences": [
{
"id": "92b67bcf7b5f7f7bdfcb6d0991e6b4c2",
"type": "doses_(mg_kg_bw)",
"entityRuleId": "DOC.35.0",
"page": 4
},
{
"id": "92b67bcf7b5f7f7bdfcb6d0991e6b4c2",
"type": "doses_(mg_kg_bw)",
"entityRuleId": "DOC.35.0",
"page": 4
},
{
"id": "67e8421d095ed4c003ca2c21a120c00b",
"type": "doses_(mg_kg_bw)",
"entityRuleId": "DOC.35.0",
"page": 4
},
{
"id": "67e8421d095ed4c003ca2c21a120c00b",
"type": "doses_(mg_kg_bw)",
"entityRuleId": "DOC.35.0",
"page": 4
}
]
}
],
"overridden": false
},
{
"name": "Mortality_Statement",
"componentValues": [
{
"value": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"originalValue": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"valueDescription": "Joining all values of type mortality_statement with ' '",
"componentRuleId": "MortalityStatement.0.0",
"componentLogEntityReferences": [
{
"id": "08b4d86a822d87d6f4e7b1efdd364181",
"type": "mortality_statement",
"entityRuleId": "DOC.32.0",
"page": 8
},
{
"id": "08b4d86a822d87d6f4e7b1efdd364181",
"type": "mortality_statement",
"entityRuleId": "DOC.32.0",
"page": 8
},
{
"id": "cc1c76d7e9bd09483b1ffa91a0749c2c",
"type": "mortality_statement",
"entityRuleId": "DOC.32.0",
"page": 8
},
{
"id": "cc1c76d7e9bd09483b1ffa91a0749c2c",
"type": "mortality_statement",
"entityRuleId": "DOC.32.0",
"page": 8
}
]
}
],
"overridden": false
},
{
"name": "Weight_Behavior_Changes",
"componentValues": [
{
"value": "",
"originalValue": "",
"valueDescription": "Joining all values of type with '\n'",
"componentRuleId": "WeightBehavior.0.0",
"componentLogEntityReferences": []
}
],
"overridden": false
},
{
"name": "Necropsy_Findings",
"componentValues": [
{
"value": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"originalValue": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"valueDescription": "Joining all values of type necropsy_findings with ' '",
"componentRuleId": "Necropsy.0.0",
"componentLogEntityReferences": [
{
"id": "069397e80191213e72c792f177a22185",
"type": "necropsy_findings",
"entityRuleId": "DOC.17.0",
"page": 9
},
{
"id": "069397e80191213e72c792f177a22185",
"type": "necropsy_findings",
"entityRuleId": "DOC.17.0",
"page": 9
}
]
}
],
"overridden": false
},
{
"name": "Deviation_from_the_Guideline",
"componentValues": [
{
"value": "There was no deviation from the guidelines and from the Study Plan.\nThere was no deviation from the guidelines and from the Study Plan.",
"originalValue": "There was no deviation from the guidelines and from the Study Plan.\nThere was no deviation from the guidelines and from the Study Plan.",
"valueDescription": "Joining all values of type guideline_deviation with '\n'",
"componentRuleId": "GuidelineDeviation.0.0",
"componentLogEntityReferences": [
{
"id": "4553fb6da48b0c6d6d5d45860c7e473d",
"type": "guideline_deviation",
"entityRuleId": "DOC.11.0",
"page": 3
},
{
"id": "4553fb6da48b0c6d6d5d45860c7e473d",
"type": "guideline_deviation",
"entityRuleId": "DOC.11.0",
"page": 3
}
]
}
],
"overridden": false
},
{
"name": "Conclusion_LD50_Greater_than",
"componentValues": [
{
"value": "",
"originalValue": "",
"valueDescription": "No entity of type 'ld50_greater' found",
"componentRuleId": "Conclusion.1.1",
"componentLogEntityReferences": []
}
],
"overridden": false
},
{
"name": "Conclusion_LD50_mg_per_kg",
"componentValues": [
{
"value": "",
"originalValue": "",
"valueDescription": "Joining all unique values of type with ', '",
"componentRuleId": "Conclusion.0.0",
"componentLogEntityReferences": []
}
],
"overridden": false
},
{
"name": "Conclusion_Minimum_Confidence",
"componentValues": [
{
"value": "",
"originalValue": "",
"valueDescription": "Joining all unique values of type with ', '",
"componentRuleId": "Conclusion.2.0",
"componentLogEntityReferences": []
}
],
"overridden": false
},
{
"name": "Conclusion_Maximum_Confidence",
"componentValues": [
{
"value": "",
"originalValue": "",
"valueDescription": "Joining all unique values of type with ', '",
"componentRuleId": "Conclusion.3.0",
"componentLogEntityReferences": []
}
],
"overridden": false
},
{
"name": "Study_Conclusion",
"componentValues": [
{
"value": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"originalValue": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
"valueDescription": "Joining all values of type study_conclusion with ' '",
"componentRuleId": "StudyConclusion.0.0",
"componentLogEntityReferences": [
{
"id": "d9c491f44d607083e9e6609b19498d21",
"type": "study_conclusion",
"entityRuleId": "DOC.15.0",
"page": 4
},
{
"id": "d9c491f44d607083e9e6609b19498d21",
"type": "study_conclusion",
"entityRuleId": "DOC.15.0",
"page": 4
}
]
}
],
"overridden": false
}
]
}

View File

@ -1,5 +1,6 @@
package com.iqser.red.service.persistence.service.v1.api.shared.mongo.mapper;
import java.util.ArrayList;
import java.util.List;
import org.mapstruct.Mapper;
@ -20,8 +21,20 @@ public interface ComponentLogDocumentMapper {
@Mapping(source = "components", target = "componentLogEntries")
ComponentLog fromComponentLogDocument(ComponentLogDocument componentLogDocument);
default List<ComponentDocument> toComponentDocuments(String dossierId, String fileId, List<ComponentLogEntry> componentLogEntries) {
List<ComponentDocument> componentDocuments = new ArrayList<>();
List<ComponentDocument> toComponentDocuments(List<ComponentLogEntry> componentLogEntries);
String componentLogId = getComponentLogId(dossierId, fileId);
for (ComponentLogEntry componentLogEntry : componentLogEntries) {
ComponentDocument componentDocument = new ComponentDocument();
componentDocument.setId(getComponentId(componentLogId, componentLogEntry.getName()));
componentDocument.setComponentLogId(componentLogId);
componentDocument.setName(componentLogEntry.getName());
componentDocument.setOverrideValues(componentLogEntry.getComponentValues());
componentDocuments.add(componentDocument);
}
return componentDocuments;
}
@Mapping(source = "overrideValues", target = "componentValues")
@ -29,10 +42,12 @@ public interface ComponentLogDocumentMapper {
@Mapping(expression = "java(getComponentLogId(dossierId, fileId))", target = "id")
@Mapping(expression = "java(toComponentDocuments(dossierId, fileId, componentLog.getComponentLogEntries()))", target = "components")
ComponentLogDocument toComponentLogDocument(String dossierId, String fileId, ComponentLog componentLog);
@Mapping(expression = "java(getComponentId(componentLogId, componentLogEntry.getName()))", target = "id")
@Mapping(source = "componentLogEntry.componentValues", target = "overrideValues")
ComponentDocument toComponentDocument(String componentLogId, ComponentLogEntry componentLogEntry);

View File

@ -29,9 +29,10 @@ public class CustomComponentRepositoryImpl implements CustomComponentRepository
@Override
public List<ComponentDocument> findOverrides(String fileId, String dossierId) {
LookupOperation lookupOperation = LookupOperation.newLookup().from("componentDocument").localField("components").foreignField("_id").as("componentDocs");
LookupOperation lookupOperation = LookupOperation.newLookup().from("components").localField("overrideValues").foreignField("_id").as("componentDocs");
AggregationOperation matchOperation = match(Criteria.where("fileId").is(fileId).and("dossierId").is(dossierId));
AggregationOperation matchOperation = match(Criteria.where("componentLogId").is(dossierId + "/" + fileId));
// AggregationOperation matchOperation = match(Criteria.where("fileId").is(fileId).and("dossierId").is(dossierId));
AggregationOperation unwindOperation = unwind("componentDocs");
@ -41,7 +42,7 @@ public class CustomComponentRepositoryImpl implements CustomComponentRepository
Aggregation aggregation = newAggregation(matchOperation, lookupOperation, unwindOperation, matchNonEmptyOverrides, replaceRootOperation);
AggregationResults<ComponentDocument> results = mongoTemplate.aggregate(aggregation, "componentLogDocument", ComponentDocument.class);
AggregationResults<ComponentDocument> results = mongoTemplate.aggregate(aggregation, "component-logs", ComponentDocument.class);
return results.getMappedResults();
}

View File

@ -97,20 +97,15 @@ public class ComponentLogMongoService {
}
public void insertComponentLogEntries(String dossierId, String fileId, ComponentLog componentLog, List<ComponentLogEntry> componentLogEntries) {
public void insertComponentLogEntries(String dossierId, String fileId, List<ComponentLogEntry> componentLogEntries) {
String componentLogId = mapper.getComponentLogId(dossierId, fileId);
ComponentLogDocument componentLogDocument = mapper.toComponentLogDocument(dossierId, fileId, componentLog);
List<ComponentDocument> componentDocuments = componentLogEntries.stream()
.map(componentLogEntry -> mapper.toComponentDocument(componentLogId, componentLogEntry))
.toList();
componentLogDocument.getComponents().addAll(componentDocuments);
componentDocumentRepository.insert(componentDocuments);
componentLogDocumentRepository.save(componentLogDocument);
}