diff --git a/src/main/java/org/breedinginsight/brapi/v2/BrAPIGermplasmController.java b/src/main/java/org/breedinginsight/brapi/v2/BrAPIGermplasmController.java index 850ed8138..f234c3030 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/BrAPIGermplasmController.java +++ b/src/main/java/org/breedinginsight/brapi/v2/BrAPIGermplasmController.java @@ -1,6 +1,5 @@ package org.breedinginsight.brapi.v2; -import com.drew.lang.annotations.Nullable; import io.micronaut.context.annotation.Property; import io.micronaut.http.HttpHeaders; import io.micronaut.http.HttpResponse; @@ -108,15 +107,8 @@ public HttpResponse searchGermplasm( return HttpResponse.notFound(); } - // Can't use BrAPI server programDbId filtering, think germplasm are linked to program through observation - // units and doesn't work if don't have any loaded, use external refs instead for now - // Just use DeltaBreed program UUID - String extRefId = program.get().getId().toString(); - body.externalReferenceIds(List.of(extRefId)); - - // convert request filter dbIds from DeltaBreed UUID to BrAPI service dbIds - List convertedDbIds = germplasmService.getGermplasmDbIdsForUUIDs(program.get().getId(), body.getGermplasmDbIds()); - body.setGermplasmDbIds(convertedDbIds); + String brapiProgramDbId = programService.getBrAPIProgramDbId(program.get().getId()); + body.setProgramDbIds(List.of(brapiProgramDbId)); ApiResponse, Optional>> brapiGermplasm; brapiGermplasm = brAPIEndpointProvider @@ -177,10 +169,6 @@ private void batchProcessGermplasm(List germplasmList, String pr // Prepare a regex pattern for program key removal Pattern programKeyPattern = Utilities.getRegexPatternMatchAllProgramKeysAnyAccession(programKey); germplasmList.parallelStream().forEach(germplasm -> { - // Set dbId - germplasm.germplasmDbId(Utilities.getExternalReference(germplasm.getExternalReferences(), "breedinginsight.org") - .orElseThrow(() -> new IllegalStateException("No BI external reference found")) - .getReferenceId()); // Process synonyms if (germplasm.getSynonyms() != null) { germplasm.getSynonyms().forEach(synonym -> { @@ -320,8 +308,7 @@ public HttpResponse getGermplasmPedigreeInfo( metadata.setPagination(pagination); response = new BrAPIGermplasmPedigreeResponse(); } else { - BrAPIGermplasm germplasm = germplasmService.getGermplasmByDBID(programId, germplasmId) - .orElseThrow(() -> new DoesNotExistException("DBID for this germplasm does not exist")); + BrAPIGermplasm germplasm = germplasmService.getGermplasmByUUID(programId, germplasmId); //Forward the pedigree call to the backing BrAPI system of the program passing the germplasmDbId that came in the request GermplasmApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(programId), GermplasmApi.class); diff --git a/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIGermplasmDAO.java b/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIGermplasmDAO.java index 478c99bcf..ca896441e 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIGermplasmDAO.java +++ b/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIGermplasmDAO.java @@ -23,15 +23,21 @@ import io.micronaut.http.server.exceptions.InternalServerException; import io.micronaut.scheduling.annotation.Scheduled; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Pair; import org.brapi.client.v2.ApiResponse; import org.brapi.client.v2.model.exceptions.ApiException; +import org.brapi.client.v2.model.queryParams.germplasm.GermplasmQueryParams; import org.brapi.client.v2.modules.germplasm.GermplasmApi; +import org.brapi.v2.model.BrAPIAcceptedSearchResponse; import org.brapi.v2.model.BrAPIExternalReference; +import org.brapi.v2.model.core.BrAPIProgram; import org.brapi.v2.model.germ.BrAPIGermplasm; import org.brapi.v2.model.germ.BrAPIGermplasmSynonyms; import org.brapi.v2.model.germ.request.BrAPIGermplasmSearchRequest; +import org.brapi.v2.model.germ.response.BrAPIGermplasmListResponse; import org.brapi.v2.model.germ.response.BrAPIGermplasmSingleResponse; import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields; +import org.breedinginsight.brapi.v2.model.request.query.GermplasmQuery; import org.breedinginsight.brapps.importer.daos.ImportDAO; import org.breedinginsight.brapps.importer.model.ImportUpload; import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; @@ -72,13 +78,21 @@ public class BrAPIGermplasmDAO { private final BrAPIEndpointProvider brAPIEndpointProvider; + private final int brapiMaxPageSize; + @Inject - public BrAPIGermplasmDAO(ProgramDAO programDAO, ImportDAO importDAO, BrAPIDAOUtil brAPIDAOUtil, ProgramCacheProvider programCacheProvider, BrAPIEndpointProvider brAPIEndpointProvider) { + public BrAPIGermplasmDAO(ProgramDAO programDAO, + ImportDAO importDAO, + BrAPIDAOUtil brAPIDAOUtil, + ProgramCacheProvider programCacheProvider, + BrAPIEndpointProvider brAPIEndpointProvider, + @Property(name = "brapi.cache.fetch-page-size") int brapiFetchPageSize) { this.programDAO = programDAO; this.importDAO = importDAO; this.brAPIDAOUtil = brAPIDAOUtil; this.programGermplasmCache = programCacheProvider.getProgramCache(this::fetchProgramGermplasm, BrAPIGermplasm.class); this.brAPIEndpointProvider = brAPIEndpointProvider; + this.brapiMaxPageSize = brapiFetchPageSize; } @Scheduled(initialDelay = "${startup.delay.germplasm}") @@ -101,7 +115,29 @@ public void setup() { * @throws ApiException */ public List getGermplasm(UUID programId) throws ApiException { - return new ArrayList<>(programGermplasmCache.get(programId).values()); + Program program = programDAO.get(programId) + .stream() + .findFirst() + .orElseThrow(); + + if (program.getId() == null) { + throw new InternalServerException("BI-API Program or Program ID is null"); + } + + String brapiProgramDbId = Optional.of(program) + .map(Program::getBrapiProgram) + .map(BrAPIProgram::getProgramDbId) + .orElse(null); + + if (brapiProgramDbId == null) { + brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); + } + + GermplasmQueryParams germplasmQueryParams = GermplasmQueryParams.builder() + .programDbId(brapiProgramDbId) + .build(); + + return getBrAPIGermplasmUsingBrAPIProgramId(germplasmQueryParams, program); } /** @@ -111,9 +147,10 @@ public List getGermplasm(UUID programId) throws ApiException { * @throws ApiException */ public List getRawGermplasm(UUID programId) throws ApiException { + // TODO: This method is used for checking if germplasm already exist in the system. Once a generalized BrAPI exists check is made, we should update this method [BI-2938] Program program = new Program(programDAO.fetchOneById(programId)); - List cacheList = new ArrayList<>(programGermplasmCache.get(programId).values()); - return cacheList.stream().map(germplasm -> { + List programGermplasm = getGermplasm(programId); + return programGermplasm.stream().map(germplasm -> { germplasm.setGermplasmName(Utilities.appendProgramKey(germplasm.getDefaultDisplayName(), program.getKey(), germplasm.getAccessionNumber())); if(germplasm.getAdditionalInfo() != null && germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.GERMPLASM_RAW_PEDIGREE) && !(germplasm.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_RAW_PEDIGREE).isJsonNull())) { @@ -281,6 +318,27 @@ private Map processGermplasmForDisplay(List getBrAPIGermplasmUsingBrAPIProgramId(GermplasmQueryParams germplasmQueryParams, Program program) throws ApiException { + if (germplasmQueryParams.page() == null) { + germplasmQueryParams.setPage(0); + } + + if (germplasmQueryParams.pageSize() == null) { + germplasmQueryParams.setPageSize(brapiMaxPageSize); + } + + GermplasmApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(program.getId()), GermplasmApi.class); + + List result = brAPIDAOUtil.get(api::germplasmGet, germplasmQueryParams); + + // TODO: Once cache is removed for this class, fix processGermplasmForDisplay to return List [BI-2906] + return new ArrayList<>(processGermplasmForDisplay(result, program.getKey()).values()); + } + // TODO: hack for now, probably should update breedbase // Made a JIRA card BI-1883 for this // Breedbase will return NA/NA for no pedigree or NA/father, mother/NA @@ -341,6 +399,7 @@ public List updateBrAPIGermplasm(List putBrAPIGe } public List getGermplasmByRawName(List germplasmNames, UUID programId) throws ApiException { + // TODO: Optimize this method by utilizing a BrAPIGermplasmSearchRequest [BI-3028] Program program = new Program(programDAO.fetchOneById(programId)); return getGermplasm(programId) .stream() @@ -348,52 +407,67 @@ public List getGermplasmByRawName(List germplasmNames, U .collect(Collectors.toList()); } - public BrAPIGermplasm getGermplasmByUUID(String germplasmId, UUID programId) throws ApiException, DoesNotExistException { - Map cache = programGermplasmCache.get(programId); - BrAPIGermplasm germplasm = null; - if (cache != null) { - germplasm = cache.get(germplasmId); - } - if (germplasm == null) { - throw new DoesNotExistException("UUID for this germplasm does not exist"); - } - return germplasm; + public List brapiGermplasmSearchReturnList(Program program, + List brapiGermplasmIds) throws ApiException { + return brapiGermplasmSearchReturnResponse(program, brapiGermplasmIds, null).getResult().getData(); } - public List getGermplasmDbIdsForUUIDs(List germplasmUUIDs, UUID programId) throws ApiException, DoesNotExistException { - Map cache = programGermplasmCache.get(programId); - List germplasmList = new ArrayList<>(); - if (cache != null) { - // not using streams because want to throw checked exception - for (String germplasmUUID : germplasmUUIDs) { - BrAPIGermplasm germplasm = cache.get(germplasmUUID); - if (germplasm == null) { - throw new DoesNotExistException("UUID for this germplasm does not exist: " + germplasmUUID); - } - germplasmList.add(germplasm.getGermplasmDbId()); - } + public BrAPIGermplasmListResponse brapiGermplasmSearchReturnResponse(Program program, + List brapiGermplasmIds, + GermplasmQuery germplasmQuery) throws ApiException { + + GermplasmApi api = brAPIEndpointProvider.get(programDAO.getCoreClient(program.getId()), GermplasmApi.class); + + BrAPIGermplasmSearchRequest brAPIGermplasmSearchRequest = buildSearchRequest(program, brapiGermplasmIds, germplasmQuery); + + BrAPIGermplasmListResponse brAPIResponse = + brAPIDAOUtil.simpleSearch( + api::searchGermplasmPost, + brAPIGermplasmSearchRequest + ); + + // TODO: Once cache is removed for this class, fix processGermplasmForDisplay to return List [BI-2906] + List processedGermplasm = + new ArrayList<>(processGermplasmForDisplay(brAPIDAOUtil.getListResult(brAPIResponse), program.getKey()).values()); + + brAPIResponse.getResult().setData(processedGermplasm); + + return brAPIResponse; + } + + private BrAPIGermplasmSearchRequest buildSearchRequest(Program program, List brapiGermplasmIds, GermplasmQuery germplasmQuery) throws ApiException { + BrAPIGermplasmSearchRequest searchRequest = new BrAPIGermplasmSearchRequest(); + + searchRequest.programDbIds(List.of(brAPIDAOUtil.getBrAPIProgramDbId(program.getId()))); + + if (brapiGermplasmIds != null && !brapiGermplasmIds.isEmpty()) { + searchRequest.setGermplasmDbIds(new ArrayList<>(brapiGermplasmIds)); } - return germplasmList; + + brAPIDAOUtil.setGenericSearchParameters(searchRequest, germplasmQuery); + + return searchRequest; } - public Optional getGermplasmByDBID(String germplasmDbId, UUID programId) throws ApiException { - Map cache = programGermplasmCache.get(programId); - //key is UUID, want to filter by DBID - BrAPIGermplasm germplasm = null; - if (cache != null) { - germplasm = cache.values().stream().filter(x -> x.getGermplasmDbId().equals(germplasmDbId)).collect(Collectors.toList()).get(0); + public BrAPIGermplasm getGermplasmByUUID(String germplasmId, UUID programId) throws ApiException, DoesNotExistException { + Program program = new Program(programDAO.fetchOneById(programId)); + + List result = brapiGermplasmSearchReturnList(program, List.of(germplasmId)); + + if (result.size() > 1) { + throw new ApiException(String.format("Multiple germplasms found for germplasm with ID: [%s]", germplasmId)); + } else if (result.isEmpty()) { + throw new DoesNotExistException(String.format("Germplasm with ID: [%s] does not exist", germplasmId)); } - return Optional.ofNullable(germplasm); + + return result.get(0); } public List getGermplasmsByDBID(Collection germplasmDbIds, UUID programId) throws ApiException { - Map cache = programGermplasmCache.get(programId); - //key is UUID, want to filter by DBID - List germplasm = new ArrayList<>(); - if (cache != null) { - germplasm = cache.values().stream().filter(x -> germplasmDbIds.contains(x.getGermplasmDbId())).collect(Collectors.toList()); - } - return germplasm; + // TODO: This method is mainly used by the download experiment export tool. This method will fail until we address the parameter limit for async Germplasm requests for germplasmDbIds > 4. Return to this use case during [BI-3021] + Program program = new Program(programDAO.fetchOneById(programId)); + + return brapiGermplasmSearchReturnList(program, new ArrayList<>(germplasmDbIds)); } public List putGermplasm(List germplasmList, GermplasmApi api) throws ApiException { 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 7e4a01e67..c68801a8b 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIGermplasmService.java @@ -4,7 +4,10 @@ import io.micronaut.context.annotation.Property; import io.micronaut.http.server.exceptions.InternalServerException; import io.micronaut.http.server.types.files.StreamedFile; +import org.apache.commons.lang3.tuple.Pair; +import org.brapi.client.v2.ApiResponse; import org.brapi.client.v2.model.exceptions.ApiException; +import org.brapi.v2.model.BrAPIAcceptedSearchResponse; import org.brapi.v2.model.BrAPIExternalReference; import lombok.extern.slf4j.Slf4j; import org.brapi.v2.model.core.request.BrAPIListNewRequest; @@ -12,6 +15,8 @@ import org.brapi.v2.model.core.response.BrAPIListsSingleResponse; import org.brapi.v2.model.germ.BrAPIGermplasm; import org.brapi.v2.model.germ.BrAPIGermplasmSynonyms; +import org.brapi.v2.model.germ.request.BrAPIGermplasmSearchRequest; +import org.brapi.v2.model.germ.response.BrAPIGermplasmListResponse; import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields; import org.breedinginsight.brapi.v2.dao.BrAPIListDAO; import org.breedinginsight.brapps.importer.model.exports.FileType; @@ -70,18 +75,6 @@ public BrAPIGermplasm getGermplasmByUUID(UUID programId, String germplasmId) thr } } - public List getGermplasmDbIdsForUUIDs(UUID programId, List germplasmUUIDs) throws DoesNotExistException { - try { - return germplasmDAO.getGermplasmDbIdsForUUIDs(germplasmUUIDs, programId); - } catch (ApiException e) { - throw new InternalServerException(e.getMessage(), e); - } - } - - public Optional getGermplasmByDBID(UUID programId, String germplasmId) throws ApiException { - return germplasmDAO.getGermplasmByDBID(germplasmId, programId); - } - public List> processListData(List germplasm, List listData, Program program){ Map germplasmByName = new HashMap<>(); for (BrAPIGermplasm g: germplasm) { diff --git a/src/main/java/org/breedinginsight/brapps/importer/model/base/Germplasm.java b/src/main/java/org/breedinginsight/brapps/importer/model/base/Germplasm.java index e3691d5be..ca87fae6f 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/model/base/Germplasm.java +++ b/src/main/java/org/breedinginsight/brapps/importer/model/base/Germplasm.java @@ -365,12 +365,20 @@ private void setBrAPIGermplasmCommitFields(BrAPIGermplasm germplasm, String prog } } - public BrAPIGermplasm constructBrAPIGermplasm(Program program, ProgramBreedingMethodEntity breedingMethod, User user, boolean commit, String referenceSource, Supplier nextVal, UUID listId) { + public BrAPIGermplasm constructBrAPIGermplasm(Program program, + ProgramBreedingMethodEntity breedingMethod, + User user, + boolean commit, + String referenceSource, + Supplier nextVal, + UUID listId, + String brapiProgramDbId) { BrAPIGermplasm germplasm = constructBrAPIGermplasm(breedingMethod, user, listId); if (commit) { setBrAPIGermplasmCommitFields(germplasm, program.getKey(), referenceSource, nextVal); } germplasm.setCommonCropName(program.getBrapiProgram().getCommonCropName()); + germplasm.setProgramDbId(brapiProgramDbId); // Set program id in external references BrAPIExternalReference newReference = new BrAPIExternalReference(); diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/germplasm/GermplasmProcessor.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/germplasm/GermplasmProcessor.java index 899924f4b..e0eaf3c53 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/germplasm/GermplasmProcessor.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/germplasm/GermplasmProcessor.java @@ -43,8 +43,10 @@ import org.breedinginsight.brapps.importer.model.response.ImportPreviewStatistics; import org.breedinginsight.brapps.importer.model.response.PendingImportObject; import org.breedinginsight.brapps.importer.services.processors.Processor; +import org.breedinginsight.dao.db.tables.daos.ProgramDao; import org.breedinginsight.dao.db.tables.pojos.ProgramBreedingMethodEntity; import org.breedinginsight.daos.BreedingMethodDAO; +import org.breedinginsight.daos.impl.ProgramDAOImpl; import org.breedinginsight.model.Program; import org.breedinginsight.model.User; import org.breedinginsight.services.exceptions.ValidatorException; @@ -64,6 +66,7 @@ public class GermplasmProcessor implements Processor { private static final String NAME = "Germplasm"; + private final ProgramDAOImpl programDAOImpl; @Property(name = "brapi.server.reference-source") private String BRAPI_REFERENCE_SOURCE; @@ -109,13 +112,14 @@ public class GermplasmProcessor implements Processor { }; @Inject - public GermplasmProcessor(BrAPIGermplasmService brAPIGermplasmService, DSLContext dsl, BreedingMethodDAO breedingMethodDAO, BrAPIListDAO brAPIListDAO, BrAPIGermplasmDAO brAPIGermplasmDAO) { + public GermplasmProcessor(BrAPIGermplasmService brAPIGermplasmService, DSLContext dsl, BreedingMethodDAO breedingMethodDAO, BrAPIListDAO brAPIListDAO, BrAPIGermplasmDAO brAPIGermplasmDAO, ProgramDAOImpl programDAOImpl) { this.brAPIGermplasmService = brAPIGermplasmService; this.dsl = dsl; this.breedingMethodDAO = breedingMethodDAO; this.brAPIGermplasmDAO = brAPIGermplasmDAO; this.brAPIListDAO = brAPIListDAO; this.brAPIGermplasmService = brAPIGermplasmService; + this.programDAOImpl = programDAOImpl; } public void getExistingBrapiData(List importRows, Program program) throws ApiException { @@ -289,6 +293,8 @@ public Map process(ImportUpload upload, List
userProvidedEntryNumbers = new ArrayList<>(); ValidationErrors validationErrors = new ValidationErrors(); + String brapiProgramDbId = programDAOImpl.getProgramBrAPI(program).getProgramDbId(); + for (int i = 0; i < importRows.size(); i++) { log.debug("processing germplasm row: {}", i + 1); BrAPIImport brapiImport = importRows.get(i); @@ -315,7 +321,7 @@ public Map process(ImportUpload upload, List
process(ImportUpload upload, List
breedingMethods, List badBreedingMethods, - Program program, UUID importListId, boolean commit, PendingImport mappedImportRow, int i, User user, Supplier nextVal) { + Program program, UUID importListId, boolean commit, PendingImport mappedImportRow, int i, User user, Supplier nextVal, + String brapiProgramDbId) { germplasm = removeBreedingMethodBlanks(germplasm); //Validating if Breeding Method exists for valid parent entries validateGermplasmBreedingMethod(germplasm, i + 2, validationErrors); @@ -361,7 +368,7 @@ private void processNewGermplasm(Germplasm germplasm, ValidationErrors validatio numNewPedigreeConnections++; } - BrAPIGermplasm newGermplasm = germplasm.constructBrAPIGermplasm(program, breedingMethod, user, commit, BRAPI_REFERENCE_SOURCE, nextVal, importListId); + BrAPIGermplasm newGermplasm = germplasm.constructBrAPIGermplasm(program, breedingMethod, user, commit, BRAPI_REFERENCE_SOURCE, nextVal, importListId, brapiProgramDbId); newGermplasmList.add(newGermplasm); // Assign status of the germplasm diff --git a/src/main/java/org/breedinginsight/services/ProgramService.java b/src/main/java/org/breedinginsight/services/ProgramService.java index d7b35801b..aea07a9fa 100644 --- a/src/main/java/org/breedinginsight/services/ProgramService.java +++ b/src/main/java/org/breedinginsight/services/ProgramService.java @@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.brapi.client.v2.model.exceptions.ApiException; import org.brapi.v2.model.core.BrAPIProgram; import org.breedinginsight.api.auth.AuthenticatedUser; import org.breedinginsight.api.auth.SecurityService; @@ -316,5 +317,21 @@ public ArrayList getKeyValidationErrors(String key) { return keyErrors; } + public String getBrAPIProgramDbId(UUID biProgramId) throws ApiException { + Optional programOpt = getById(biProgramId); + + if (programOpt.isEmpty()) { + throw new ApiException("Program does not exist"); + } + + Program program = programOpt.get(); + + if (program.getBrapiProgram() == null) { + throw new ApiException("Program does not exist in BrAPI"); + } + + return program.getBrapiProgram().getProgramDbId(); + } + } diff --git a/src/main/java/org/breedinginsight/utilities/BrAPIDAOUtil.java b/src/main/java/org/breedinginsight/utilities/BrAPIDAOUtil.java index 0209d0afb..07d012b06 100644 --- a/src/main/java/org/breedinginsight/utilities/BrAPIDAOUtil.java +++ b/src/main/java/org/breedinginsight/utilities/BrAPIDAOUtil.java @@ -626,4 +626,8 @@ public void brapiSearchRequest.setPageSize(biSearchQuery.getPageSize()); } } + + public String getBrAPIProgramDbId(UUID biProgramId) throws ApiException { + return programService.getBrAPIProgramDbId(biProgramId); + } } diff --git a/src/test/java/org/breedinginsight/api/v1/controller/BreedingMethodControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/BreedingMethodControllerIntegrationTest.java index c3ba499c4..cb379596e 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/BreedingMethodControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/BreedingMethodControllerIntegrationTest.java @@ -355,6 +355,7 @@ public void deleteProgramMethod() { @Test public void createGermplasmWithProgramMethod() throws ApiException { Program program = createProgram("createGermProgBM", "CGBM", "CGERBM"); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); ProgramBreedingMethodEntity method = ProgramBreedingMethodEntity.builder() .programId(program.getId()) @@ -401,6 +402,8 @@ public void createGermplasmWithProgramMethod() throws ApiException { .externalReferences(List.of(programRef, germIdRef)) .accessionNumber(accessionNum); + germplasm.setProgramDbId(brapiProgramDbId); + assertDoesNotThrow(() -> germplasmService.createBrAPIGermplasm(List.of(germplasm), program.getId(), null)); String germplasmUrl = String.format("/programs/%s/brapi/v2/germplasm", program.getId()); @@ -427,6 +430,7 @@ public void createGermplasmWithProgramMethod() throws ApiException { @Test public void tryDeleteProgramMethodInUse() throws ApiException { Program program = createProgram("tryDeleteProgramBM", "TDBM", "TRYDBM"); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); ProgramBreedingMethodEntity method = ProgramBreedingMethodEntity.builder() .programId(program.getId()) @@ -472,6 +476,7 @@ public void tryDeleteProgramMethodInUse() throws ApiException { .putAdditionalInfoItem(BrAPIAdditionalInfoFields.CREATED_DATE, formatter.format(now)) .externalReferences(List.of(programRef, germIdRef)) .accessionNumber(accessionNum); + germplasm.setProgramDbId(brapiProgramDbId); assertDoesNotThrow(() -> germplasmService.createBrAPIGermplasm(List.of(germplasm), program.getId(), null)); diff --git a/src/test/java/org/breedinginsight/api/v1/controller/ExperimentControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/ExperimentControllerIntegrationTest.java index d95270d27..c09bf9a97 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/ExperimentControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/ExperimentControllerIntegrationTest.java @@ -24,7 +24,6 @@ import org.breedinginsight.api.model.v1.request.ProgramRequest; import org.breedinginsight.api.model.v1.request.SpeciesRequest; import org.breedinginsight.brapi.v2.dao.BrAPIGermplasmDAO; -import org.breedinginsight.brapi.v2.model.request.query.ExperimentQuery; import org.breedinginsight.brapi.v2.services.BrAPITrialService; import org.breedinginsight.brapps.importer.ImportTestUtils; import org.breedinginsight.brapps.importer.model.exports.FileType; @@ -34,6 +33,7 @@ import org.breedinginsight.dao.db.tables.pojos.ProgramUserRoleEntity; import org.breedinginsight.dao.db.tables.pojos.RoleEntity; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.ProgramUserDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; @@ -107,6 +107,8 @@ public class ExperimentControllerIntegrationTest extends BrAPITest { private final Gson gson = new GsonBuilder().registerTypeAdapter(OffsetDateTime.class, (JsonDeserializer) (json, type, context) -> OffsetDateTime.parse(json.getAsString())) .create(); + @Inject + private ProgramDAO programDAO; @BeforeAll void setup() throws Exception { @@ -166,8 +168,10 @@ void setup() throws Exception { throw e; } + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); + // Add germplasm to program - List germplasm = createGermplasm(1); + List germplasm = createGermplasm(1, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceID(program.getId().toString()); @@ -1043,7 +1047,9 @@ private Program createSeededProgram(String prefix) throws Exception { AuthenticatedUser user = new AuthenticatedUser(testUser.getName(), new ArrayList<>(), testUser.getId(), new ArrayList<>()); ontologyService.createTraits(seededProgram.getId(), createTraits(2), user, false); - List germplasm = createGermplasm(1); + String brapiProgramDbId = programDAO.getProgramBrAPI(seededProgram).getProgramDbId(); + + List germplasm = createGermplasm(1, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceID(seededProgram.getId().toString()); @@ -1109,7 +1115,7 @@ private List createTraits(int numToCreate) { return traits; } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -1128,6 +1134,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java index 79c8095cb..3517b5832 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java @@ -43,6 +43,7 @@ import org.breedinginsight.brapps.importer.model.imports.sample.SampleSubmissionImport.Columns; import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.*; @@ -91,6 +92,8 @@ public class SampleSubmissionControllerIntegrationTest extends BrAPITest { private String newExperimentWorkflowId; private final Gson gson = new BrAPIClient().getJSON().getGson(); + @Inject + private ProgramDAO programDao; @BeforeAll void setup() throws Exception { @@ -126,7 +129,9 @@ void setup() throws Exception { dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId()); dsl.execute(securityFp.get("InsertSystemRoleAdmin"), testUser.getId().toString()); - List germplasm = createGermplasm(96); + String brapiProgramDbId = programDao.getProgramBrAPI(program).getProgramDbId(); + + List germplasm = createGermplasm(96, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceID(program.getId().toString()); @@ -461,7 +466,7 @@ public File writeSubmissionToFile(List> data) throws IOExcep return file; } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -480,6 +485,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java index 4f15c553d..f74caa597 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java @@ -41,6 +41,7 @@ import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.*; @@ -87,6 +88,8 @@ public class BrAPIObservationLevelsControllerIntegrationTest extends BrAPITest { private OntologyService ontologyService; @Inject private BrAPIGermplasmDAO germplasmDAO; + @Inject + private ProgramDAO programDAO; @Inject @Client("/${micronaut.bi.api.version}") @@ -127,6 +130,7 @@ void setup() throws Exception { .key("TEST") .build(); program = TestUtils.insertAndFetchTestProgram(gson, client, programRequest); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId()); dsl.execute(securityFp.get("InsertSystemRoleAdmin"), testUser.getId().toString()); @@ -154,7 +158,7 @@ void setup() throws Exception { } // Add germplasm to program - List germplasm = createGermplasm(1); + List germplasm = createGermplasm(1, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceID(program.getId().toString()); @@ -255,7 +259,7 @@ private String getEnvId(JsonObject result, int index) { .get("referenceId").getAsString(); } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -274,6 +278,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java index de876c626..0076fda95 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java @@ -48,6 +48,7 @@ import org.breedinginsight.brapps.importer.services.processors.experiment.service.TrialService; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.*; @@ -96,6 +97,8 @@ public class BrAPIObservationUnitControllerIntegrationTest extends BrAPITest { private BrAPIGermplasmDAO germplasmDAO; @Inject private BrAPITrialDAO brapiTrialDAO; + @Inject + private ProgramDAO programDAO; @Inject @Client("/${micronaut.bi.api.version}") @@ -136,6 +139,7 @@ void setup() throws Exception { .key("TEST") .build(); program = TestUtils.insertAndFetchTestProgram(gson, client, programRequest); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId()); dsl.execute(securityFp.get("InsertSystemRoleAdmin"), testUser.getId().toString()); @@ -163,7 +167,7 @@ void setup() throws Exception { } // Add germplasm to program - List germplasm = createGermplasm(1); + List germplasm = createGermplasm(1, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceID(program.getId().toString()); @@ -388,7 +392,7 @@ private String getEnvId(JsonObject result, int index) { .get("referenceId").getAsString(); } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -407,6 +411,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java index 59cd33630..8159e2bba 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java @@ -44,6 +44,7 @@ import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.*; @@ -92,6 +93,8 @@ public class BrAPIObservationsControllerIntegrationTest extends BrAPITest { private OntologyService ontologyService; @Inject private BrAPIGermplasmDAO germplasmDAO; + @Inject + private ProgramDAO programDAO; @Inject @Client("/${micronaut.bi.api.version}") @@ -132,6 +135,7 @@ void setup() throws Exception { .key("TEST") .build(); program = TestUtils.insertAndFetchTestProgram(gson, client, programRequest); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId()); dsl.execute(securityFp.get("InsertSystemRoleAdmin"), testUser.getId().toString()); @@ -159,7 +163,7 @@ void setup() throws Exception { } // Add germplasm to program - List germplasm = createGermplasm(1); + List germplasm = createGermplasm(1, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceID(program.getId().toString()); @@ -434,7 +438,7 @@ private String getEnvId(JsonObject result, int index) { .get("referenceId").getAsString(); } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -453,6 +457,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPITestUtils.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPITestUtils.java index 6af62c7cf..756d66db3 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPITestUtils.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPITestUtils.java @@ -38,12 +38,12 @@ import org.breedinginsight.api.model.v1.request.SpeciesRequest; import org.breedinginsight.api.v1.controller.TestTokenValidator; import org.breedinginsight.brapi.v2.dao.BrAPIGermplasmDAO; -import org.breedinginsight.brapi.v2.model.request.query.ExperimentQuery; import org.breedinginsight.brapi.v2.services.BrAPITrialService; import org.breedinginsight.brapps.importer.ImportTestUtils; import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.*; @@ -81,6 +81,8 @@ public class BrAPITestUtils { private BrAPIGermplasmDAO germplasmDAO; @Inject private BrAPITrialService brAPITrialService; + @Inject + ProgramDAO programDAO; @Inject @Client("/${micronaut.bi.api.version}") @@ -122,6 +124,7 @@ public Tuple2> setupTestProgram(DSLContext brAPIDslContext .key("TEST") .build(); Program program = TestUtils.insertAndFetchTestProgram(gson, client, programRequest); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); // Add Program Administrator user. dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId()); @@ -153,7 +156,7 @@ public Tuple2> setupTestProgram(DSLContext brAPIDslContext } // Add germplasm to program - List germplasm = createGermplasm(1, BRAPI_REFERENCE_SOURCE); + List germplasm = createGermplasm(1, BRAPI_REFERENCE_SOURCE, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceId(program.getId().toString()); @@ -249,7 +252,7 @@ public String getEnvId(JsonObject result, int index) { .get("referenceId").getAsString(); } - public List createGermplasm(int numToCreate, String referenceSource) { + public List createGermplasm(int numToCreate, String referenceSource, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -268,6 +271,7 @@ public List createGermplasm(int numToCreate, String referenceSou testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java index f8a99ac35..50227f0e0 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java @@ -47,6 +47,7 @@ import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.*; @@ -93,6 +94,8 @@ public class BrAPIV2ObservationVariableControllerIntegrationTest extends BrAPITe private BrAPIGermplasmDAO germplasmDAO; @Inject BrAPITrialService brAPITrialService; + @Inject + ProgramDAO programDAO; @Inject @Client("/${micronaut.bi.api.version}") @@ -134,6 +137,7 @@ void setup() throws Exception { .key("TEST") .build(); program = TestUtils.insertAndFetchTestProgram(gson, client, programRequest); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId()); dsl.execute(securityFp.get("InsertSystemRoleAdmin"), testUser.getId().toString()); @@ -161,7 +165,7 @@ void setup() throws Exception { } // Add germplasm to program - List germplasm = createGermplasm(1); + List germplasm = createGermplasm(1, brapiProgramDbId); BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", BRAPI_REFERENCE_SOURCE)); newReference.setReferenceId(program.getId().toString()); @@ -359,7 +363,7 @@ private String getEnvId(JsonObject result, int index) { .get("referenceId").getAsString(); } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -378,6 +382,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceId(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapps/importer/ExperimentFileImportTest.java b/src/test/java/org/breedinginsight/brapps/importer/ExperimentFileImportTest.java index c8028150e..30240f5fb 100644 --- a/src/test/java/org/breedinginsight/brapps/importer/ExperimentFileImportTest.java +++ b/src/test/java/org/breedinginsight/brapps/importer/ExperimentFileImportTest.java @@ -204,7 +204,7 @@ public void appendExperimentWithObsVarFromPriorDataset() { // Create a plot-level dataset that includes observation variable tt_test_1 List traits = importTestUtils.createTraits(1); - Program program = createProgram("Append Exp with Prior Observations Vars", "EXPPRI", "EXPPRI", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Append Exp with Prior Observations Vars", "EXPPRI", "EXPPRI", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -310,7 +310,7 @@ public void appendExperimentMultipleDatasets() { // Create a plot-level dataset List traits = importTestUtils.createTraits(1); - Program program = createProgram("Append Exp with Multiple Datasets", "MULSET", "MULSET", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Append Exp with Multiple Datasets", "MULSET", "MULSET", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -441,7 +441,7 @@ public void appendExperimentMultipleDatasets() { @SneakyThrows public void importNewExpNewLocNoObsSuccess() { log.debug("importNewExpNewLocNoObsSuccess"); - Program program = createProgram("New Exp and Loc", "NEXPL", "NEXPL", BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("New Exp and Loc", "NEXPL", "NEXPL", BRAPI_REFERENCE_SOURCE, 1, null); Map validRow = new HashMap<>(); validRow.put(Columns.GERMPLASM_GID, "1"); validRow.put(Columns.TEST_CHECK, "T"); @@ -476,7 +476,7 @@ public void importNewExpNewLocNoObsSuccess() { @SneakyThrows public void importNewExpMultiNewEnvSuccess() { log.debug("importNewExpMultiNewEnvSucces"); - Program program = createProgram("New Exp and Multi New Env", "MULENV", "MULENV", BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("New Exp and Multi New Env", "MULENV", "MULENV", BRAPI_REFERENCE_SOURCE, 1, null); Map firstEnv = new HashMap<>(); firstEnv.put(Columns.GERMPLASM_GID, "1"); firstEnv.put(Columns.TEST_CHECK, "T"); @@ -536,7 +536,7 @@ public void importNewExpMultiNewEnvSuccess() { @SneakyThrows public void importExistingExpAndEnvErrorMessage() { log.debug("importExistingExpAndEnvErrorMessage"); - Program program = createProgram("New Env Existing Exp", "DUPENV", "DUPENV", BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("New Env Existing Exp", "DUPENV", "DUPENV", BRAPI_REFERENCE_SOURCE, 1, null); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -579,7 +579,7 @@ public void importExistingExpAndEnvErrorMessage() { @SneakyThrows public void importNewEnvNoObsSuccess() { log.debug("importNewEnvNoObsSuccess"); - Program program = createProgram("New Env", "NEWENV", "NEWENV", BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("New Env", "NEWENV", "NEWENV", BRAPI_REFERENCE_SOURCE, 1, null); Map newEnv = new HashMap<>(); newEnv.put(Columns.GERMPLASM_GID, "1"); @@ -614,7 +614,7 @@ public void importNewEnvNoObsSuccess() { @SneakyThrows public void verifyMissingDataThrowsError(boolean commit) { log.debug("verifyMissingDataThrowsError"); - Program program = createProgram("Missing Req Cols "+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("Missing Req Cols "+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, null); Map base = new HashMap<>(); base.put(Columns.GERMPLASM_GID, "1"); @@ -685,7 +685,7 @@ public void verifyMissingDataThrowsError(boolean commit) { public void importNewExpWithObsVar() { log.debug("importNewExpWithObsVar"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("New Exp with Observations Vars", "EXPVRR", "EXPVRR", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New Exp with Observations Vars", "EXPVRR", "EXPVRR", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -723,7 +723,7 @@ public void importNewExpWithObsVar() { @SneakyThrows public void verifyDiffYearSameEnvThrowsError(boolean commit) { log.debug("verifyDiffYEarSameEnvThrowsError"); - Program program = createProgram("Diff Years "+(commit ? "C" : "P"), "YEARS"+(commit ? "C" : "P"), "YEARS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(2), null); + Program program = createProgram("Diff Years "+(commit ? "C" : "P"), "YEARS"+(commit ? "C" : "P"), "YEARS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 2, null); List> rows = new ArrayList<>(); Map row = new HashMap<>(); @@ -763,7 +763,7 @@ public void verifyDiffYearSameEnvThrowsError(boolean commit) { @SneakyThrows public void verifyDiffLocSameEnvThrowsError(boolean commit) { log.debug("verifyDiffLocSameEnvThrowsError"); - Program program = createProgram("Diff Locations "+(commit ? "C" : "P"), "LOCS"+(commit ? "C" : "P"), "LOCS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(2), null); + Program program = createProgram("Diff Locations "+(commit ? "C" : "P"), "LOCS"+(commit ? "C" : "P"), "LOCS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 2, null); List> rows = new ArrayList<>(); Map row = new HashMap<>(); @@ -803,7 +803,7 @@ public void verifyDiffLocSameEnvThrowsError(boolean commit) { public void importNewExpWithObs(boolean commit) { log.debug("importNewExpWithObs"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("New Exp with Observations "+(commit ? "C" : "P"), "NEXOB"+(commit ? "C" : "P"), "NEXOB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New Exp with Observations "+(commit ? "C" : "P"), "NEXOB"+(commit ? "C" : "P"), "NEXOB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -844,7 +844,7 @@ public void importNewExpWithObs(boolean commit) { public void verifyFailureImportNewExpWithInvalidObs(boolean commit) { log.debug("verifyFailureImportNewExpWithInvalidObs"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("Invalid Observations "+(commit ? "C" : "P"), "INVOB"+(commit ? "C" : "P"), "INVOB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Invalid Observations "+(commit ? "C" : "P"), "INVOB"+(commit ? "C" : "P"), "INVOB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -870,7 +870,7 @@ public void verifyFailureImportNewExpWithInvalidObs(boolean commit) { @SneakyThrows public void verifyFailureNewOuExistingEnv(boolean commit) { log.debug("verifyFailureNewOuExistingEnv"); - Program program = createProgram("New OU Existing Env "+(commit ? "C" : "P"), "FLOU"+(commit ? "C" : "P"), "FLOU"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("New OU Existing Env "+(commit ? "C" : "P"), "FLOU"+(commit ? "C" : "P"), "FLOU"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, null); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -904,7 +904,7 @@ public void verifyFailureNewOuExistingEnv(boolean commit) { public void importNewObsVarExistingOu() { log.debug("importNewObsVarExistingOu"); List traits = importTestUtils.createTraits(2); - Program program = createProgram("New ObsVar Existing OU", "OUVAR", "OUVAR", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New ObsVar Existing OU", "OUVAR", "OUVAR", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -968,7 +968,7 @@ public void importNewObsVarExistingOu() { public void importNewObsVarByObsUnitId() { log.debug("importNewObsVarByObsUnitId"); List traits = importTestUtils.createTraits(2); - Program program = createProgram("New ObsVar Referring to OU by ID", "OUVAR", "VAROU", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New ObsVar Referring to OU by ID", "OUVAR", "VAROU", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1020,7 +1020,7 @@ public void importNewObsVarByObsUnitId() { public void importNewObservationDataByObsUnitId(boolean commit) { log.debug("importNewObservationDataByObsUnitId"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("New Observation Referring to OU by ID"+(commit ? "C" : "P"), "OUDAT"+(commit ? "C" : "P"), "DATOU"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New Observation Referring to OU by ID"+(commit ? "C" : "P"), "OUDAT"+(commit ? "C" : "P"), "DATOU"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1094,7 +1094,7 @@ public void importNewObservationDataByObsUnitId(boolean commit) { @SneakyThrows public void verifyBlankObsInOverwriteIsNoOp(boolean commit) { List traits = importTestUtils.createTraits(1); - Program program = createProgram("Overwrite Attempt With Blank Obs"+(commit ? "C" : "P"), "NOOP"+(commit ? "C" : "P"), "NOOP"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Overwrite Attempt With Blank Obs"+(commit ? "C" : "P"), "NOOP"+(commit ? "C" : "P"), "NOOP"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1163,7 +1163,7 @@ public void verifyBlankObsInOverwriteIsNoOp(boolean commit) { public void importNewObsExistingOu(boolean commit) { log.debug("importNewObsExistingOu"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("New Obs Existing OU "+(commit ? "C" : "P"), "OUOBS"+(commit ? "C" : "P"), "OUOBS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New Obs Existing OU "+(commit ? "C" : "P"), "OUOBS"+(commit ? "C" : "P"), "OUOBS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1228,7 +1228,7 @@ public void importNewObsExistingOu(boolean commit) { public void verifyFailureImportNewObsExistingOuWithExistingObs(boolean commit) { log.debug("verifyFailureImportNewObsExistingOuWithExistingObs"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("New Obs Existing Obs "+(commit ? "C" : "P"), "FEXOB"+(commit ? "C" : "P"), "FEXOB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New Obs Existing Obs "+(commit ? "C" : "P"), "FEXOB"+(commit ? "C" : "P"), "FEXOB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1285,7 +1285,7 @@ public void verifyFailureImportNewObsExistingOuWithExistingObs(boolean commit) { public void importSecondExpAfterFirstExpWithObs() { log.debug("importSecondExpAfterFirstExpWithObs"); List traits = importTestUtils.createTraits(1); - Program program = createProgram("New Exp After First", "NEAF", "NEAF", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("New Exp After First", "NEAF", "NEAF", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExpA = new HashMap<>(); newExpA.put(Columns.GERMPLASM_GID, "1"); newExpA.put(Columns.TEST_CHECK, "T"); @@ -1355,7 +1355,7 @@ public void importSecondExpAfterFirstExpWithObs() { public void importNewObsAfterFirstExpWithObs(boolean commit) { log.debug("importNewObsAfterFirstExpWithObs"); List traits = importTestUtils.createTraits(2); - Program program = createProgram("Exp with additional Uploads "+(commit ? "C" : "P"), "EXAU"+(commit ? "C" : "P"), "EXAU"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Exp with additional Uploads "+(commit ? "C" : "P"), "EXAU"+(commit ? "C" : "P"), "EXAU"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1427,7 +1427,7 @@ public void importNewObsAfterFirstExpWithObs(boolean commit) { public void importNewObsAfterFirstExpWithObsAndTimestamps() { log.debug("importNewObsAfterFirstExpWithObsAndTimestamps"); List traits = importTestUtils.createTraits(2); - Program program = createProgram("Exp with TS and additional Uploads ", "EXTSAU", "EXTSAU", BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Exp with TS and additional Uploads ", "EXTSAU", "EXTSAU", BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1502,7 +1502,7 @@ public void importNewObsAfterFirstExpWithObsAndTimestamps() { public void importNewObsAfterFirstExpWithObs_blank(boolean commit) { log.debug("importNewObsAfterFirstExpWithObs_blank"); List traits = importTestUtils.createTraits(3); - Program program = createProgram("Exp with additional Uploads (blank) "+(commit ? "C" : "P"), "EXAUB"+(commit ? "C" : "P"), "EXAUB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(1), traits); + Program program = createProgram("Exp with additional Uploads (blank) "+(commit ? "C" : "P"), "EXAUB"+(commit ? "C" : "P"), "EXAUB"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 1, traits); Map newExp = new HashMap<>(); newExp.put(Columns.GERMPLASM_GID, "1"); newExp.put(Columns.TEST_CHECK, "T"); @@ -1859,7 +1859,7 @@ private String yearToSeasonDbId(String year, UUID programId) throws ApiException return null; } - private Program createProgram(String name, String abbv, String key, String referenceSource, List germplasm, List traits) throws ApiException, DoesNotExistException, ValidatorException, BadRequestException { + private Program createProgram(String name, String abbv, String key, String referenceSource, int numGermplasmToCreate, List traits) throws ApiException, DoesNotExistException, ValidatorException, BadRequestException { SpeciesEntity validSpecies = speciesDAO.findAll().get(0); SpeciesRequest speciesRequest = SpeciesRequest.builder() .commonName(validSpecies.getCommonName()) @@ -1879,10 +1879,14 @@ private Program createProgram(String name, String abbv, String key, String refer // Get main program Program program = programService.getByKey(key).get(); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId().toString()); - if(germplasm != null && !germplasm.isEmpty()) { + if(numGermplasmToCreate > 0) { + + List germplasm = createGermplasm(numGermplasmToCreate, brapiProgramDbId); + BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", referenceSource)); newReference.setReferenceID(program.getId().toString()); @@ -1905,7 +1909,7 @@ private Program createProgram(String name, String abbv, String key, String refer return program; } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -1924,6 +1928,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/brapps/importer/GermplasmFileImportTest.java b/src/test/java/org/breedinginsight/brapps/importer/GermplasmFileImportTest.java index cbcea3e0c..2673b0353 100644 --- a/src/test/java/org/breedinginsight/brapps/importer/GermplasmFileImportTest.java +++ b/src/test/java/org/breedinginsight/brapps/importer/GermplasmFileImportTest.java @@ -27,6 +27,7 @@ import org.breedinginsight.dao.db.tables.pojos.BiUserEntity; import org.breedinginsight.dao.db.tables.pojos.ProgramBreedingMethodEntity; import org.breedinginsight.daos.BreedingMethodDAO; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.Program; import org.breedinginsight.services.SpeciesService; @@ -75,6 +76,8 @@ public class GermplasmFileImportTest extends BrAPITest { private DSLContext dsl; @Inject private BrAPIGermplasmDAO germplasmDAO; + @Inject + private ProgramDAO programDAO; private ImportTestUtils importTestUtils; @@ -1217,11 +1220,13 @@ private String getPreviewState(JsonObject result, int index) { } private void seedExistingGermplasm(String accessionNumber, String displayName, String source, String breedingMethodCode) { + String brapiProgramDbId = programDAO.getProgramBrAPI(validProgram).getProgramDbId(); BrAPIGermplasm germplasm = new BrAPIGermplasm(); germplasm.setAccessionNumber(accessionNumber); germplasm.setDefaultDisplayName(displayName); germplasm.setGermplasmName(String.format("%s [%s-%s]", displayName, validProgram.getKey(), accessionNumber)); germplasm.setSeedSource(source); + germplasm.setProgramDbId(brapiProgramDbId); JsonObject additionalInfo = new JsonObject(); additionalInfo.addProperty(BrAPIAdditionalInfoFields.GERMPLASM_IMPORT_ENTRY_NUMBER, accessionNumber); diff --git a/src/test/java/org/breedinginsight/brapps/importer/SampleSubmissionFileImportTest.java b/src/test/java/org/breedinginsight/brapps/importer/SampleSubmissionFileImportTest.java index 0f9feafb9..7217b5542 100644 --- a/src/test/java/org/breedinginsight/brapps/importer/SampleSubmissionFileImportTest.java +++ b/src/test/java/org/breedinginsight/brapps/importer/SampleSubmissionFileImportTest.java @@ -51,6 +51,7 @@ import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; import org.breedinginsight.dao.db.tables.pojos.BiUserEntity; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; +import org.breedinginsight.daos.ProgramDAO; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; import org.breedinginsight.model.Column; @@ -146,6 +147,9 @@ public class SampleSubmissionFileImportTest extends BrAPITest { @Inject BrAPITrialService brAPITrialService; + @Inject + private ProgramDAO programDAO; + private Gson gson = new GsonBuilder().registerTypeAdapter(OffsetDateTime.class, (JsonDeserializer) (json, type, context) -> OffsetDateTime.parse(json.getAsString())) .registerTypeAdapter(BrAPIPagination.class, new PaginationTypeAdapter()) @@ -177,7 +181,7 @@ public void setup() { @SneakyThrows public void importGIDSuccess() { log.debug("importGIDSuccess"); - Program program = createProgram("Import GID Success", "GIDS", "GIDS", BRAPI_REFERENCE_SOURCE, createGermplasm(96), null); + Program program = createProgram("Import GID Success", "GIDS", "GIDS", BRAPI_REFERENCE_SOURCE, 96, null); List> validFile = new ArrayList<>(); int germGidCounter = 1; @@ -224,7 +228,7 @@ public void importGIDSuccess() { @SneakyThrows public void importObsUnitIdSuccess() { log.debug("importObsUnitIdSuccess"); - Program program = createProgram("Import ObsUnitID success", "OBSID", "OBSID", BRAPI_REFERENCE_SOURCE, createGermplasm(1), null); + Program program = createProgram("Import ObsUnitID success", "OBSID", "OBSID", BRAPI_REFERENCE_SOURCE, 1, null); var experimentId = createExperiment(program); @@ -298,7 +302,7 @@ public void importMissingGIDAndObsUnitIdFailure(boolean commit) { @SneakyThrows public void verifyMissingDataThrowsError(boolean commit) { log.debug("verifyMissingDataThrowsError"); - Program program = createProgram("Missing Req Cols "+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(96), null); + Program program = createProgram("Missing Req Cols "+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), "MISS"+(commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 96, null); Map base = new HashMap<>(); base.put(Columns.PLATE_ID, "valid_1"); base.put(Columns.ROW, "A"); @@ -371,7 +375,7 @@ public void importInvalidObsUnitIdFailure(boolean commit) { @SneakyThrows public void importConflictingWellsFailure(boolean commit) { log.debug("importConflictingWellsFailure"); - Program program = createProgram("Conflicting Wells " + (commit ? "C" : "P"), "WELL"+ (commit ? "C" : "P"), "WELL"+ (commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, createGermplasm(2), null); + Program program = createProgram("Conflicting Wells " + (commit ? "C" : "P"), "WELL"+ (commit ? "C" : "P"), "WELL"+ (commit ? "C" : "P"), BRAPI_REFERENCE_SOURCE, 2, null); List> validFile = new ArrayList<>(); Map validRow = new HashMap<>(); @@ -438,7 +442,7 @@ private Map assertRowSaved(Map expected, Program return ret; } - private Program createProgram(String name, String abbv, String key, String referenceSource, List germplasm, List traits) throws ApiException, DoesNotExistException, ValidatorException, BadRequestException { + private Program createProgram(String name, String abbv, String key, String referenceSource, Integer numGermplasmToCreate, List traits) throws ApiException, DoesNotExistException, ValidatorException, BadRequestException { SpeciesEntity validSpecies = speciesDAO.findAll().get(0); SpeciesRequest speciesRequest = SpeciesRequest.builder() .commonName(validSpecies.getCommonName()) @@ -458,10 +462,13 @@ private Program createProgram(String name, String abbv, String key, String refer // Get main program Program program = programService.getByKey(key).get(); + String brapiProgramDbId = programDAO.getProgramBrAPI(program).getProgramDbId(); dsl.execute(securityFp.get("InsertProgramRolesBreeder"), testUser.getId().toString(), program.getId().toString()); - if(germplasm != null && !germplasm.isEmpty()) { + if(numGermplasmToCreate != null && numGermplasmToCreate > 0) { + List germplasm = createGermplasm(numGermplasmToCreate, brapiProgramDbId); + BrAPIExternalReference newReference = new BrAPIExternalReference(); newReference.setReferenceSource(String.format("%s/programs", referenceSource)); newReference.setReferenceID(program.getId().toString()); @@ -484,7 +491,7 @@ private Program createProgram(String name, String abbv, String key, String refer return program; } - private List createGermplasm(int numToCreate) { + private List createGermplasm(int numToCreate, String brapiProgramDbId) { List germplasm = new ArrayList<>(); for (int i = 0; i < numToCreate; i++) { String gid = ""+(i+1); @@ -503,6 +510,7 @@ private List createGermplasm(int numToCreate) { testReference.setReferenceID(UUID.randomUUID().toString()); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); } diff --git a/src/test/java/org/breedinginsight/services/BrAPIGermplasmServiceUnitTest.java b/src/test/java/org/breedinginsight/services/BrAPIGermplasmServiceUnitTest.java index 9d5f7b792..a47a3eebb 100644 --- a/src/test/java/org/breedinginsight/services/BrAPIGermplasmServiceUnitTest.java +++ b/src/test/java/org/breedinginsight/services/BrAPIGermplasmServiceUnitTest.java @@ -4,7 +4,9 @@ import io.reactivex.functions.Function; import io.reactivex.functions.Function3; import lombok.SneakyThrows; +import org.brapi.client.v2.model.queryParams.germplasm.GermplasmQueryParams; import org.brapi.v2.model.BrAPIExternalReference; +import org.brapi.v2.model.core.BrAPIProgram; import org.brapi.v2.model.core.response.BrAPIListDetails; import org.brapi.v2.model.core.response.BrAPIListsSingleResponse; import org.brapi.v2.model.germ.BrAPIGermplasm; @@ -60,7 +62,7 @@ void setup() { programDAO = mock(ProgramDAO.class); brAPIDAOUtil = mock(BrAPIDAOUtil.class); cacheProvider = new ProgramCacheProvider(super.getRedisConnection()); - germplasmDAO = new BrAPIGermplasmDAO(programDAO, mock(ImportDAO.class), brAPIDAOUtil, cacheProvider, new BrAPIEndpointProvider()); + germplasmDAO = new BrAPIGermplasmDAO(programDAO, mock(ImportDAO.class), brAPIDAOUtil, cacheProvider, new BrAPIEndpointProvider(), 65000); programService = mock(ProgramService.class); Field externalReferenceSource = BrAPIGermplasmDAO.class.getDeclaredField("referenceSource"); @@ -78,6 +80,14 @@ public void getGermplasmListExport() { testProgram.setKey("TEST"); testProgram.setId(testProgramId); + + BrAPIProgram brapiProgram = new BrAPIProgram(); + String brapiProgramDbId = UUID.randomUUID().toString(); + brapiProgram.setProgramDbId(brapiProgramDbId); + brapiProgram.setProgramName("Test Program [TEST]"); + + testProgram.setBrapiProgram(brapiProgram); + //Create List BrAPIListsSingleResponse listResponse = new BrAPIListsSingleResponse(); String listId = "1"; @@ -100,6 +110,7 @@ public void getGermplasmListExport() { testGermplasm.setSeedSource("Wild"); testGermplasm.setAccessionNumber("1"); testGermplasm.setDefaultDisplayName("Germplasm A"); + testGermplasm.setProgramDbId(brapiProgramDbId); JsonObject additionalInfo = new JsonObject(); additionalInfo.addProperty(GERMPLASM_IMPORT_ENTRY_NUMBER, "2"); additionalInfo.addProperty(GERMPLASM_BREEDING_METHOD, "Allopolyploid"); @@ -129,6 +140,7 @@ public void getGermplasmListExport() { externalRef = new ArrayList<>(); externalRef.add(testReference); testGermplasm.setExternalReferences(externalRef); + testGermplasm.setProgramDbId(brapiProgramDbId); germplasm.add(testGermplasm); //Stub out the spies @@ -138,12 +150,11 @@ public void getGermplasmListExport() { doReturn(Optional.of(testProgram)).when(programSpy).getById(testProgramId); //Stub out the mocks - when(programDAO.getAll()).thenReturn(Arrays.asList(Program.builder().id(testProgramId).name("Test Program").active(true).build())); when(programDAO.fetchOneById(any(UUID.class))).thenReturn(testProgram); when(programDAO.get(any(UUID.class))).thenReturn(Arrays.asList(testProgram)); - when(brAPIDAOUtil.searchNoPaging(any(Function.class), - any(Function3.class), - any(BrAPIGermplasmSearchRequest.class))).thenReturn(germplasm); + when(programDAO.getProgramBrAPI(any())).thenReturn(brapiProgram); + when(brAPIDAOUtil.get(any(Function.class), + any(GermplasmQueryParams.class))).thenReturn(germplasm); //Create germplasm cache of stub data Method setupMethod = BrAPIGermplasmDAO.class.getDeclaredMethod("setup");