Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
@Getter
@Setter
@Introspected
@AllArgsConstructor
@NoArgsConstructor
public class SearchRequest {
private List<FilterRequest> filters = new ArrayList<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.breedinginsight.api.model.v1.request.query.FilterRequest;
import org.breedinginsight.api.model.v1.request.query.PaginationParams;
import org.breedinginsight.api.v1.controller.metadata.SortOrder;

Expand Down Expand Up @@ -50,4 +51,11 @@ public Integer getDefaultPage() {
public Integer getDefaultPageSize() {
return DEFAULT_PAGE_SIZE;
}

protected FilterRequest constructFilterRequest(String field, String value) {
return FilterRequest.builder()
.field(field)
.value(value)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@
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;
import org.breedinginsight.api.model.v1.response.DataResponse;
import org.breedinginsight.api.model.v1.response.Response;
import org.breedinginsight.api.model.v1.validators.QueryValid;
import org.breedinginsight.api.model.v1.validators.SearchValid;
import org.breedinginsight.brapi.v1.controller.BrapiVersion;
import org.breedinginsight.brapi.v1.model.request.query.BrapiQuery;
import org.breedinginsight.brapi.v2.model.request.query.GermplasmQuery;
import org.breedinginsight.brapi.v2.model.response.mappers.GermplasmQueryMapper;
import org.breedinginsight.brapi.v2.services.BrAPIGermplasmService;
import org.breedinginsight.brapps.importer.model.exports.FileType;
Expand Down Expand Up @@ -46,18 +49,39 @@ public GermplasmController(BrAPIGermplasmService germplasmService, GermplasmQuer
this.germplasmQueryMapper = germplasmQueryMapper;
}

@Post("/${micronaut.bi.api.version}/programs/{programId}" + BrapiVersion.BRAPI_V2 + "/search/germplasm{?queryParams*}")
@Produces(MediaType.APPLICATION_JSON)
@ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL})
public HttpResponse<Response<DataResponse<List<BrAPIGermplasm>>>> searchGermplasm(
@PathVariable("programId") UUID programId,
@QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid BrapiQuery queryParams,
@Body @SearchValid(using = GermplasmQueryMapper.class) SearchRequest searchRequest) {
try {
log.debug("fetching germ for program: " + programId);
List<BrAPIGermplasm> germplasm = germplasmService.getGermplasm(programId);
queryParams.setSortField(germplasmQueryMapper.getDefaultSortField());
queryParams.setSortOrder(germplasmQueryMapper.getDefaultSortOrder());
return ResponseUtils.getBrapiQueryResponse(germplasm, germplasmQueryMapper, queryParams, searchRequest);
} catch (ApiException e) {
log.info(e.getMessage(), e);
return HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, "Error retrieving germplasm");
}
}

