@Override public List<User> search(QuotaQuery query) { Stream<User> results = Iterators.toStream(listUsers()) .map(User::fromUsername) .filter(clauseConverter.andToPredicate(query.getClause())) .sorted(Comparator.comparing(User::asString)) .skip(query.getOffset().getValue()); return limit(results, query.getLimit()) .collect(Guavate.toImmutableList()); }
public QuotaQuery build() { return new QuotaQuery( QuotaClause.and(clauses.build()), limit.orElse(Limit.unlimited()), offset.orElse(Offset.none())); } }
@Override public List<User> search(QuotaQuery query) { Stream<User> results = new ScrollIterable(client, prepareSearch(query)) .stream() .flatMap(searchResponse -> Arrays.stream(searchResponse.getHits() .getHits())) .map(hit -> hit.field(USER)) .map(field -> (String) field.getValue()) .map(User::fromUsername) .skip(query.getOffset().getValue()); return query.getLimit().getValue() .map(results::limit) .orElse(results) .collect(Guavate.toImmutableList()); }
public QueryBuilder from(QuotaQuery query) { List<QuotaClause> clauses = query.getClause().getClauses(); if (clauses.isEmpty()) { return matchAllQuery(); } if (clauses.size() == 1) { return singleClauseAsESQuery(clauses.get(0)); } return clausesAsAndESQuery(clauses); }
public SearchRequestBuilder prepareSearch(QuotaQuery query) { SearchRequestBuilder searchRequestBuilder = client.prepareSearch(readAlias.getValue()) .setTypes(QUOTA_RATIO_TYPE.getValue()) .setScroll(TIMEOUT) .addFields(USER) .setQuery(quotaQueryConverter.from(query)); query.getLimit() .getValue() .ifPresent(searchRequestBuilder::setSize); searchRequestBuilder.addSort( SortBuilders.fieldSort(USER) .order(SortOrder.ASC)); return searchRequestBuilder; }
@Test void fromShouldReturnMatchAllWhenEmptyClauses() { QuotaQuery query = QuotaQuery.builder().build(); QueryBuilder expected = matchAllQuery(); QueryBuilder actual = testee.from(query); assertThat(actual).isEqualToComparingFieldByField(expected); }
@Test void fromShouldReturnDomainMatchWhenOnlyDomain() { QuotaQuery query = QuotaQuery.builder().hasDomain(Domain.of("my.tld")).build(); QueryBuilder expected = termQuery(JsonMessageConstants.DOMAIN, "my.tld"); QueryBuilder actual = testee.from(query); assertThat(actual).isEqualToComparingFieldByField(expected); }
@Test void fromShouldReturnQuotaRatioMatchWhenLessThan() { QuotaQuery query = QuotaQuery.builder().lessThan(new QuotaBoundary(0.1)).build(); QueryBuilder expected = rangeQuery(QUOTA_RATIO).lte(0.1); QueryBuilder actual = testee.from(query); assertThat(actual).isEqualToComparingFieldByField(expected); }
@Test void fromShouldReturnQuotaRatioMatchWhenMoreThan() { QuotaQuery query = QuotaQuery.builder().moreThan(new QuotaBoundary(0.1)).build(); QueryBuilder expected = rangeQuery(QUOTA_RATIO).gte(0.1); QueryBuilder actual = testee.from(query); assertThat(actual).isEqualToComparingFieldByField(expected); }