Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 50 additions & 17 deletions src/main/java/org/breedinginsight/daos/impl/TraitDAOImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.brapi.v2.model.pheno.*;
import org.brapi.v2.model.pheno.request.BrAPIObservationVariableSearchRequest;
import org.brapi.v2.model.pheno.response.BrAPIObservationVariableListResponse;
import org.brapi.v2.model.pheno.response.BrAPIObservationVariableListResponseResult;
import org.brapi.v2.model.pheno.response.BrAPIObservationVariableSingleResponse;
import org.breedinginsight.brapps.importer.services.ExternalReferenceSource;
import org.breedinginsight.dao.db.tables.BiUserTable;
Expand Down Expand Up @@ -61,7 +62,6 @@
import java.util.stream.Stream;

import static org.breedinginsight.dao.db.Tables.*;
import static org.jooq.impl.DSL.lower;

@Singleton
@Slf4j
Expand Down Expand Up @@ -143,15 +143,7 @@ public List<Trait> getTraitsFullByProgramId(UUID programId) {
public List<Trait> getTraitsFullByProgramIds(List<UUID> programIds) {
List<Trait> saturatedTraits = new ArrayList<>();
for(UUID id : programIds) {
Map<String, Trait> programTraits = null;
try {
programTraits = cache.get(id);
} catch (ApiException e) {
throw new RuntimeException(e);
}
if(programTraits != null) {
saturatedTraits.addAll(programTraits.values());
}
saturatedTraits.addAll(fetchTraitsFullByProgramId(id));
}

return saturatedTraits;
Expand Down Expand Up @@ -215,6 +207,53 @@ private List<Trait> fetchTraitsFullByProgramId(UUID programId) {
return saturatedTraits;
}

private Trait fetchTraitFullByBiTraitAndProgramId(UUID traitId, UUID programId) {
// Get our db trait (equivalent to brapi variables)
Optional<Trait> biTraitOpt = getTrait(programId, traitId);
if (biTraitOpt.isEmpty()) {
throw new InternalServerException(String.format("Unable to find BI trait with id [%s]", traitId));
}

Trait trait = biTraitOpt.get();

String brapiProgramDbId;

try {
brapiProgramDbId = brAPIDAOUtil.getBrAPIProgramDbId(programId);
} catch (ApiException e) {
throw new InternalServerException(String.format("While fetching an individual trait in full, unable to retrieve brapi programDbId using bi program ID [%s]", programId), e);
}

// Get brapi variables
VariableQueryParams variablesRequest = new VariableQueryParams();
variablesRequest.programDbId(brapiProgramDbId);
variablesRequest.pageSize(1);

variablesRequest.setExternalReferenceId(traitId.toString());
variablesRequest.externalReferenceSource(referenceSource);

ApiResponse<BrAPIObservationVariableListResponse> brApiVariables = null;
BrAPIObservationVariable brAPIObservationVariable;
try {
brApiVariables = brAPIEndpointProvider.get(programDAO.getCoreClient(programId), ObservationVariablesApi.class)
.variablesGet(variablesRequest);
} catch (ApiException e) {
log.warn(Utilities.generateApiExceptionLogMessage(e));
throw new InternalServerException("Error making BrAPI call", e);
} finally {
brAPIObservationVariable = Optional.ofNullable(brApiVariables)
.map(ApiResponse::getBody)
.map(BrAPIObservationVariableListResponse::getResult)
.map(BrAPIObservationVariableListResponseResult::getData)
.orElseThrow()
.get(0);
}

saturateTrait(trait, brAPIObservationVariable);

return trait;
}

@Override
public List<Trait> getTraitsByProgramId(UUID programId) {
return getTraitsByProgramIds(programId);
Expand Down Expand Up @@ -260,13 +299,7 @@ public List<Trait> getTraitsById(UUID... traitIds){

@Override
public Optional<Trait> getTraitFull(UUID programId, UUID traitId){

try {
return Optional.ofNullable(cache.get(programId).get(traitId.toString()));
} catch (ApiException e) {
log.warn(Utilities.generateApiExceptionLogMessage(e));
throw new InternalServerException("Error making BrAPI call", e);
}
return Optional.of(fetchTraitFullByBiTraitAndProgramId(traitId, programId));
}

// could be more efficient to do a single get instead of search in saved search case but less code this way
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,16 @@
import io.reactivex.Flowable;
import junit.framework.AssertionFailedError;
import org.breedinginsight.BrAPITest;
import org.breedinginsight.DatabaseTest;
import org.breedinginsight.TestUtils;
import org.breedinginsight.api.model.v1.request.ProgramRequest;
import org.breedinginsight.api.model.v1.request.SpeciesRequest;
import org.breedinginsight.api.model.v1.request.query.FilterRequest;
import org.breedinginsight.api.model.v1.request.query.SearchRequest;
import org.breedinginsight.api.v1.controller.metadata.SortOrder;
import org.breedinginsight.brapi.v2.dao.BrAPIProgramDAO;
import org.breedinginsight.dao.db.enums.DataType;
import org.breedinginsight.dao.db.enums.TermType;
import org.breedinginsight.dao.db.tables.daos.ProgramDao;
import org.breedinginsight.dao.db.tables.pojos.BiUserEntity;
import org.breedinginsight.dao.db.tables.pojos.ProgramEntity;
import org.breedinginsight.daos.TraitDAO;
import org.breedinginsight.daos.UserDAO;
import org.breedinginsight.model.Program;
Expand All @@ -59,7 +57,6 @@
import java.util.stream.Collectors;

import static io.micronaut.http.HttpRequest.*;
import static org.breedinginsight.TestUtils.insertAndFetchTestProgram;
import static org.junit.jupiter.api.Assertions.*;

@MicronautTest
Expand All @@ -79,6 +76,8 @@ public class TraitUploadControllerIntegrationTest extends BrAPITest {
private TraitDAO traitDAO;
@Inject
private SpeciesService speciesService;
@Inject
private BrAPIProgramDAO programDAO;

private Species validSpecies;

Expand Down Expand Up @@ -135,7 +134,6 @@ public void setup() {
//dsl.execute(fp.get("InsertProgramOntology"));
dsl.execute(fp.get("InsertMethod"));
dsl.execute(fp.get("InsertScale"));
dsl.execute(fp.get("InsertTrait"));

}

Expand Down
Loading