From 67780b01dabf4d39d6d08eb7ae12bfd1d74d472c Mon Sep 17 00:00:00 2001 From: Najwa Lakmouri <najwa.lakmouri@inrae.fr> Date: Wed, 26 Feb 2025 09:53:07 +0100 Subject: [PATCH] Fix GermplasmCriteria TODO in germplasm controller. Fix GNP-6632 --- .../api/brapi/v2/GermplasmV2Controller.java | 66 ++----------------- .../faidare/config/ElasticSearchConfig.java | 4 +- .../domain/brapi/v1/GermplasmV1VO.java | 1 - .../brapi/v2/GermplasmV2ControllerTest.java | 24 +++++-- 4 files changed, 27 insertions(+), 68 deletions(-) diff --git a/backend/src/main/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2Controller.java b/backend/src/main/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2Controller.java index 59efba81..addd0439 100644 --- a/backend/src/main/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2Controller.java +++ b/backend/src/main/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2Controller.java @@ -11,20 +11,12 @@ import fr.inrae.urgi.faidare.dao.v2.GermplasmMcpdDao; import fr.inrae.urgi.faidare.dao.v2.GermplasmV2Dao; import fr.inrae.urgi.faidare.domain.CollPopVO; import fr.inrae.urgi.faidare.domain.brapi.v2.GermplasmV2VO; -import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.data.domain.Pageable; import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @Tag(name = "Breeding API", description = "BrAPI endpoint") @RestController @@ -61,29 +53,10 @@ public class GermplasmV2Controller { @GetMapping("/germplasm") public BrapiListResponse<GermplasmV2VO> germplasm( - @RequestParam MultiValueMap<String, String> parameters){ - //TODO: this could be replaced with @RequestParam GermplasmCriteria gCrit) to be adjusted/tested - GermplasmCriteria gCrit = new GermplasmCriteria(); - if (parameters.get("accessionNumber") != null ){ gCrit.setAccessionNumber(parameters.get("accessionNumber")); } - if (parameters.get("binomialName") != null ){ gCrit.setAccessionNumber(parameters.get("binomialName")); } - if (parameters.get("genus") != null ){ gCrit.setAccessionNumber(parameters.get("genus")); } - if (parameters.get("species") != null ){ gCrit.setAccessionNumber(parameters.get("species")); } - if (parameters.get("synonym") != null ){ gCrit.setAccessionNumber(parameters.get("synonym")); } - if (parameters.get("parentDbId") != null ){ gCrit.setAccessionNumber(parameters.get("parentDbId")); } - if (parameters.get("progenyDbIb") != null ){ gCrit.setAccessionNumber(parameters.get("progenyDbIb")); } - if (parameters.get("commonCropName") != null ){ gCrit.setAccessionNumber(parameters.get("commonCropName")); } - if (parameters.get("programDbId") != null ){ gCrit.setAccessionNumber(parameters.get("programDbId")); } - if (parameters.get("trialDbId") != null ){ gCrit.setAccessionNumber(parameters.get("trialDbId")); } - if (parameters.get("studyDbId") != null ){ gCrit.setAccessionNumber(parameters.get("studyDbId")); } - if (parameters.get("germplasmDbId") != null ){ gCrit.setAccessionNumber(parameters.get("germplasmDbId")); } - if (parameters.get("germplasmName") != null ){ gCrit.setAccessionNumber(parameters.get("germplasmName")); } - if (parameters.get("germplasmPUI") != null ){ gCrit.setAccessionNumber(parameters.get("germplasmPUI")); } - if (parameters.get("externalReferenceID") != null ){ gCrit.setAccessionNumber(parameters.get("externalReferenceID")); } - if (parameters.get("externalReferenceId") != null ){ gCrit.setAccessionNumber(parameters.get("externalReferenceId")); } - if (parameters.get("externalReferenceSource") != null ){ gCrit.setAccessionNumber(parameters.get("externalReferenceSource")); } - - if (parameters.get("page") != null ){ gCrit.setPage(Integer.valueOf(parameters.get("page").get(0))); } - if (parameters.get("pageSize") != null ){ gCrit.setPageSize(Integer.valueOf(parameters.get("pageSize").get(0))); } + @ModelAttribute GermplasmCriteria gCrit){ + // We used @ModelAttribute because GermplasmCriteria is an object. + // This allows Spring to bind the request parameters directly to the fields of the GermplasmCriteria object. + BrapiListResponse<GermplasmV2VO> germplasmV2VOs = germplasmDao.findGermplasmsByCriteria(gCrit); return germplasmV2VOs; @@ -110,33 +83,4 @@ public class GermplasmV2Controller { return collectionDao.getAllCollections(); } - /* - @GetMapping("/germplasmAttribute") - public List<SearchHit<GermplasmAttributeV2VO>> germplasmAttribute(@RequestParam(value = "attributeValueDbId", defaultValue = "") String attributeValueDbId, - @RequestParam(value = "attributeDbId", defaultValue = "") String attributeDbId, - @RequestParam(value = "attributeName", defaultValue = "") String attributeName, - @RequestParam(value = "commonCropName", defaultValue = "") String commonCropName, - @RequestParam(value = "programDbId", defaultValue = "") String programDbId, - @RequestParam(value = "germplasmDbId", defaultValue = "") String germplasmDbId, - @RequestParam(value = "externalReferenceID", defaultValue = "") String externalReferenceID, - @RequestParam(value = "externalReferenceId", defaultValue = "") String externalReferenceId, - @RequestParam(value = "externalReferenceSource", defaultValue = "") String externalReferenceSource, - @RequestParam MultiValueMap<String, String> parameters){ - - GermplasmCriteria gCrit = new GermplasmCriteria(); - if (parameters.get("attributeValueDbId") != null ){ gCrit.setAccessionNumber(parameters.get("attributeValueDbId").get(0)); } - if (parameters.get("attributeDbId") != null ){ gCrit.setAccessionNumber(parameters.get("attributeDbId").get(0)); } - if (parameters.get("attributeName") != null ){ gCrit.setAccessionNumber(parameters.get("attributeName").get(0)); } - if (parameters.get("commonCropName") != null ){ gCrit.setAccessionNumber(parameters.get("commonCropName").get(0)); } - if (parameters.get("programDbId") != null ){ gCrit.setAccessionNumber(parameters.get("programDbId").get(0)); } - if (parameters.get("germplasmDbId") != null ){ gCrit.setAccessionNumber(parameters.get("germplasmDbId").get(0)); } - if (parameters.get("externalReferenceID") != null ){ gCrit.setAccessionNumber(parameters.get("externalReferenceID").get(0)); } - if (parameters.get("externalReferenceId") != null ){ gCrit.setAccessionNumber(parameters.get("externalReferenceId").get(0)); } - if (parameters.get("externalReferenceSource") != null ){ gCrit.setAccessionNumber(parameters.get("externalReferenceSource").get(0)); } - - SearchPage<GermplasmAttributeV2VO> germplasmAttribute = germplasmDao.findGermplasmsByCriteria(gCrit); - - return germplasmAttribute.getContent(); - } - */ } diff --git a/backend/src/main/java/fr/inrae/urgi/faidare/config/ElasticSearchConfig.java b/backend/src/main/java/fr/inrae/urgi/faidare/config/ElasticSearchConfig.java index 1e2ee37d..4f624823 100644 --- a/backend/src/main/java/fr/inrae/urgi/faidare/config/ElasticSearchConfig.java +++ b/backend/src/main/java/fr/inrae/urgi/faidare/config/ElasticSearchConfig.java @@ -25,7 +25,9 @@ public class ElasticSearchConfig { /** * Provides builder for {@link ElasticsearchRestClientAutoConfiguration} */ - //TODO: is this deprecated ? + //The RestClient.builder() is not deprecated in Elasticsearch 7.x. + // However, in newer versions (e.g., 8.x), there may be alternative approaches + // or native clients to consider. @Bean public RestClientBuilder restClientBuilder() { // if we are on CI, we use a hardcoded host, else we use the injected value diff --git a/backend/src/main/java/fr/inrae/urgi/faidare/domain/brapi/v1/GermplasmV1VO.java b/backend/src/main/java/fr/inrae/urgi/faidare/domain/brapi/v1/GermplasmV1VO.java index 7ba49058..5a843e3e 100644 --- a/backend/src/main/java/fr/inrae/urgi/faidare/domain/brapi/v1/GermplasmV1VO.java +++ b/backend/src/main/java/fr/inrae/urgi/faidare/domain/brapi/v1/GermplasmV1VO.java @@ -48,7 +48,6 @@ public final class GermplasmV1VO { private String genusSpecies; //GnpIS private String genusSpeciesSubtaxa; //GnpIS private String germplasmDbId; - //private List<DonorInfoVO> donorInfo; TODO activate private String germplasmName; private String germplasmPUI; private Long groupId; //GnpIS diff --git a/backend/src/test/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2ControllerTest.java b/backend/src/test/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2ControllerTest.java index 75b5945a..dfb7588f 100644 --- a/backend/src/test/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2ControllerTest.java +++ b/backend/src/test/java/fr/inrae/urgi/faidare/api/brapi/v2/GermplasmV2ControllerTest.java @@ -87,6 +87,25 @@ class GermplasmV2ControllerTest { assertThat(accNumber).isEqualTo("29814"); } + @Test + void should_get_germplasm_by_criteria() throws Exception{ + + HttpEntity<String> entity = new HttpEntity<>(null, headers); + ResponseEntity<String> response = testRestTemplate.exchange( + createURLWithPort("/brapi/v2/germplasm?accessionNumber=13481&genus=Triticum&species=aestivum&page=0&pageSize=1"), + HttpMethod.GET, entity, String.class); + assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); + String accNumber = JsonPath.parse(response.getBody()).read("$.result.data.[0].accessionNumber"); + assertThat(accNumber).isEqualTo("13481"); + String genus = JsonPath.parse(response.getBody()).read("$.result.data.[0].genus"); + assertThat(genus).isEqualTo("Triticum"); + String species = JsonPath.parse(response.getBody()).read("$.result.data.[0].species"); + assertThat(species).isEqualTo("aestivum"); + Integer pageSize = JsonPath.parse(response.getBody()).read("$.metadata.pagination.pageSize"); + assertThat(pageSize).isEqualTo(1); + + } + @Test @@ -127,11 +146,6 @@ class GermplasmV2ControllerTest { } - - @Test - void germplasmAttribute() { - } - @Test void should_get_collection(){ HttpEntity<String> entity = new HttpEntity<>(null, headers); -- GitLab