From e0e99173078724674212d8f54bd357cf9a35be3f Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Mon, 8 Aug 2022 09:23:18 -0400 Subject: [PATCH] [BI-1189] show thee year string (not the season dbId) for the Env Year of existing studies --- .../brapps/importer/daos/BrAPISeasonDAO.java | 9 ++++++ .../processors/ExperimentProcessor.java | 32 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPISeasonDAO.java b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPISeasonDAO.java index 235c752fb..539a5d58f 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPISeasonDAO.java +++ b/src/main/java/org/breedinginsight/brapps/importer/daos/BrAPISeasonDAO.java @@ -17,6 +17,7 @@ import org.brapi.v2.model.core.response.BrAPIListsSingleResponse; import org.brapi.v2.model.core.response.BrAPISeasonListResponse; import org.brapi.v2.model.core.response.BrAPISeasonListResponseResult; +import org.brapi.v2.model.core.response.BrAPISeasonSingleResponse; import org.brapi.v2.model.pheno.BrAPIObservation; import org.breedinginsight.brapps.importer.model.ImportUpload; import org.breedinginsight.daos.ProgramDAO; @@ -56,6 +57,14 @@ public List getSeasonByYear(String year, UUID programId) throws Api return seasons; } + public BrAPISeason getSeasonById(String id, UUID programId) throws ApiException { + SeasonsApi api = new SeasonsApi(programDAO.getCoreClient(programId)); + ApiResponse apiResponse = api.seasonsSeasonDbIdGet(id); + BrAPISeasonSingleResponse seasonListResponse = apiResponse.getBody(); + BrAPISeason season = seasonListResponse.getResult(); + return season; + } + public BrAPISeason addOneSeason(BrAPISeason season, UUID programId) throws ApiException { BrAPISeason resultSeason = null; SeasonsApi api = new SeasonsApi(programDAO.getCoreClient(programId)); diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java index 9a09573e8..8f52a0a13 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java @@ -75,6 +75,8 @@ public class ExperimentProcessor implements Processor { // used to make the yearsToSeasonDbId() function more efficient private Map yearToSeasonDbIdCache = new HashMap<>(); + // used to make the seasonDbIdtoYear() function more efficient + private Map seasonDbIdToYearCache = new HashMap<>(); //These BrapiData-objects are initially populated by the getExistingBrapiData() method, // then updated by the getNewBrapiData() method. @@ -608,6 +610,9 @@ private Map> initialize_studyByNameNoSco try { existingStudies = brAPIStudyDAO.getStudiesByExperimentID(UUID.fromString(experimentIDStr), program); existingStudies.forEach(existingStudy -> { + //Swap season DbId with year String + String seasonId = existingStudy.getSeasons().get(0); + existingStudy.setSeasons( List.of( this.seasonDbIdToYear( seasonId, program.getId() ) ) ); existingStudy.setStudyName(Utilities.removeProgramKeyAndUnknownAdditionalData(existingStudy.getStudyName(), program.getKey())); studyByNameNoScope.put( @@ -684,7 +689,7 @@ private String simpleStudyName(String scopedName){ private String yearsToSeasonDbId(List years, UUID programId) { String year = years.get(0); String dbID = null; - if (this.yearToSeasonDbIdCache.containsKey(year) ){ // get it from cache if possable + if (this.yearToSeasonDbIdCache.containsKey(year) ){ // get it from cache if possible dbID = this.yearToSeasonDbIdCache.get(year); } else{ @@ -694,6 +699,18 @@ private String yearsToSeasonDbId(List years, UUID programId) { return dbID; } + private String seasonDbIdToYear(String seasonDbId, UUID programId) { + String year = null; + if (this.seasonDbIdToYearCache.containsKey(seasonDbId) ){ // get it from cache if possible + year = this.seasonDbIdToYearCache.get(seasonDbId); + } + else{ + year = this.seasonDbIdToYearFromDatabase(seasonDbId,programId); + this.seasonDbIdToYearCache.put(seasonDbId, year); + } + return year; + } + private String yearToSeasonDbIdFromDatabase(String year, UUID programId) { BrAPISeason targetSeason = null; List seasons; @@ -720,6 +737,19 @@ private String yearToSeasonDbIdFromDatabase(String year, UUID programId) { return seasonDbId; } + private String seasonDbIdToYearFromDatabase(String seasonDbId, UUID programId) { + BrAPISeason targetSeason = null; + BrAPISeason season = null; + try { + season = this.brAPISeasonDAO.getSeasonById (seasonDbId, programId); + } catch (ApiException e) { + log.error(e.getResponseBody(), e);; + } + Integer yearInt = (season == null) ? null : season.getYear();; + String yearStr = (yearInt==null) ? "" : yearInt.toString(); + return yearStr; + } + private boolean isTrialRefSource(BrAPIExternalReference brAPIExternalReference) { return brAPIExternalReference.getReferenceSource().equals( String.format("%s/%s", BRAPI_REFERENCE_SOURCE, ExternalReferenceSource.TRIALS.getName()) ); }