diff --git a/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/services/RapportQualiteServiceImpl.java b/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/services/RapportQualiteServiceImpl.java index fb181472..d9397cba 100644 --- a/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/services/RapportQualiteServiceImpl.java +++ b/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/services/RapportQualiteServiceImpl.java @@ -50,14 +50,7 @@ public RapportQualite transformDTOenRapportQualite(RapportQualiteDTO rapportQual private Rubrique transformRubrique(RubriqueDTO rubriqueDTO, RapportQualite rapportQualite, RequestProcessor requestProcessor) { - Rubrique rubrique = new Rubrique(); - rubrique.setId(rubriqueDTO.id()); - rubrique.setUri(rubriqueDTO.uri()); - rubrique.setIdParent(rubriqueDTO.idParent()); - rubrique.setType(rubriqueDTO.type()); - rubrique.setLabel(null);//valued later only if exists - rubrique.setContenus(null);//valued later only if exists - rubrique.setCodes(null);//valued later only if exists + Rubrique rubrique = createRubrique(rubriqueDTO); if (rubriqueDTO.titreLg1() != null && rubriqueDTO.titreLg2() != null) { List titre = createListLangueContenu(createLangueContenu(rubriqueDTO.titreLg1(), "fr"), createLangueContenu(rubriqueDTO.titreLg2(), "en")); @@ -79,10 +72,10 @@ private Rubrique transformRubrique(RubriqueDTO rubriqueDTO, RapportQualite rappo rubrique.setLabel(label); break; case "GEOGRAPHY": - rubrique.setTerritoire(createIdUriLabel(rubriqueDTO, rubriqueDTO.geoUri())); + rubrique.setTerritoire(createUriLabel(rubriqueDTO, rubriqueDTO.geoUri())); break; case "ORGANIZATION": - rubrique.setOrganisme(createIdUriLabel(rubriqueDTO, rubriqueDTO.organisationUri())); + rubrique.setOrganisme(createUriLabel(rubriqueDTO, rubriqueDTO.organisationUri())); break; default: break; @@ -92,8 +85,20 @@ private Rubrique transformRubrique(RubriqueDTO rubriqueDTO, RapportQualite rappo } + private static Rubrique createRubrique(RubriqueDTO rubriqueDTO) { + Rubrique rubrique = new Rubrique(); + rubrique.setId(rubriqueDTO.id()); + rubrique.setUri(rubriqueDTO.uri()); + rubrique.setIdParent(rubriqueDTO.idParent()); + rubrique.setType(rubriqueDTO.type()); + rubrique.setLabel(null);//valued only if exists + rubrique.setContenus(null);//valued only if exists + rubrique.setCodes(null);//valued only if exists + return rubrique; + } + - private IdUriLabel createIdUriLabel(RubriqueDTO rubriqueDTO, String uri) { + private IdUriLabel createUriLabel(RubriqueDTO rubriqueDTO, String uri) { IdUriLabel rubriqueWithIdUriLabel = new IdUriLabel(); rubriqueWithIdUriLabel.setId(rubriqueDTO.valeurSimple()); rubriqueWithIdUriLabel.setUri(URI.create(uri)); @@ -112,7 +117,7 @@ private IdUriLabel createIdUriLabel(RubriqueDTO rubriqueDTO, String uri) { } - private Rubrique addRichText(RubriqueDTO rubriqueDTO, Rubrique rubrique, RapportQualite rapportQualite, RequestProcessor requestProcessor) { + private void addRichText(RubriqueDTO rubriqueDTO, Rubrique rubrique, RapportQualite rapportQualite, RequestProcessor requestProcessor) { Contenu contenuLg1 = new Contenu(); contenuLg1.setDocuments(null);// will be valued only if a document exists if (StringUtils.isNotEmpty(rubriqueDTO.labelLg1())) { @@ -122,33 +127,11 @@ private Rubrique addRichText(RubriqueDTO rubriqueDTO, Rubrique rubrique, Rapport } contenuLg1.setLangue("fr"); if (rubriqueDTO.hasDocLg1()) { - List rubriqueDocuments = requestProcessor.queryToFindDocuments() - .with(new OperationsDocumentsRequestParametizer(rapportQualite.getId(), rubriqueDTO.id(),"fr")) - .executeQuery() - .listResult(DocumentDTO.class) - .result(); - for (DocumentDTO documentDTO : rubriqueDocuments) { - Document document = new Document(); - if (documentDTO.labelLg1() != null && documentDTO.labelLg2() != null){ - List label = createListLangueContenu(createLangueContenu(documentDTO.labelLg1(), "fr"), createLangueContenu(documentDTO.labelLg2(), "en")); - document.label(label); - } - if (documentDTO.labelLg1() != null && documentDTO.labelLg2() == null) { - LocalisedLabel labelLg1 = createLangueContenu(documentDTO.labelLg1(), "fr"); - List label = createListLangueContenu(labelLg1,null); - document.label(label); - } - - document.setDateMiseAJour(documentDTO.dateMiseAJour()); - document.setLangue(documentDTO.langue()); - document.setUrl(documentDTO.url()); - contenuLg1.addDocumentsItem(document); - } - + addContenu(requestProcessor, rapportQualite, rubriqueDTO, "fr", contenuLg1); } rubrique.addContenusItem(contenuLg1); - if (StringUtils.isNotEmpty(rubriqueDTO.labelLg2())||rubriqueDTO.hasDocLg2()){ + if (rubriqueDTO.isDocLg2NotEmpty() && (StringUtils.isNotEmpty(rubriqueDTO.labelLg2())||rubriqueDTO.hasDocLg2())){ Contenu contenuLg2 = new Contenu(); contenuLg2.setDocuments(null);// will be valued only if a document exists if (StringUtils.isNotEmpty(rubriqueDTO.labelLg2())) { @@ -157,52 +140,53 @@ private Rubrique addRichText(RubriqueDTO rubriqueDTO, Rubrique rubrique, Rapport contenuLg2.setTexte(""); } contenuLg2.setLangue("en"); - if (rubriqueDTO.hasDocLg2()) { - List rubriqueDocuments = requestProcessor.queryToFindDocuments() - .with(new OperationsDocumentsRequestParametizer(rapportQualite.getId(), rubriqueDTO.id(),"en")) - .executeQuery() - .listResult(DocumentDTO.class) - .result(); - for (DocumentDTO documentDTO : rubriqueDocuments) { - Document document = new Document(); - if (documentDTO.labelLg1() != null && documentDTO.labelLg2() != null){ - List label = createListLangueContenu(createLangueContenu(documentDTO.labelLg1(), "fr"), createLangueContenu(documentDTO.labelLg2(), "en")); - document.label(label); - } - if (documentDTO.labelLg1() != null && documentDTO.labelLg2() == null) { - LocalisedLabel labelFr = createLangueContenu(documentDTO.labelLg1(), "fr"); - List label = createListLangueContenu(labelFr,null); - document.label(label); - } - - document.setDateMiseAJour(documentDTO.dateMiseAJour()); - document.setLangue(documentDTO.langue()); - document.setUrl(documentDTO.url()); - contenuLg2.addDocumentsItem(document); - } + addContenu(requestProcessor, rapportQualite, rubriqueDTO, "en", contenuLg2); } rubrique.addContenusItem(contenuLg2); } - return rubrique; + + } + + + + private static void addContenu(RequestProcessor requestProcessor, RapportQualite rapportQualite, RubriqueDTO rubriqueDTO, String lang, Contenu contenuLg1) { + List rubriqueDocuments = requestProcessor.queryToFindDocuments() + .with(new OperationsDocumentsRequestParametizer(rapportQualite.getId(), rubriqueDTO.id(), lang)) + .executeQuery() + .listResult(DocumentDTO.class) + .result(); + for (DocumentDTO documentDTO : rubriqueDocuments) { + Document document = new Document(); + if (documentDTO.labelLg1() != null && documentDTO.labelLg2() != null) { + List label = createListLangueContenu(createLangueContenu(documentDTO.labelLg1(), "fr"), createLangueContenu(documentDTO.labelLg2(), "en")); + document.label(label); + } + if (documentDTO.labelLg1() != null && documentDTO.labelLg2() == null) { + LocalisedLabel labelsLg1 = createLangueContenu(documentDTO.labelLg1(), "fr"); + List label = createListLangueContenu(labelsLg1, null); + document.label(label); + } + + document.setDateMiseAJour(documentDTO.dateMiseAJour()); + document.setLangue(documentDTO.langue()); + document.setUrl(documentDTO.url()); + contenuLg1.addDocumentsItem(document); + } } private Rubrique addCodeList (RubriqueDTO rubriqueDTO, Rubrique rubrique, RapportQualite rapportQualite) { IdUriLabel rubriqueCodeList = new IdUriLabel(); rubriqueCodeList.setId(rubriqueDTO.valeurSimple()); rubriqueCodeList.setUri(URI.create(rubriqueDTO.codeUri())); - if (rubriqueDTO.labelObjLg1() != null && rubriqueDTO.labelObjLg2() != null) { - List labelCodeList = createListLangueContenu(createLangueContenu(rubriqueDTO.labelObjLg1(), "fr"), createLangueContenu(rubriqueDTO.labelObjLg2(), "en")); - rubriqueCodeList.setLabel(labelCodeList); - } - if (rubriqueDTO.labelObjLg1() != null && rubriqueDTO.labelObjLg2() == null) { - LocalisedLabel labelCodeListLg1 = createLangueContenu(rubriqueDTO.labelObjLg1(), "fr"); - List label = new ArrayList<>(); - label.add(labelCodeListLg1); - rubriqueCodeList.setLabel(label); + if (rubriqueDTO.labelObjLg1() != null) { + LocalisedLabel labelLg1 = createLangueContenu(rubriqueDTO.labelObjLg1(), "fr"); + LocalisedLabel labelLg2 = rubriqueDTO.labelObjLg2() != null ? createLangueContenu(rubriqueDTO.labelObjLg2(), "en") : null; + + rubriqueCodeList.setLabel(createListLangueContenu(labelLg1, labelLg2)); } - if (rapportQualite.getRubriques() != null) {//is null if the first rubrique is a CODE_LIST type rubrique + if (rapportQualite.getRubriques() != null) {//is null if the first rubric is a CODE_LIST type rubric boolean rubricExist = rapportQualite.getRubriques().stream() .filter(Objects::nonNull) // We keep only not null rubrics, otherwise NullPointer Exception when r.getId() diff --git a/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/utils/RubriqueDTO.java b/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/utils/RubriqueDTO.java index 39214ff2..abf5da62 100644 --- a/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/utils/RubriqueDTO.java +++ b/magma-diffusion-impl/src/main/java/fr/insee/rmes/magma/diffusion/utils/RubriqueDTO.java @@ -13,14 +13,22 @@ public record RubriqueDTO ( String labelLg2, String codeUri, String organisationUri, - boolean hasDocLg1, - boolean hasDocLg2, + Boolean hasDocLg1, + Boolean hasDocLg2, String labelObjLg1, String labelObjLg2, String maxOccurs, String geoUri ){ + public boolean isDocLg1NotEmpty() { + return hasDocLg1() != null; + } + + public boolean isDocLg2NotEmpty() { + return hasDocLg2() != null; + } + public RubriqueDTO withLabelLg1(String labelLg1) { return new RubriqueDTO(id, uri, idParent, type, titreLg1, titreLg2, valeurSimple, labelLg1, labelLg2, codeUri, organisationUri, hasDocLg1, hasDocLg2, labelObjLg1, labelObjLg2, maxOccurs, geoUri); diff --git a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/OperationsQueriesTest.java b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/OperationsQueriesTest.java index 7641de1e..2f3e8cc2 100644 --- a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/OperationsQueriesTest.java +++ b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/OperationsQueriesTest.java @@ -5,7 +5,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc;