From 5015133a46587cb7357182d1e9ddd290180d8993 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Fri, 12 May 2023 11:18:58 -0400 Subject: [PATCH 1/6] [BI-1716] WIP --- .../brapi/v2/ExperimentController.java | 23 ++++++++++++++++ .../brapi/v2/services/BrAPITrialService.java | 26 +++++++++++++++++++ .../brapps/importer/daos/BrAPITrialDAO.java | 22 ++++++++++++++-- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java index e68202a6b..9245a0563 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.brapi.client.v2.model.exceptions.ApiException; import org.brapi.v2.model.core.BrAPITrial; +import org.brapi.v2.model.germ.BrAPIGermplasm; import org.breedinginsight.api.auth.ProgramSecured; import org.breedinginsight.api.auth.ProgramSecuredRoleGroup; import org.breedinginsight.api.model.v1.request.query.SearchRequest; @@ -24,6 +25,7 @@ import javax.inject.Inject; import javax.validation.Valid; +import java.util.HashMap; import java.util.List; import java.util.UUID; @@ -61,4 +63,25 @@ public HttpResponse>>> getExperiments( return HttpResponse.status(HttpStatus.NOT_FOUND, e.getMessage()); } } + + @Get("/${micronaut.bi.api.version}/programs/{programId}" + BrapiVersion.BRAPI_V2 + "/trials/{trialId}") + @Produces(MediaType.APPLICATION_JSON) + @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) + public HttpResponse>> getExperimentById( + @PathVariable("programId") UUID programId, + @PathVariable("trialId") UUID trialId, + @QueryValue(defaultValue = "false") Boolean stats){ + try { + String logMsg = "fetching trial id:" + trialId +" for program: " + programId; + if(stats){ + logMsg += " with stats"; + } + log.debug(logMsg); + Response> response = new Response(experimentService.getTrialDataByUUID(programId, trialId, stats)); + return HttpResponse.ok(response); + } catch (DoesNotExistException e) { + log.info(e.getMessage(), e); + return HttpResponse.status(HttpStatus.NOT_FOUND, e.getMessage()); + } + } } diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index aa8517e5f..ce8acbb77 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -5,6 +5,7 @@ import org.brapi.client.v2.model.exceptions.ApiException; import lombok.extern.slf4j.Slf4j; import org.brapi.v2.model.core.BrAPITrial; +import org.brapi.v2.model.germ.BrAPIGermplasm; import org.breedinginsight.brapps.importer.daos.BrAPITrialDAO; import org.breedinginsight.services.ProgramService; import org.breedinginsight.services.exceptions.DoesNotExistException; @@ -32,4 +33,29 @@ public BrAPITrialService(ProgramService programService, BrAPITrialDAO trialDAO) public List getExperiments(UUID programId) throws ApiException, DoesNotExistException { return trialDAO.getTrials(programId); } + + public BrAPITrial getTrialByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { + try { + return trialDAO.getTrialByDbId(programId,trialId).get(); + } catch (ApiException e) { + throw new InternalServerException(e.getMessage(), e); + } + } + + public HashMap getTrialDataByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { + HashMap trialData = new HashMap<>(3); + try { + trialData.put("trialData", trialDAO.getTrialByDbId(programId,trialId).get()); + if( stats ){ + int environmentsCount = 1; // For now this is hardcoded to 1, because we are only supporting one environment per experiment + //TODO this should not be hardcoded + int germplasmCount = 6; + trialData.put("environmentsCount", environmentsCount); + trialData.put("germplasmCount", germplasmCount); + } + return trialData; + } catch (ApiException e) { + throw new InternalServerException(e.getMessage(), e); + } + } } diff --git a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java index 742afd2a3..fd0feb4d6 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java +++ b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java @@ -33,6 +33,7 @@ import org.breedinginsight.services.exceptions.DoesNotExistException; import org.breedinginsight.utilities.BrAPIDAOUtil; import org.breedinginsight.utilities.Utilities; +import org.jetbrains.annotations.NotNull; import javax.inject.Inject; import javax.inject.Singleton; @@ -40,6 +41,8 @@ @Singleton public class BrAPITrialDAO { + @Property(name = "brapi.server.reference-source") + private String BRAPI_REFERENCE_SOURCE; private ProgramDAO programDAO; private ImportDAO importDAO; @@ -75,6 +78,19 @@ public List getTrialsByName(List trialNames, Program program ); } + private List getTrialsByExRef(String referenceSource, String referenceId, Program program) throws ApiException { + BrAPITrialSearchRequest trialSearch = new BrAPITrialSearchRequest(); + trialSearch.programDbIds(List.of(program.getBrapiProgram().getProgramDbId())); + trialSearch.externalReferenceSources(List.of(referenceSource)); + trialSearch.externalReferenceIDs(List.of(referenceId)); + TrialsApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(program.getId()), TrialsApi.class); + return brAPIDAOUtil.search( + api::searchTrialsPost, + api::searchTrialsSearchResultsDbIdGet, + trialSearch + ); + } + public List createBrAPITrials(List brAPITrialList, UUID programId, ImportUpload upload) throws ApiException { TrialsApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(programId), TrialsApi.class); return brAPIDAOUtil.post(brAPITrialList, upload, api::trialsPost, importDAO::update); @@ -123,8 +139,10 @@ private List processExperimentsForDisplay(List trials, S return displayExperiments; } - public Optional getTrialByDbId(String trialDbId, Program program) throws ApiException { - List trials = getTrialsByDbIds(List.of(trialDbId), program); + public Optional getTrialByDbId(UUID programId, UUID trialDbId) throws ApiException, DoesNotExistException { + Program program = programService.getById(programId).orElseThrow(() -> new DoesNotExistException("Program id does not exist")); + String refSoure = Utilities.generateReferenceSource(BRAPI_REFERENCE_SOURCE, ExternalReferenceSource.TRIALS); + List trials = getTrialsByExRef(refSoure, trialDbId.toString(), program); return Utilities.getSingleOptional(trials); } From 23ccce65073c74daae9353b7eb8ceb39cdeda964 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Mon, 22 May 2023 16:35:37 -0400 Subject: [PATCH 2/6] [BI-1716] WIP --- .../brapi/v2/ExperimentController.java | 1 - .../brapi/v2/services/BrAPITrialService.java | 21 +++++++++++++--- .../daos/BrAPIObservationUnitDAO.java | 25 ++++++++++++++++--- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java index 9245a0563..4ac0f4939 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java @@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j; import org.brapi.client.v2.model.exceptions.ApiException; import org.brapi.v2.model.core.BrAPITrial; -import org.brapi.v2.model.germ.BrAPIGermplasm; import org.breedinginsight.api.auth.ProgramSecured; import org.breedinginsight.api.auth.ProgramSecuredRoleGroup; import org.breedinginsight.api.model.v1.request.query.SearchRequest; diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index ce8acbb77..9883ca1f8 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -5,7 +5,8 @@ import org.brapi.client.v2.model.exceptions.ApiException; import lombok.extern.slf4j.Slf4j; import org.brapi.v2.model.core.BrAPITrial; -import org.brapi.v2.model.germ.BrAPIGermplasm; +import org.brapi.v2.model.pheno.BrAPIObservationUnit; +import org.breedinginsight.brapps.importer.daos.BrAPIObservationUnitDAO; import org.breedinginsight.brapps.importer.daos.BrAPITrialDAO; import org.breedinginsight.services.ProgramService; import org.breedinginsight.services.exceptions.DoesNotExistException; @@ -22,12 +23,14 @@ public class BrAPITrialService { private String referenceSource; private final BrAPITrialDAO trialDAO; + private final BrAPIObservationUnitDAO ouDAO; private final ProgramService programService; @Inject - public BrAPITrialService(ProgramService programService, BrAPITrialDAO trialDAO) { + public BrAPITrialService(ProgramService programService, BrAPITrialDAO trialDAO,BrAPIObservationUnitDAO ouDAO) { this.programService = programService; this.trialDAO = trialDAO; + this.ouDAO = ouDAO; } public List getExperiments(UUID programId) throws ApiException, DoesNotExistException { @@ -49,7 +52,7 @@ public HashMap getTrialDataByUUID(UUID programId, UUID trialId, if( stats ){ int environmentsCount = 1; // For now this is hardcoded to 1, because we are only supporting one environment per experiment //TODO this should not be hardcoded - int germplasmCount = 6; + long germplasmCount = countGermplasms(programId, trialId); trialData.put("environmentsCount", environmentsCount); trialData.put("germplasmCount", germplasmCount); } @@ -58,4 +61,16 @@ public HashMap getTrialDataByUUID(UUID programId, UUID trialId, throw new InternalServerException(e.getMessage(), e); } } + + private long countGermplasms(UUID programId, UUID trialId) throws ApiException, DoesNotExistException{ +// trialId= UUID.fromString("1bfbf7c3-8394-45ab-9021-21f9affadaeb"); + BrAPITrial brAPItrial = trialDAO.getTrialByDbId(programId,trialId).get(); + List obUnits = ouDAO.getObservationUnitsForTrialDbId(programId, brAPItrial.getTrialDbId()); +log.info(",.,.,,.,.,.trait ID,.,.,.,.,.,,,"); + log.info(brAPItrial.getTrialDbId()); + log.info(".......gems......."); + obUnits.stream().map(ou->ou.getGermplasmDbId()).forEach(s->log.info(s)); + + return obUnits.stream().map(ou->ou.getGermplasmDbId()).distinct().count(); + } } diff --git a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java index 59c2a3041..cffaff112 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java +++ b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java @@ -26,7 +26,9 @@ import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.model.Program; +import org.breedinginsight.services.ProgramService; import org.breedinginsight.services.brapi.BrAPIEndpointProvider; +import org.breedinginsight.services.exceptions.DoesNotExistException; import org.breedinginsight.utilities.BrAPIDAOUtil; import javax.inject.Inject; @@ -43,16 +45,18 @@ public class BrAPIObservationUnitDAO { private ImportDAO importDAO; private final BrAPIDAOUtil brAPIDAOUtil; private final BrAPIEndpointProvider brAPIEndpointProvider; + private ProgramService programService; private final String referenceSource; @Inject - public BrAPIObservationUnitDAO(ProgramDAO programDAO, ImportDAO importDAO, BrAPIDAOUtil brAPIDAOUtil, BrAPIEndpointProvider brAPIEndpointProvider, @Property(name = "brapi.server.reference-source") String referenceSource) { + public BrAPIObservationUnitDAO(ProgramDAO programDAO, ImportDAO importDAO, BrAPIDAOUtil brAPIDAOUtil, BrAPIEndpointProvider brAPIEndpointProvider, ProgramService programService, @Property(name = "brapi.server.reference-source") String referenceSource) { this.programDAO = programDAO; this.importDAO = importDAO; this.brAPIDAOUtil = brAPIDAOUtil; this.brAPIEndpointProvider = brAPIEndpointProvider; this.referenceSource = referenceSource; + this.programService = programService; } /* @@ -115,12 +119,25 @@ public List getObservationUnitsById(Collection obs public List getObservationUnitsForStudyDbId(@NotNull String studyDbId, Program program) throws ApiException { BrAPIObservationUnitSearchRequest observationUnitSearchRequest = new BrAPIObservationUnitSearchRequest(); observationUnitSearchRequest.programDbIds(List.of(program.getBrapiProgram() - .getProgramDbId())); + .getProgramDbId())); observationUnitSearchRequest.studyDbIds(List.of(studyDbId)); ObservationUnitsApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(program.getId()), ObservationUnitsApi.class); return brAPIDAOUtil.search(api::searchObservationunitsPost, - api::searchObservationunitsSearchResultsDbIdGet, - observationUnitSearchRequest); + api::searchObservationunitsSearchResultsDbIdGet, + observationUnitSearchRequest); + } + public List getObservationUnitsForTrialDbId(@NotNull UUID programId, @NotNull String trialDbId) throws ApiException, DoesNotExistException { + Program program = programService.getById(programId).orElseThrow(() -> new DoesNotExistException("Program id does not exist")); + + BrAPIObservationUnitSearchRequest observationUnitSearchRequest = new BrAPIObservationUnitSearchRequest(); + observationUnitSearchRequest.programDbIds(List.of(program.getBrapiProgram() + .getProgramDbId())); + observationUnitSearchRequest.trialDbIds(List.of(trialDbId)); + + ObservationUnitsApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(program.getId()), ObservationUnitsApi.class); + return brAPIDAOUtil.search(api::searchObservationunitsPost, + api::searchObservationunitsSearchResultsDbIdGet, + observationUnitSearchRequest); } } From bfd4bb26263ec68c39a45de3710cba1c749961fc Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Tue, 23 May 2023 10:56:08 -0400 Subject: [PATCH 3/6] [BI-1716] clean up code (remove debug statements) --- .../brapi/v2/services/BrAPITrialService.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index 9883ca1f8..0359cac38 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -48,11 +48,11 @@ public BrAPITrial getTrialByUUID(UUID programId, UUID trialId, boolean stats) th public HashMap getTrialDataByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { HashMap trialData = new HashMap<>(3); try { - trialData.put("trialData", trialDAO.getTrialByDbId(programId,trialId).get()); + BrAPITrial trial = trialDAO.getTrialByDbId(programId,trialId).get(); + trialData.put("trialData", trial); if( stats ){ int environmentsCount = 1; // For now this is hardcoded to 1, because we are only supporting one environment per experiment - //TODO this should not be hardcoded - long germplasmCount = countGermplasms(programId, trialId); + long germplasmCount = countGermplasms(programId, trial.getTrialDbId()); trialData.put("environmentsCount", environmentsCount); trialData.put("germplasmCount", germplasmCount); } @@ -62,15 +62,8 @@ public HashMap getTrialDataByUUID(UUID programId, UUID trialId, } } - private long countGermplasms(UUID programId, UUID trialId) throws ApiException, DoesNotExistException{ -// trialId= UUID.fromString("1bfbf7c3-8394-45ab-9021-21f9affadaeb"); - BrAPITrial brAPItrial = trialDAO.getTrialByDbId(programId,trialId).get(); - List obUnits = ouDAO.getObservationUnitsForTrialDbId(programId, brAPItrial.getTrialDbId()); -log.info(",.,.,,.,.,.trait ID,.,.,.,.,.,,,"); - log.info(brAPItrial.getTrialDbId()); - log.info(".......gems......."); - obUnits.stream().map(ou->ou.getGermplasmDbId()).forEach(s->log.info(s)); - + private long countGermplasms(UUID programId, String trialDbId) throws ApiException, DoesNotExistException{ + List obUnits = ouDAO.getObservationUnitsForTrialDbId(programId, trialDbId); return obUnits.stream().map(ou->ou.getGermplasmDbId()).distinct().count(); } } From f83d116b22a7b8c2231812686bfce7cc5a00b5b1 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Tue, 23 May 2023 11:18:10 -0400 Subject: [PATCH 4/6] [BI-1716] Clean code (reomove unused imports and variables, etc...) --- .../brapi/v2/ExperimentController.java | 2 +- .../brapi/v2/services/BrAPITrialService.java | 25 ++++------------- .../daos/BrAPIObservationUnitDAO.java | 28 ++----------------- .../brapps/importer/daos/BrAPITrialDAO.java | 10 ++----- 4 files changed, 12 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java index 4ac0f4939..bdc312318 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java @@ -76,7 +76,7 @@ public HttpResponse>> getExperimentById( logMsg += " with stats"; } log.debug(logMsg); - Response> response = new Response(experimentService.getTrialDataByUUID(programId, trialId, stats)); + Response> response = new Response<>(experimentService.getTrialDataByUUID(programId, trialId, stats)); return HttpResponse.ok(response); } catch (DoesNotExistException e) { log.info(e.getMessage(), e); diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index 0359cac38..653ae8442 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -1,6 +1,5 @@ package org.breedinginsight.brapi.v2.services; -import io.micronaut.context.annotation.Property; import io.micronaut.http.server.exceptions.InternalServerException; import org.brapi.client.v2.model.exceptions.ApiException; import lombok.extern.slf4j.Slf4j; @@ -8,7 +7,6 @@ import org.brapi.v2.model.pheno.BrAPIObservationUnit; import org.breedinginsight.brapps.importer.daos.BrAPIObservationUnitDAO; import org.breedinginsight.brapps.importer.daos.BrAPITrialDAO; -import org.breedinginsight.services.ProgramService; import org.breedinginsight.services.exceptions.DoesNotExistException; import javax.inject.Inject; @@ -19,16 +17,11 @@ @Singleton public class BrAPITrialService { - @Property(name = "brapi.server.reference-source") - private String referenceSource; - private final BrAPITrialDAO trialDAO; private final BrAPIObservationUnitDAO ouDAO; - private final ProgramService programService; @Inject - public BrAPITrialService(ProgramService programService, BrAPITrialDAO trialDAO,BrAPIObservationUnitDAO ouDAO) { - this.programService = programService; + public BrAPITrialService( BrAPITrialDAO trialDAO,BrAPIObservationUnitDAO ouDAO) { this.trialDAO = trialDAO; this.ouDAO = ouDAO; } @@ -37,22 +30,14 @@ public List getExperiments(UUID programId) throws ApiException, Does return trialDAO.getTrials(programId); } - public BrAPITrial getTrialByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { - try { - return trialDAO.getTrialByDbId(programId,trialId).get(); - } catch (ApiException e) { - throw new InternalServerException(e.getMessage(), e); - } - } - public HashMap getTrialDataByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { HashMap trialData = new HashMap<>(3); try { - BrAPITrial trial = trialDAO.getTrialByDbId(programId,trialId).get(); + BrAPITrial trial = trialDAO.getTrialByDbId(programId,trialId).orElseThrow(() -> new DoesNotExistException("Trial does not exist")); trialData.put("trialData", trial); if( stats ){ int environmentsCount = 1; // For now this is hardcoded to 1, because we are only supporting one environment per experiment - long germplasmCount = countGermplasms(programId, trial.getTrialDbId()); + long germplasmCount = countGermplasm(programId, trial.getTrialDbId()); trialData.put("environmentsCount", environmentsCount); trialData.put("germplasmCount", germplasmCount); } @@ -62,8 +47,8 @@ public HashMap getTrialDataByUUID(UUID programId, UUID trialId, } } - private long countGermplasms(UUID programId, String trialDbId) throws ApiException, DoesNotExistException{ + private long countGermplasm(UUID programId, String trialDbId) throws ApiException, DoesNotExistException{ List obUnits = ouDAO.getObservationUnitsForTrialDbId(programId, trialDbId); - return obUnits.stream().map(ou->ou.getGermplasmDbId()).distinct().count(); + return obUnits.stream().map(BrAPIObservationUnit::getGermplasmDbId).distinct().count(); } } diff --git a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java index cffaff112..6401c031e 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java +++ b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPIObservationUnitDAO.java @@ -38,14 +38,11 @@ @Singleton public class BrAPIObservationUnitDAO { - - public static String OU_ID_REFERENCE_SOURCE = "ou_id"; - - private ProgramDAO programDAO; - private ImportDAO importDAO; + private final ProgramDAO programDAO; + private final ImportDAO importDAO; private final BrAPIDAOUtil brAPIDAOUtil; private final BrAPIEndpointProvider brAPIEndpointProvider; - private ProgramService programService; + private final ProgramService programService; private final String referenceSource; @@ -59,25 +56,6 @@ public BrAPIObservationUnitDAO(ProgramDAO programDAO, ImportDAO importDAO, BrAPI this.programService = programService; } - /* - public List getObservationUnitsByNameAndStudyName(List> nameStudyPairs, BrAPIProgram brAPIProgram) throws ApiException { - - List observationUnitNames = nameStudyPairs.stream().map(Pair::getLeft).collect(Collectors.toList()); - BrAPIObservationUnitSearchRequest observationUnitSearchRequest = new BrAPIObservationUnitSearchRequest(); - observationUnitSearchRequest.setObservationUnitNames(new ArrayList<>(observationUnitNames)); - observationUnitSearchRequest.setProgramDbIds(List.of(brAPIProgram.getProgramDbId())); - ObservationUnitsApi api = brAPIProvider.getObservationUnitApi(BrAPIClientType.CORE); - List observationUnits = BrAPIDAOUtil.search( - api::searchObservationunitsPost, - api::searchObservationunitsSearchResultsDbIdGet, - observationUnitSearchRequest - ); - - // TODO: Select for study as well - return observationUnits; - } - */ - public List getObservationUnitByName(List observationUnitNames, Program program) throws ApiException { if(observationUnitNames.isEmpty()) { return Collections.emptyList(); diff --git a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java index fd0feb4d6..248a654ea 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java +++ b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java @@ -21,9 +21,6 @@ import org.brapi.client.v2.modules.core.TrialsApi; import org.brapi.v2.model.core.BrAPITrial; import org.brapi.v2.model.core.request.BrAPITrialSearchRequest; -import org.brapi.v2.model.core.response.BrAPIListDetails; -import org.brapi.v2.model.core.response.BrAPIListResponse; -import org.brapi.v2.model.core.response.BrAPITrialSingleResponse; import org.breedinginsight.brapps.importer.model.ImportUpload; import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; import org.breedinginsight.daos.ProgramDAO; @@ -33,7 +30,6 @@ import org.breedinginsight.services.exceptions.DoesNotExistException; import org.breedinginsight.utilities.BrAPIDAOUtil; import org.breedinginsight.utilities.Utilities; -import org.jetbrains.annotations.NotNull; import javax.inject.Inject; import javax.inject.Singleton; @@ -44,10 +40,10 @@ public class BrAPITrialDAO { @Property(name = "brapi.server.reference-source") private String BRAPI_REFERENCE_SOURCE; - private ProgramDAO programDAO; - private ImportDAO importDAO; + private final ProgramDAO programDAO; + private final ImportDAO importDAO; private final BrAPIDAOUtil brAPIDAOUtil; - private ProgramService programService; + private final ProgramService programService; private final BrAPIEndpointProvider brAPIEndpointProvider; private final String referenceSource; From ddcb5b73c83e818e4bb7c618f4a03f04ed9157e7 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Tue, 23 May 2023 12:52:23 -0400 Subject: [PATCH 5/6] remove the program-key from the trial name before returning the trait --- .../brapi/v2/services/BrAPITrialService.java | 3 +++ .../java/org/breedinginsight/utilities/Utilities.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index 653ae8442..973f6f07d 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -8,6 +8,7 @@ import org.breedinginsight.brapps.importer.daos.BrAPIObservationUnitDAO; import org.breedinginsight.brapps.importer.daos.BrAPITrialDAO; import org.breedinginsight.services.exceptions.DoesNotExistException; +import org.breedinginsight.utilities.Utilities; import javax.inject.Inject; import javax.inject.Singleton; @@ -34,6 +35,8 @@ public HashMap getTrialDataByUUID(UUID programId, UUID trialId, HashMap trialData = new HashMap<>(3); try { BrAPITrial trial = trialDAO.getTrialByDbId(programId,trialId).orElseThrow(() -> new DoesNotExistException("Trial does not exist")); + //Remove the [program key] from the trial name + trial.setTrialName( Utilities.removeUnknownProgramKey( trial.getTrialName()) ); trialData.put("trialData", trial); if( stats ){ int environmentsCount = 1; // For now this is hardcoded to 1, because we are only supporting one environment per experiment diff --git a/src/main/java/org/breedinginsight/utilities/Utilities.java b/src/main/java/org/breedinginsight/utilities/Utilities.java index 59a4be0e9..52e85ad2d 100644 --- a/src/main/java/org/breedinginsight/utilities/Utilities.java +++ b/src/main/java/org/breedinginsight/utilities/Utilities.java @@ -71,6 +71,17 @@ public static String appendProgramKey( String original, String programKey ){ return appendProgramKey( original, programKey, null); } + /** + * Remove unknown program key from a string. Returns a new value instead of altering original string. + * + * @param original - The string with a [program key] + * @return - the original string without the [program key] + */ + public static String removeUnknownProgramKey(String original) { + return original.replaceAll("\\[.*\\]", "").trim(); + } + + /** * Remove program key from a string. Returns a new value instead of altering original string. * From 244cbc911a265d1017713bffed3c799cc5e6111d Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Wed, 24 May 2023 15:02:00 -0400 Subject: [PATCH 6/6] [BI-1716] impliment Tim's PR change request --- .../brapi/v2/ExperimentController.java | 4 ++-- .../brapi/v2/services/BrAPITrialService.java | 12 +++++------- .../brapps/importer/daos/BrAPITrialDAO.java | 6 +++++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java index bdc312318..787f9edc4 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/ExperimentController.java @@ -66,7 +66,7 @@ public HttpResponse>>> getExperiments( @Get("/${micronaut.bi.api.version}/programs/{programId}" + BrapiVersion.BRAPI_V2 + "/trials/{trialId}") @Produces(MediaType.APPLICATION_JSON) @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) - public HttpResponse>> getExperimentById( + public HttpResponse> getExperimentById( @PathVariable("programId") UUID programId, @PathVariable("trialId") UUID trialId, @QueryValue(defaultValue = "false") Boolean stats){ @@ -76,7 +76,7 @@ public HttpResponse>> getExperimentById( logMsg += " with stats"; } log.debug(logMsg); - Response> response = new Response<>(experimentService.getTrialDataByUUID(programId, trialId, stats)); + Response response = new Response<>(experimentService.getTrialDataByUUID(programId, trialId, stats)); return HttpResponse.ok(response); } catch (DoesNotExistException e) { log.info(e.getMessage(), e); diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index 973f6f07d..7bee585a3 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -31,20 +31,18 @@ public List getExperiments(UUID programId) throws ApiException, Does return trialDAO.getTrials(programId); } - public HashMap getTrialDataByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { - HashMap trialData = new HashMap<>(3); + public BrAPITrial getTrialDataByUUID(UUID programId, UUID trialId, boolean stats) throws DoesNotExistException { try { - BrAPITrial trial = trialDAO.getTrialByDbId(programId,trialId).orElseThrow(() -> new DoesNotExistException("Trial does not exist")); + BrAPITrial trial = trialDAO.getTrialById(programId,trialId).orElseThrow(() -> new DoesNotExistException("Trial does not exist")); //Remove the [program key] from the trial name trial.setTrialName( Utilities.removeUnknownProgramKey( trial.getTrialName()) ); - trialData.put("trialData", trial); if( stats ){ int environmentsCount = 1; // For now this is hardcoded to 1, because we are only supporting one environment per experiment long germplasmCount = countGermplasm(programId, trial.getTrialDbId()); - trialData.put("environmentsCount", environmentsCount); - trialData.put("germplasmCount", germplasmCount); + trial.putAdditionalInfoItem("environmentsCount", environmentsCount); + trial.putAdditionalInfoItem("germplasmCount", germplasmCount); } - return trialData; + return trial; } catch (ApiException e) { throw new InternalServerException(e.getMessage(), e); } diff --git a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java index 248a654ea..ab9de443c 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java +++ b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPITrialDAO.java @@ -135,7 +135,7 @@ private List processExperimentsForDisplay(List trials, S return displayExperiments; } - public Optional getTrialByDbId(UUID programId, UUID trialDbId) throws ApiException, DoesNotExistException { + public Optional getTrialById(UUID programId, UUID trialDbId) throws ApiException, DoesNotExistException { Program program = programService.getById(programId).orElseThrow(() -> new DoesNotExistException("Program id does not exist")); String refSoure = Utilities.generateReferenceSource(BRAPI_REFERENCE_SOURCE, ExternalReferenceSource.TRIALS); List trials = getTrialsByExRef(refSoure, trialDbId.toString(), program); @@ -143,6 +143,10 @@ public Optional getTrialByDbId(UUID programId, UUID trialDbId) throw return Utilities.getSingleOptional(trials); } + public Optional getTrialByDbId(String trialDbId, Program program) throws ApiException { + List trials = getTrialsByDbIds(List.of(trialDbId), program); + return Utilities.getSingleOptional(trials); + } public List getTrialsByDbIds(Collection trialDbIds, Program program) throws ApiException { if(trialDbIds.isEmpty()) { return Collections.emptyList();