import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.session.SqlSession;
import org.elasticsearch.ElasticSearchException;
+import org.elasticsearch.action.search.SearchRequestBuilder;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.common.collect.Lists;
import org.elasticsearch.common.collect.Maps;
import org.elasticsearch.common.io.BytesStream;
+import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.BoolFilterBuilder;
}
}
- Paging paging = Paging.create(query.pageSize(), query.pageIndex());
- SearchHits hits = searchIndex.executeRequest(
+ Builder<Rule> rulesBuilder = ImmutableList.builder();
+ SearchRequestBuilder searchRequestBuilder =
searchIndex.client().prepareSearch(INDEX_RULES).setTypes(TYPE_RULE)
- .setPostFilter(mainFilter)
- .addSort(RuleDocument.FIELD_NAME, SortOrder.ASC)
- .setSize(paging.pageSize())
- .setFrom(paging.offset())
- );
+ .setPostFilter(mainFilter)
+ .addSort(RuleDocument.FIELD_NAME, SortOrder.ASC);
+
+ if (RuleQuery.NO_PAGINATION == query.pageSize()) {
+ final int scrollTime = 100;
+ SearchResponse scrollResp = searchRequestBuilder
+ .setSearchType(SearchType.SCAN)
+ .setScroll(new TimeValue(scrollTime))
+ .setSize(50).execute().actionGet();
+ //Scroll until no hits are returned
+ while (true) {
+ scrollResp = searchIndex.client().prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(scrollTime)).execute().actionGet();
+ for (SearchHit hit : scrollResp.getHits()) {
+ rulesBuilder.add(RuleDocumentParser.parse(hit.sourceAsMap()));
+ }
+ //Break condition: No hits are returned
+ if (scrollResp.getHits().getHits().length == 0) {
+ break;
+ }
+ }
+ return new PagedResult<Rule>(rulesBuilder.build(), null);
- Builder<Rule> rulesBuilder = ImmutableList.builder();
- for (SearchHit hit : hits.hits()) {
- rulesBuilder.add(RuleDocumentParser.parse(hit.sourceAsMap()));
+ } else {
+ Paging paging = Paging.create(query.pageSize(), query.pageIndex());
+ SearchHits hits = searchIndex.executeRequest(
+ searchRequestBuilder
+ .setSize(paging.pageSize())
+ .setFrom(paging.offset())
+ );
+
+ for (SearchHit hit : hits.hits()) {
+ rulesBuilder.add(RuleDocumentParser.parse(hit.sourceAsMap()));
+ }
+ return new PagedResult<Rule>(rulesBuilder.build(), PagingResult.create(paging.pageSize(), paging.pageIndex(), hits.getTotalHits()));
}
- return new PagedResult<Rule>(rulesBuilder.build(), PagingResult.create(paging.pageSize(), paging.pageIndex(), hits.getTotalHits()));
}
private static void addMustTermOrTerms(BoolFilterBuilder filter, String field, Collection<String> terms) {
}
@Test
- public void find_linear() {
+ public void find_rules_with_all_remediation_function_types() {
Map<Integer, CharacteristicDto> characteristics = newHashMap();
characteristics.put(10, new CharacteristicDto().setId(10).setKey("REUSABILITY").setName("Reusability"));
characteristics.put(11, new CharacteristicDto().setId(11).setKey("MODULARITY").setName("Modularity").setParentId(10));
List<RuleDto> rules = ImmutableList.of(
new RuleDto().setId(10).setRepositoryKey("repo").setRuleKey("key1").setSeverity(Severity.MINOR)
- .setDefaultSubCharacteristicId(11).setDefaultRemediationFunction("LINEAR").setDefaultRemediationCoefficient("1h").setDefaultRemediationOffset(""),
+ .setDefaultSubCharacteristicId(11).setDefaultRemediationFunction("LINEAR").setDefaultRemediationCoefficient("1h"),
new RuleDto().setId(11).setRepositoryKey("repo").setRuleKey("key2").setSeverity(Severity.MINOR)
.setDefaultSubCharacteristicId(11).setDefaultRemediationFunction("CONSTANT_ISSUE").setDefaultRemediationOffset("15min"),
new RuleDto().setId(12).setRepositoryKey("repo").setRuleKey("key3").setSeverity(Severity.MINOR)
registry.bulkRegisterRules(rules, characteristics, ArrayListMultimap.<Integer, RuleParamDto>create(), ArrayListMultimap.<Integer, RuleRuleTagDto>create());
- assertThat(registry.find(RuleQuery.builder().hasDebtCharacteristic(null).build()).results()).hasSize(3);
+ assertThat(registry.find(RuleQuery.builder().build()).results()).hasSize(3);
+ }
+
+ @Test
+ public void find_with_no_pagination() {
+ assertThat(registry.find(RuleQuery.builder().pageSize(-1).build()).results()).hasSize(2);
}
private String testFileAsString(String testFile) throws Exception {