Skip to content

Commit

Permalink
Merge pull request #28 from GenomicDataInfrastructure/retrieve-multip…
Browse files Browse the repository at this point in the history
…le-datasets-from-beacon

fix: retrieve multiple datasets from Beacon
  • Loading branch information
brunopacheco1 authored Jun 12, 2024
2 parents 564a78d + f25d06d commit 783d997
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ public class CkanFacetsQueryBuilder {
private final String CKAN_FACET_GROUP = "ckan";
private final String QUOTED_VALUE = "\"%s\"";
private final String FACET_PATTERN = "%s:(%s)";
private final String AND = " AND ";

public String buildFacetQuery(DatasetSearchQuery query) {
var facets = query.getFacets();
var operator = query.getOperator();
var operator = CkanQueryOperatorMapper.getOperator(query.getOperator());

var nonNullFacets = ofNullable(facets)
.orElseGet(List::of)
Expand All @@ -35,7 +36,7 @@ public String buildFacetQuery(DatasetSearchQuery query) {

return nonNullFacets.entrySet().stream()
.map(entry -> getFacetQuery(entry.getKey(), entry.getValue(), operator))
.collect(joining(CkanQueryOperatorMapper.getOperator(operator)));
.collect(joining(AND));
}

private Boolean isCkanGroupAndFacetIsNotBlank(DatasetSearchQueryFacet facet) {
Expand All @@ -46,11 +47,12 @@ private Boolean isCkanGroupAndFacetIsNotBlank(DatasetSearchQueryFacet facet) {
!facet.getValue().isBlank();
}

private String getFacetQuery(String key, List<DatasetSearchQueryFacet> facets,
DatasetSearchQuery.OperatorEnum operator) {
private String getFacetQuery(
String key, List<DatasetSearchQueryFacet> facets, String operator
) {
var values = facets.stream()
.map(facet -> QUOTED_VALUE.formatted(facet.getValue()))
.collect(joining(CkanQueryOperatorMapper.getOperator(operator)));
.collect(joining(operator));

return FACET_PATTERN.formatted(key, values);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ public class CkanQueryOperatorMapper {
private final String OR = " OR ";

public String getOperator(DatasetSearchQuery.OperatorEnum operator) {
return operator.equals(DatasetSearchQuery.OperatorEnum.OR) ? OR : AND;
return DatasetSearchQuery.OperatorEnum.AND.equals(operator) ? AND : OR;
}
}
2 changes: 1 addition & 1 deletion src/main/openapi/discovery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ components:
enum:
- AND
- OR
default: AND
default: OR
DatasetSearchQueryFacet:
type: object
properties:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ void can_parse_with_or_operator(String value) {
query.setFacets(facets);
query.setOperator(DatasetSearchQuery.OperatorEnum.OR);

var expected = "field1:(\"value1\" OR \"value2\") OR field2:(\"value3\")";
var expected = "field1:(\"value1\" OR \"value2\") AND field2:(\"value3\")";
var actual = CkanFacetsQueryBuilder.buildFacetQuery(query);
assertEquals(expected, actual);
}
Expand Down

0 comments on commit 783d997

Please sign in to comment.