From dc24277420cfc6ff26088b56a7c7a2dd232a5ced Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Tue, 11 Oct 2022 11:19:36 -0400 Subject: [PATCH 1/7] add controller for GET germplasm list by dbid --- .../brapi/v2/GermplasmController.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java index 231a528d8..1f9e12abb 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java @@ -32,6 +32,7 @@ import org.breedinginsight.brapi.v2.model.request.query.GermplasmQuery; import org.breedinginsight.brapi.v2.model.response.mappers.GermplasmQueryMapper; import org.breedinginsight.brapi.v2.services.BrAPIGermplasmService; +import org.breedinginsight.brapps.importer.model.base.Germplasm; import org.breedinginsight.brapps.importer.model.exports.FileType; import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.model.DownloadFile; @@ -102,6 +103,22 @@ public HttpResponse>>> getGermplasm( } } + @Get("/${micronaut.bi.api.version/programs/{programId}/germplasm/lists/{listDbId}/records{?queryParams*}") + @Produces(MediaType.APPLICATION_JSON) + @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) + public HttpResponse>>> getGermplasmListRecords( + @PathVariable("programId") UUID programId, + @PathVariable("listDbId") String listId){ + try { + List dummyData = new ArrayList<>(); + dummyData.add(new Germplasm()); + return ResponseUtils.getQueryResponse(dummyData, ); + } catch (ApiException e) { + log.info(e.getMessage(), e); + return HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, "Error retrieving germplasm list records"); + } + } + @Get("/${micronaut.bi.api.version}/programs/{programId}/germplasm/lists/{listDbId}/export{?fileExtension}") @Produces(value = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) From 3b1edfd98ed45374b7438e259bf053b2064e8fd1 Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Tue, 11 Oct 2022 13:19:23 -0400 Subject: [PATCH 2/7] add queryparams to endpoint signature --- .../org/breedinginsight/brapi/v2/GermplasmController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java index 1f9e12abb..bd67e13bd 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java @@ -108,11 +108,13 @@ public HttpResponse>>> getGermplasm( @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) public HttpResponse>>> getGermplasmListRecords( @PathVariable("programId") UUID programId, - @PathVariable("listDbId") String listId){ + @PathVariable("listDbId") String listId) + @QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid GermplasmQuery queryParams) { try { List dummyData = new ArrayList<>(); dummyData.add(new Germplasm()); - return ResponseUtils.getQueryResponse(dummyData, ); + SearchRequest searchRequest = queryParams.constructSearchRequest(); + return ResponseUtils.getQueryResponse(dummyData, germplasmQueryMapper, queryParams, searchRequest ); } catch (ApiException e) { log.info(e.getMessage(), e); return HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, "Error retrieving germplasm list records"); From 887b9ae9b75352354dfdbaca3102218334f15403 Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Tue, 11 Oct 2022 14:11:58 -0400 Subject: [PATCH 3/7] fix list records controller --- .../brapi/v2/GermplasmController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java index bd67e13bd..1365b239d 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java @@ -103,19 +103,19 @@ public HttpResponse>>> getGermplasm( } } - @Get("/${micronaut.bi.api.version/programs/{programId}/germplasm/lists/{listDbId}/records{?queryParams*}") + @Get("/${micronaut.bi.api.version}/programs/{programId}/germplasm/lists/{listDbId}/records{?queryParams*}") @Produces(MediaType.APPLICATION_JSON) @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) public HttpResponse>>> getGermplasmListRecords( @PathVariable("programId") UUID programId, - @PathVariable("listDbId") String listId) + @PathVariable("listDbId") String listId, @QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid GermplasmQuery queryParams) { try { - List dummyData = new ArrayList<>(); - dummyData.add(new Germplasm()); + List dummyData = new ArrayList<>(); + dummyData.add(new BrAPIGermplasm()); SearchRequest searchRequest = queryParams.constructSearchRequest(); - return ResponseUtils.getQueryResponse(dummyData, germplasmQueryMapper, queryParams, searchRequest ); - } catch (ApiException e) { + return ResponseUtils.getBrapiQueryResponse(dummyData, germplasmQueryMapper, queryParams, searchRequest); + } catch (Exception e) { log.info(e.getMessage(), e); return HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, "Error retrieving germplasm list records"); } From 5b4012e66ec2190bca18c35b736475f39fca853e Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Tue, 11 Oct 2022 14:35:26 -0400 Subject: [PATCH 4/7] add germplasm service method to fetch germplasm by list dbid --- .../org/breedinginsight/brapi/v2/GermplasmController.java | 5 ++--- .../brapi/v2/services/BrAPIGermplasmService.java | 8 ++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java index 1365b239d..9d2b0285e 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/GermplasmController.java @@ -111,10 +111,9 @@ public HttpResponse>>> getGermplasmLi @PathVariable("listDbId") String listId, @QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid GermplasmQuery queryParams) { try { - List dummyData = new ArrayList<>(); - dummyData.add(new BrAPIGermplasm()); + List germplasm = germplasmService.getGermplasmByList(programId, listId); SearchRequest searchRequest = queryParams.constructSearchRequest(); - return ResponseUtils.getBrapiQueryResponse(dummyData, germplasmQueryMapper, queryParams, searchRequest); + return ResponseUtils.getBrapiQueryResponse(germplasm, germplasmQueryMapper, queryParams, searchRequest); } catch (Exception e) { log.info(e.getMessage(), e); return HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, "Error retrieving germplasm list records"); diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java index 12a137b07..e4464d9e4 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java @@ -151,6 +151,14 @@ public List> processData(List germplasm){ return processedData; } + public List getGermplasmByList(UUID programId, String listId) throws ApiException { + // get list germplasm names + BrAPIListDetails listData = brAPIListDAO.getListById(listId, programId).getResult(); + List germplasmNames = listData.getData(); + + // get list BrAPI germplasm variables + return germplasmDAO.getGermplasmByRawName(germplasmNames, programId); + } public DownloadFile exportGermplasmList(UUID programId, String listId, FileType fileExtension) throws ApiException, IOException { List columns = GermplasmFileColumns.getOrderedColumns(); From 200cffc702b600ab85c592fb1e0037c22e1c67e3 Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Thu, 20 Oct 2022 11:03:08 -0400 Subject: [PATCH 5/7] add germplasm importEntryNumber as sort and filter fields --- .../brapi/v2/model/request/query/GermplasmQuery.java | 4 ++++ .../brapi/v2/model/response/mappers/GermplasmQueryMapper.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/org/breedinginsight/brapi/v2/model/request/query/GermplasmQuery.java b/src/main/java/org/breedinginsight/brapi/v2/model/request/query/GermplasmQuery.java index 5f7f6cf14..357f4a5c5 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/model/request/query/GermplasmQuery.java +++ b/src/main/java/org/breedinginsight/brapi/v2/model/request/query/GermplasmQuery.java @@ -13,6 +13,7 @@ @Getter @Introspected public class GermplasmQuery extends BrapiQuery { + private String importEntryNumber; private String accessionNumber; private String defaultDisplayName; private String breedingMethod; @@ -26,6 +27,9 @@ public class GermplasmQuery extends BrapiQuery { public SearchRequest constructSearchRequest() { List filters = new ArrayList<>(); + if (!StringUtils.isBlank(getImportEntryNumber())) { + filters.add(constructFilterRequest("importEntryNumber", getImportEntryNumber())); + } if (!StringUtils.isBlank(getAccessionNumber())) { filters.add(constructFilterRequest("accessionNumber", getAccessionNumber())); } diff --git a/src/main/java/org/breedinginsight/brapi/v2/model/response/mappers/GermplasmQueryMapper.java b/src/main/java/org/breedinginsight/brapi/v2/model/response/mappers/GermplasmQueryMapper.java index be6092ef4..d4ec67d0f 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/model/response/mappers/GermplasmQueryMapper.java +++ b/src/main/java/org/breedinginsight/brapi/v2/model/response/mappers/GermplasmQueryMapper.java @@ -24,6 +24,10 @@ public class GermplasmQueryMapper extends AbstractQueryMapper { public GermplasmQueryMapper() { fields = Map.ofEntries( + Map.entry("importEntryNumber", (germplasm) -> + germplasm.getAdditionalInfo() != null && germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.GERMPLASM_IMPORT_ENTRY_NUMBER) ? + germplasm.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_IMPORT_ENTRY_NUMBER).getAsString() : + null), Map.entry("accessionNumber", BrAPIGermplasm::getAccessionNumber), Map.entry("defaultDisplayName", BrAPIGermplasm::getDefaultDisplayName), Map.entry("breedingMethod", (germplasm) -> From a2f8acc338740cd14b2c189381eec917f9356ebf Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Mon, 7 Nov 2022 14:47:10 -0500 Subject: [PATCH 6/7] fix possible null pointer runtime exception --- .../brapi/v2/services/BrAPIGermplasmService.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java index e4464d9e4..378b7a9f6 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java @@ -11,6 +11,7 @@ import org.brapi.v2.model.core.BrAPIListTypes; import org.brapi.v2.model.core.response.BrAPIListDetails; import org.brapi.v2.model.core.response.BrAPIListsListResponse; +import org.brapi.v2.model.core.response.BrAPIListsSingleResponse; import org.brapi.v2.model.germ.BrAPIGermplasm; import org.brapi.v2.model.germ.BrAPIGermplasmSynonyms; import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields; @@ -153,11 +154,14 @@ public List> processData(List germplasm){ public List getGermplasmByList(UUID programId, String listId) throws ApiException { // get list germplasm names - BrAPIListDetails listData = brAPIListDAO.getListById(listId, programId).getResult(); - List germplasmNames = listData.getData(); - - // get list BrAPI germplasm variables - return germplasmDAO.getGermplasmByRawName(germplasmNames, programId); + BrAPIListsSingleResponse listResponse = brAPIListDAO.getListById(listId, programId); + if(Objects.nonNull(listResponse)) { + BrAPIListDetails listData = listResponse.getResult(); + List germplasmNames = listData.getData(); + + // get list BrAPI germplasm variables + return germplasmDAO.getGermplasmByRawName(germplasmNames, programId); + } else throw new ApiException(); } public DownloadFile exportGermplasmList(UUID programId, String listId, FileType fileExtension) throws ApiException, IOException { List columns = GermplasmFileColumns.getOrderedColumns(); From 4ca5a93771128ea39f5774570bbc87ef20e6bc34 Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Tue, 8 Nov 2022 13:22:50 -0500 Subject: [PATCH 7/7] fix nonNull check in GermplasmService --- .../brapi/v2/services/BrAPIGermplasmService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java index 378b7a9f6..c40ddc044 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java @@ -155,9 +155,8 @@ public List> processData(List germplasm){ public List getGermplasmByList(UUID programId, String listId) throws ApiException { // get list germplasm names BrAPIListsSingleResponse listResponse = brAPIListDAO.getListById(listId, programId); - if(Objects.nonNull(listResponse)) { - BrAPIListDetails listData = listResponse.getResult(); - List germplasmNames = listData.getData(); + if(Objects.nonNull(listResponse) && Objects.nonNull(listResponse.getResult())) { + List germplasmNames = listResponse.getResult().getData(); // get list BrAPI germplasm variables return germplasmDAO.getGermplasmByRawName(germplasmNames, programId);