diff --git a/src/main/java/org/breedinginsight/api/model/v1/request/query/TraitsQuery.java b/src/main/java/org/breedinginsight/api/model/v1/request/query/TraitsQuery.java index 4ad3a5980..a0ae2bb6f 100644 --- a/src/main/java/org/breedinginsight/api/model/v1/request/query/TraitsQuery.java +++ b/src/main/java/org/breedinginsight/api/model/v1/request/query/TraitsQuery.java @@ -19,9 +19,121 @@ import io.micronaut.core.annotation.Introspected; import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import java.util.ArrayList; +import java.util.List; @Getter @Introspected public class TraitsQuery extends QueryParams { + private String name; + private String traitDescription; + private String entityAttribute; + private String mainAbbreviation; + private String synonyms; + private String level; + private String status; + private String methodDescription; + private String methodClass; + private String methodFormula; + private String methodHandle; + private String scaleName; + private String scaleClass; + private String scaleDecimalPlaces; + private String scaleLowerLimit; + private String scaleUpperLimit; + private String scaleCategories; + private String createdAt; + private String updatedAt; + private String createdByUserId; + private String createdByUserName; + private String updatedByUserId; + private String updatedByUserName; + private String termType; + + public SearchRequest constructSearchRequest() { + List filters = new ArrayList<>(); + if (!StringUtils.isBlank(getName())) { + filters.add(constructFilterRequest("name", getName())); + } + if (!StringUtils.isBlank(getTraitDescription())) { + filters.add(constructFilterRequest("traitDescription", getTraitDescription())); + } + if (!StringUtils.isBlank(getEntityAttribute())) { + filters.add(constructFilterRequest("entityAttribute", getEntityAttribute())); + } + if (!StringUtils.isBlank(getMainAbbreviation())) { + filters.add(constructFilterRequest("mainAbbreviation", getMainAbbreviation())); + } + if (!StringUtils.isBlank(getSynonyms())) { + filters.add(constructFilterRequest("synonyms", getSynonyms())); + } + if (!StringUtils.isBlank(getLevel())) { + filters.add(constructFilterRequest("level", getLevel())); + } + if (!StringUtils.isBlank(getStatus())) { + filters.add(constructFilterRequest("status", getStatus())); + } + if (!StringUtils.isBlank(getMethodDescription())) { + filters.add(constructFilterRequest("methodDescription", getMethodDescription())); + } + if (!StringUtils.isBlank(getMethodClass())) { + filters.add(constructFilterRequest("methodClass", getMethodClass())); + } + if (!StringUtils.isBlank(getMethodFormula())) { + filters.add(constructFilterRequest("methodFormula", getMethodFormula())); + } + if (!StringUtils.isBlank(getMethodHandle())) { + filters.add(constructFilterRequest("methodHandle", getMethodHandle())); + } + if (!StringUtils.isBlank(getScaleName())) { + filters.add(constructFilterRequest("scaleName", getScaleName())); + } + if (!StringUtils.isBlank(getScaleClass())) { + filters.add(constructFilterRequest("scaleClass", getScaleClass())); + } + if (!StringUtils.isBlank(getScaleDecimalPlaces())) { + filters.add(constructFilterRequest("scaleDecimalPlaces", getScaleDecimalPlaces())); + } + if (!StringUtils.isBlank(getScaleLowerLimit())) { + filters.add(constructFilterRequest("scaleLowerLimit", getScaleLowerLimit())); + } + if (!StringUtils.isBlank(getScaleUpperLimit())) { + filters.add(constructFilterRequest("scaleUpperLimit", getScaleUpperLimit())); + } + if (!StringUtils.isBlank(getScaleCategories())) { + filters.add(constructFilterRequest("scaleCategories", getScaleCategories())); + } + if (!StringUtils.isBlank(getCreatedAt())) { + filters.add(constructFilterRequest("createdAt", getCreatedAt())); + } + if (!StringUtils.isBlank(getUpdatedAt())) { + filters.add(constructFilterRequest("updatedAt", getUpdatedAt())); + } + if (!StringUtils.isBlank(getCreatedByUserId())) { + filters.add(constructFilterRequest("createdByUserId", getCreatedByUserId())); + } + if (!StringUtils.isBlank(getCreatedByUserName())) { + filters.add(constructFilterRequest("createdByUserName", getCreatedByUserName())); + } + if (!StringUtils.isBlank(getUpdatedByUserId())) { + filters.add(constructFilterRequest("updatedByUserId", getUpdatedByUserId())); + } + if (!StringUtils.isBlank(getUpdatedByUserName())) { + filters.add(constructFilterRequest("updatedByUserName", getUpdatedByUserName())); + } + if (!StringUtils.isBlank(getTermType())) { + filters.add(constructFilterRequest("termType", getTermType())); + } + return new SearchRequest(filters); + } + private FilterRequest constructFilterRequest(String field, String value) { + return FilterRequest.builder() + .field(field) + .value(value) + .build(); + } + + Boolean full = false; } diff --git a/src/main/java/org/breedinginsight/api/v1/controller/TraitController.java b/src/main/java/org/breedinginsight/api/v1/controller/TraitController.java index e5c261fed..7f44398cd 100644 --- a/src/main/java/org/breedinginsight/api/v1/controller/TraitController.java +++ b/src/main/java/org/breedinginsight/api/v1/controller/TraitController.java @@ -81,7 +81,8 @@ public HttpResponse>> getTraits( try { List traits = ontologyService.getTraitsByProgramId(programId, traitsQuery.getFull()); - return ResponseUtils.getQueryResponse(traits, traitQueryMapper, traitsQuery); + SearchRequest searchRequest = traitsQuery.constructSearchRequest(); + return ResponseUtils.getQueryResponse(traits, traitQueryMapper, searchRequest, traitsQuery); } catch (DoesNotExistException e) { return HttpResponse.notFound(); } diff --git a/src/main/java/org/breedinginsight/utilities/response/mappers/TraitQueryMapper.java b/src/main/java/org/breedinginsight/utilities/response/mappers/TraitQueryMapper.java index ac8cccc22..ff1638b12 100644 --- a/src/main/java/org/breedinginsight/utilities/response/mappers/TraitQueryMapper.java +++ b/src/main/java/org/breedinginsight/utilities/response/mappers/TraitQueryMapper.java @@ -48,6 +48,9 @@ public TraitQueryMapper() { trait -> trait.getMethod() != null ? trait.getMethod().getMethodClass() : null), Map.entry("methodFormula", trait -> trait.getMethod() != null ? trait.getMethod().getFormula() : null), + Map.entry("methodHandle", + trait -> trait.getMethod() != null ? + trait.getMethod().getDescription() + " " + trait.getMethod().getMethodClass() : null ), Map.entry("scaleName", trait -> trait.getScale() != null ? trait.getScale().getScaleName() : null), Map.entry("scaleClass",