@Get("/${micronaut.bi.api.version}/programs/{programId}" + BrapiVersion.BRAPI_V2 + "/germplasm{?queryParams*}")
@Produces(MediaType.APPLICATION_JSON)
@ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL})
public HttpResponse<Response<DataResponse<List<BrAPIGermplasm>>>> getGermplasm(
@PathVariable("programId") UUID programId,
@QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid BrapiQuery queryParams) {
@QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid GermplasmQuery queryParams) {
try {
log.debug("fetching germ for program: " + programId);

List<BrAPIGermplasm> germplasm = germplasmService.getGermplasm(programId);
queryParams.setSortField(germplasmQueryMapper.getDefaultSortField());
queryParams.setSortOrder(germplasmQueryMapper.getDefaultSortOrder());
return ResponseUtils.getBrapiQueryResponse(germplasm, germplasmQueryMapper, queryParams);
SearchRequest searchRequest = queryParams.constructSearchRequest();
return ResponseUtils.getBrapiQueryResponse(germplasm, germplasmQueryMapper, queryParams, searchRequest);
} catch (ApiException e) {
log.info(e.getMessage(), e);
return HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, "Error retrieving germplasm");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,15 @@ public final class BrAPIAdditionalInfoFields {
public static final String GERMPLASM_RAW_PEDIGREE = "rawPedigree";
public static final String GERMPLASM_PEDIGREE_BY_NAME = "pedigreeByName";
public static final String GERMPLASM_PEDIGREE_BY_UUID = "pedigreeByUUID";
public static final String GERMPLASM_IMPORT_ENTRY_NUMBER = "importEntryNumber";
public static final String GERMPLASM_FEMALE_PARENT_GID = "femaleParentGid";
public static final String GERMPLASM_MALE_PARENT_GID = "maleParentGid";
public static final String GERMPLASM_FEMALE_PARENT_ENTRY_NO = "femaleParentEntryNo";
public static final String GERMPLASM_MALE_PARENT_ENTRY_NO = "maleParentEntryNo";
public static final String CREATED_BY = "createdBy";
public static final String CREATED_BY_USER_ID = "userId";
public static final String CREATED_BY_USER_NAME = "userName";
public static final String GERMPLASM_BREEDING_METHOD_ID = "breedingMethodId";
public static final String GERMPLASM_BREEDING_METHOD = "breedingMethod";
public static final String CREATED_DATE = "createdDate";
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@
@Context
public class BrAPIGermplasmDAO {

private final String BREEDING_METHOD_ID_KEY = "breedingMethodId";

private final ProgramDAO programDAO;
private final ImportDAO importDAO;

Expand Down Expand Up @@ -143,8 +141,8 @@ private Map<String,BrAPIGermplasm> processGermplasmForDisplay(List<BrAPIGermplas
programGermplasmByFullName.put(germplasm.getGermplasmName(), germplasm);

JsonObject additionalInfo = germplasm.getAdditionalInfo();
if (additionalInfo != null && additionalInfo.has(BREEDING_METHOD_ID_KEY)) {
germplasm.setBreedingMethodDbId(additionalInfo.get(BREEDING_METHOD_ID_KEY).getAsString());
if (additionalInfo != null && additionalInfo.has(BrAPIAdditionalInfoFields.GERMPLASM_BREEDING_METHOD_ID)) {
germplasm.setBreedingMethodDbId(additionalInfo.get(BrAPIAdditionalInfoFields.GERMPLASM_BREEDING_METHOD_ID).getAsString());
}

if (germplasm.getDefaultDisplayName() != null) {
Expand Down Expand Up @@ -175,20 +173,24 @@ private Map<String,BrAPIGermplasm> processGermplasmForDisplay(List<BrAPIGermplas
List<String> parents = Arrays.asList(germplasm.getPedigree().split("/"));
if (parents.size() >= 1) {
if (programGermplasmByFullName.containsKey(parents.get(0))) {
newPedigreeString = programGermplasmByFullName.get(parents.get(0)).getAccessionNumber();
String femaleParentAccessionNumber = programGermplasmByFullName.get(parents.get(0)).getAccessionNumber();
newPedigreeString = femaleParentAccessionNumber;
namePedigreeString = programGermplasmByFullName.get(parents.get(0)).getDefaultDisplayName();
uuidPedigreeString = programGermplasmByFullName.get(parents.get(0)).getExternalReferences().
stream().filter(ref -> ref.getReferenceSource().equals(referenceSource)).
map(ref -> ref.getReferenceID()).findFirst().orElse("");
additionalInfo.addProperty(BrAPIAdditionalInfoFields.GERMPLASM_FEMALE_PARENT_GID, femaleParentAccessionNumber);
}
}
if (parents.size() == 2) {
if (programGermplasmByFullName.containsKey(parents.get(1))) {
newPedigreeString += "/" + programGermplasmByFullName.get(parents.get(1)).getAccessionNumber();
String maleParentAccessionNumber = programGermplasmByFullName.get(parents.get(1)).getAccessionNumber();
newPedigreeString += "/" + maleParentAccessionNumber;
namePedigreeString += "/" + programGermplasmByFullName.get(parents.get(1)).getDefaultDisplayName();
uuidPedigreeString += "/" + programGermplasmByFullName.get(parents.get(1)).getExternalReferences().
stream().filter(ref -> ref.getReferenceSource().equals(referenceSource)).
map(ref -> ref.getReferenceID()).findFirst().orElse("");
additionalInfo.addProperty(BrAPIAdditionalInfoFields.GERMPLASM_MALE_PARENT_GID, maleParentAccessionNumber);
}
}
//For use in individual germplasm display
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.breedinginsight.brapi.v2.model.request.query;

import io.micronaut.core.annotation.Introspected;
import lombok.Getter;
import org.breedinginsight.api.model.v1.request.query.FilterRequest;
import org.breedinginsight.api.model.v1.request.query.SearchRequest;
import org.breedinginsight.brapi.v1.model.request.query.BrapiQuery;
import org.jooq.tools.StringUtils;

import java.util.ArrayList;
import java.util.List;

@Getter
@Introspected
public class GermplasmQuery extends BrapiQuery {
private String accessionNumber;
private String defaultDisplayName;
private String breedingMethod;
private String seedSource;
private String femaleParentGID;
private String maleParentGID;
private String createdDate;
private String createdByUserName;
private String synonym;

public SearchRequest constructSearchRequest() {
List<FilterRequest> filters = new ArrayList<>();
if (!StringUtils.isBlank(getAccessionNumber())) filters.add(constructFilterRequest("accessionNumber", getAccessionNumber()));
if (!StringUtils.isBlank(getDefaultDisplayName())) filters.add(constructFilterRequest("defaultDisplayName", getDefaultDisplayName()));
if (!StringUtils.isBlank(getBreedingMethod())) filters.add(constructFilterRequest("breedingMethod", getBreedingMethod()));
if (!StringUtils.isBlank(getSeedSource())) filters.add(constructFilterRequest("seedSource", getSeedSource()));
if (!StringUtils.isBlank(getFemaleParentGID())) filters.add(constructFilterRequest("femaleParentGID", getFemaleParentGID()));
if (!StringUtils.isBlank(getMaleParentGID())) filters.add(constructFilterRequest("maleParentGID", getMaleParentGID()));
if (!StringUtils.isBlank(getCreatedDate())) filters.add(constructFilterRequest("createdDate", getCreatedDate()));
if (!StringUtils.isBlank(getCreatedByUserName())) filters.add(constructFilterRequest("createdByUserName", getCreatedByUserName()));
if (!StringUtils.isBlank(getSynonym())) filters.add(constructFilterRequest("synonym", getSynonym()));
return new SearchRequest(filters);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import org.brapi.v2.model.germ.BrAPIGermplasm;
import org.breedinginsight.api.v1.controller.metadata.SortOrder;
import org.breedinginsight.brapi.v1.model.ObservationVariable;
import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields;
import org.breedinginsight.utilities.response.mappers.AbstractQueryMapper;

import javax.inject.Singleton;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Getter
@Singleton
Expand All @@ -21,7 +23,35 @@ public class GermplasmQueryMapper extends AbstractQueryMapper {

public GermplasmQueryMapper() {
fields = Map.ofEntries(
Map.entry("accessionNumber", BrAPIGermplasm::getAccessionNumber)
Map.entry("accessionNumber", BrAPIGermplasm::getAccessionNumber),
Map.entry("defaultDisplayName", BrAPIGermplasm::getDefaultDisplayName),
Map.entry("breedingMethod", (germplasm) ->
germplasm.getAdditionalInfo() != null && germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.GERMPLASM_BREEDING_METHOD) ?
germplasm.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_BREEDING_METHOD).getAsString() :
null),
Map.entry("seedSource", BrAPIGermplasm::getSeedSource),
Map.entry("femaleParentGID", (germplasm) ->
germplasm.getAdditionalInfo() != null && germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.GERMPLASM_FEMALE_PARENT_GID) ?
germplasm.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_FEMALE_PARENT_GID).getAsString() :
null),
Map.entry("maleParentGID", (germplasm) ->
germplasm.getAdditionalInfo() != null && germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.GERMPLASM_MALE_PARENT_GID) ?
germplasm.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_MALE_PARENT_GID).getAsString() :
null),
Map.entry("createdDate", (germplasm) ->
germplasm.getAdditionalInfo() != null && germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.CREATED_DATE) ?
germplasm.getAdditionalInfo().get(BrAPIAdditionalInfoFields.CREATED_DATE).getAsString() :
null),
Map.entry("createdByUserName", (germplasm) ->
germplasm.getAdditionalInfo() != null
&& germplasm.getAdditionalInfo().has(BrAPIAdditionalInfoFields.CREATED_BY)
&& germplasm.getAdditionalInfo().getAsJsonObject(BrAPIAdditionalInfoFields.CREATED_BY).has(BrAPIAdditionalInfoFields.CREATED_BY_USER_NAME) ?
germplasm.getAdditionalInfo().getAsJsonObject(BrAPIAdditionalInfoFields.CREATED_BY).get(BrAPIAdditionalInfoFields.CREATED_BY_USER_NAME).getAsString() :
null),
Map.entry("synonyms", (germplasm) ->
germplasm.getSynonyms() != null ?
germplasm.getSynonyms().stream().map((synonym) -> synonym.getSynonym())
.collect(Collectors.toList()) : null)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.brapi.v2.model.core.response.BrAPIListsListResponse;
import org.brapi.v2.model.germ.BrAPIGermplasm;
import org.brapi.v2.model.germ.BrAPIGermplasmSynonyms;
import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields;
import org.breedinginsight.brapps.importer.daos.BrAPIListDAO;
import org.breedinginsight.brapps.importer.model.exports.FileType;
import org.breedinginsight.model.Column;
Expand Down Expand Up @@ -109,8 +110,8 @@ public List<Map<String, Object>> processData(List<BrAPIGermplasm> germplasm){
HashMap<String, Object> row = new HashMap<>();
row.put("GID", Integer.valueOf(germplasmEntry.getAccessionNumber()));
row.put("Name", germplasmEntry.getGermplasmName());
row.put("Entry No", germplasmEntry.getAdditionalInfo().get("importEntryNumber").getAsInt());
row.put("Breeding Method", germplasmEntry.getAdditionalInfo().get("breedingMethod").getAsString());
row.put("Entry No", germplasmEntry.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_IMPORT_ENTRY_NUMBER).getAsInt());
row.put("Breeding Method", germplasmEntry.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_BREEDING_METHOD).getAsString());
String source = germplasmEntry.getSeedSource();
row.put("Source", source);

Expand Down Expand Up @@ -152,7 +153,7 @@ public DownloadFile exportGermplasmList(UUID programId, String listId, FileType
List<String> germplasmNames = listData.getData();
List<BrAPIGermplasm> germplasm = germplasmDAO.getGermplasmByRawName(germplasmNames, programId);
//processGermplasmForDisplay, numbers
germplasm.sort(Comparator.comparingInt(g -> g.getAdditionalInfo().get("importEntryNumber").getAsInt()));
germplasm.sort(Comparator.comparingInt(g -> g.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_IMPORT_ENTRY_NUMBER).getAsInt()));

String listName = listData.getListName();
Optional<Program> optionalProgram = programService.getById(programId);
Expand Down
Loading