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