private SearchResults(List<ComponentDto> projects, Set<String> favoriteProjectUuids, SearchIdResult<String> searchResults, Map<String, SnapshotDto> analysisByProjectUuid, ProjectMeasuresQuery query) { this.projects = projects; this.favoriteProjectUuids = favoriteProjectUuids; this.total = (int) searchResults.getTotal(); this.facets = searchResults.getFacets(); this.analysisByProjectUuid = analysisByProjectUuid; this.query = query; } }
private void verifySearch(RuleQuery query, RuleDefinitionDto... expectedRules) { SearchIdResult<Integer> result = underTest.search(query, new SearchOptions()); assertThat(result.getTotal()).isEqualTo((long) expectedRules.length); assertThat(result.getIds()).hasSize(expectedRules.length); for (RuleDefinitionDto expectedRule : expectedRules) { assertThat(result.getIds()).contains(expectedRule.getId()); } }
private SearchResult doSearch(DbSession dbSession, RuleQuery query, SearchOptions context) { SearchIdResult<Integer> result = ruleIndex.search(query, context); List<Integer> ruleIds = result.getIds(); // rule order is managed by ES Map<Integer, RuleDto> rulesByRuleKey = Maps.uniqueIndex( dbClient.ruleDao().selectByIds(dbSession, query.getOrganization().getUuid(), ruleIds), RuleDto::getId); List<RuleDto> rules = new ArrayList<>(); for (Integer ruleId : ruleIds) { RuleDto rule = rulesByRuleKey.get(ruleId); if (rule != null) { rules.add(rule); } } List<Integer> templateRuleIds = rules.stream() .map(RuleDto::getTemplateId) .filter(Objects::nonNull) .collect(MoreCollectors.toList()); List<RuleDefinitionDto> templateRules = dbClient.ruleDao().selectDefinitionByIds(dbSession, templateRuleIds); List<RuleParamDto> ruleParamDtos = dbClient.ruleDao().selectRuleParamsByRuleIds(dbSession, ruleIds); return new SearchResult() .setRules(rules) .setRuleParameters(ruleParamDtos) .setTemplateRules(templateRules) .setFacets(result.getFacets()) .setTotal(result.getTotal()); }
@Test public void paginate_results() { IntStream.rangeClosed(1, 9) .forEach(i -> index(newDoc(newPrivateProjectDto(ORG, "P" + i)))); SearchIdResult<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().setPage(2, 3)); assertThat(result.getIds()).containsExactly("P4", "P5", "P6"); assertThat(result.getTotal()).isEqualTo(9); }
@CheckForNull public CompareToSonarWay getSonarWay(Request request, DbSession dbSession, OrganizationDto organization, QProfileDto profile) { if (!request.mandatoryParamAsBoolean(PARAM_COMPARE_TO_SONAR_WAY) || profile.isBuiltIn()) { return null; } QProfileDto sonarWay = Stream.of(SONAR_WAY, SONARQUBE_WAY) .map(name -> dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name, profile.getLanguage())) .filter(Objects::nonNull) .filter(QProfileDto::isBuiltIn) .findFirst() .orElse(null); if (sonarWay == null) { return null; } long missingRuleCount = ruleIndex.search( new RuleQuery().setQProfile(profile).setActivation(false).setCompareToQProfile(sonarWay), new SearchOptions().setLimit(1)) .getTotal(); return CompareToSonarWay.newBuilder() .setProfile(sonarWay.getKee()) .setProfileName(sonarWay.getName()) .setMissingRuleCount(missingRuleCount) .build(); }
@Test public void search_all_rules() { createRule(); createRule(); index(); SearchIdResult results = underTest.search(new RuleQuery(), new SearchOptions()); assertThat(results.getTotal()).isEqualTo(2); assertThat(results.getIds()).hasSize(2); }
@Test public void disable_then_enable_rule() { // Install rule when(system.now()).thenReturn(DATE1.getTime()); execute(new FakeRepositoryV1()); // Uninstall rule when(system.now()).thenReturn(DATE2.getTime()); execute(); RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); assertThat(rule.getStatus()).isEqualTo(REMOVED); assertThat(ruleIndex.search(new RuleQuery().setKey(RULE_KEY1.toString()), new SearchOptions()).getTotal()).isEqualTo(0); // Re-install rule when(system.now()).thenReturn(DATE3.getTime()); execute(new FakeRepositoryV1()); rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); assertThat(rule.getStatus()).isEqualTo(RuleStatus.BETA); assertThat(ruleIndex.search(new RuleQuery().setKey(RULE_KEY1.toString()), new SearchOptions()).getTotal()).isEqualTo(1); }
@Test public void paging() { createRule(); createRule(); createRule(); index(); // from 0 to 1 included SearchOptions options = new SearchOptions(); options.setOffset(0).setLimit(2); SearchIdResult results = underTest.search(new RuleQuery(), options); assertThat(results.getTotal()).isEqualTo(3); assertThat(results.getIds()).hasSize(2); // from 0 to 9 included options.setOffset(0).setLimit(10); results = underTest.search(new RuleQuery(), options); assertThat(results.getTotal()).isEqualTo(3); assertThat(results.getIds()).hasSize(3); // from 2 to 11 included options.setOffset(2).setLimit(10); results = underTest.search(new RuleQuery(), options); assertThat(results.getTotal()).isEqualTo(3); assertThat(results.getIds()).hasSize(1); // from 2 to 11 included options.setOffset(2).setLimit(0); results = underTest.search(new RuleQuery(), options); assertThat(results.getTotal()).isEqualTo(3); assertThat(results.getIds()).hasSize(1); }
@Test public void update_only_rule_name() { when(system.now()).thenReturn(DATE1.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createRepository("fake", "java"); repo.createRule("rule") .setName("Name1") .setHtmlDescription("Description"); repo.done(); }); when(system.now()).thenReturn(DATE2.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createRepository("fake", "java"); repo.createRule("rule") .setName("Name2") .setHtmlDescription("Description"); repo.done(); }); // rule1 has been updated RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("fake", "rule")); assertThat(rule1.getName()).isEqualTo("Name2"); assertThat(rule1.getDescription()).isEqualTo("Description"); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name2"), new SearchOptions()).getTotal()).isEqualTo(1); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()).getTotal()).isEqualTo(0); }
@Test public void update_only_rule_description() { when(system.now()).thenReturn(DATE1.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createRepository("fake", "java"); repo.createRule("rule") .setName("Name") .setHtmlDescription("Desc1"); repo.done(); }); when(system.now()).thenReturn(DATE2.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createRepository("fake", "java"); repo.createRule("rule") .setName("Name") .setHtmlDescription("Desc2"); repo.done(); }); // rule1 has been updated RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("fake", "rule")); assertThat(rule1.getName()).isEqualTo("Name"); assertThat(rule1.getDescription()).isEqualTo("Desc2"); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Desc2"), new SearchOptions()).getTotal()).isEqualTo(1); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Desc1"), new SearchOptions()).getTotal()).isEqualTo(0); }
@Test public void tags_facet_supports_selected_value_with_regexp_special_characters() { OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = createRule(); createRuleMetadata(rule, organization, setTags("misra++")); index(); RuleQuery query = new RuleQuery() .setOrganization(organization) .setTags(singletonList("misra[")); SearchOptions options = new SearchOptions().addFacets(FACET_TAGS); // do not fail assertThat(underTest.search(query, options).getTotal()).isEqualTo(0); }
SearchIdResult<Integer> searchRule1 = ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()); assertThat(searchRule1.getIds()).containsOnly(rule1.getId()); assertThat(searchRule1.getTotal()).isEqualTo(1); assertThat(searchRule2.getTotal()).isEqualTo(1); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()).getTotal()).isEqualTo(0);
SearchIdResult<Integer> searchRule1 = ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()); assertThat(searchRule1.getIds()).containsOnly(rule1.getId()); assertThat(searchRule1.getTotal()).isEqualTo(1); assertThat(searchRule2.getTotal()).isEqualTo(1); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()).getTotal()).isEqualTo(0);
private SearchWsResponse doHandle(SearchRequest request) { try (DbSession dbSession = dbClient.openSession(false)) { OrganizationDto organization = getOrganization(dbSession, request); ComponentQuery esQuery = buildEsQuery(organization, request); SearchIdResult<String> results = componentIndex.search(esQuery, new SearchOptions().setPage(request.getPage(), request.getPageSize())); List<ComponentDto> components = dbClient.componentDao().selectByUuids(dbSession, results.getIds()); Map<String, String> projectKeysByUuids = searchProjectsKeysByUuids(dbSession, components); return buildResponse(components, organization, projectKeysByUuids, Paging.forPageIndex(request.getPage()).withPageSize(request.getPageSize()).andTotal((int) results.getTotal())); } }
assertThat(ruleIndex.search(new RuleQuery().setQueryText("New description"), new SearchOptions()).getIds()).containsOnly(customRule.getId()); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Old name"), new SearchOptions()).getTotal()).isZero(); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Old description"), new SearchOptions()).getTotal()).isZero();
private SearchResults(List<ComponentDto> projects, Set<String> favoriteProjectUuids, SearchIdResult<String> searchResults, Map<String, SnapshotDto> analysisByProjectUuid, ProjectMeasuresQuery query) { this.projects = projects; this.favoriteProjectUuids = favoriteProjectUuids; this.total = (int) searchResults.getTotal(); this.facets = searchResults.getFacets(); this.analysisByProjectUuid = analysisByProjectUuid; this.query = query; } }
private SearchResult doSearch(DbSession dbSession, RuleQuery query, SearchOptions context) { SearchIdResult<Integer> result = ruleIndex.search(query, context); List<Integer> ruleIds = result.getIds(); // rule order is managed by ES Map<Integer, RuleDto> rulesByRuleKey = Maps.uniqueIndex( dbClient.ruleDao().selectByIds(dbSession, query.getOrganization().getUuid(), ruleIds), RuleDto::getId); List<RuleDto> rules = new ArrayList<>(); for (Integer ruleId : ruleIds) { RuleDto rule = rulesByRuleKey.get(ruleId); if (rule != null) { rules.add(rule); } } List<Integer> templateRuleIds = rules.stream() .map(RuleDto::getTemplateId) .filter(Objects::nonNull) .collect(MoreCollectors.toList()); List<RuleDefinitionDto> templateRules = dbClient.ruleDao().selectDefinitionByIds(dbSession, templateRuleIds); List<RuleParamDto> ruleParamDtos = dbClient.ruleDao().selectRuleParamsByRuleIds(dbSession, ruleIds); return new SearchResult() .setRules(rules) .setRuleParameters(ruleParamDtos) .setTemplateRules(templateRules) .setFacets(result.getFacets()) .setTotal(result.getTotal()); }
@CheckForNull public CompareToSonarWay getSonarWay(Request request, DbSession dbSession, OrganizationDto organization, QProfileDto profile) { if (!request.mandatoryParamAsBoolean(PARAM_COMPARE_TO_SONAR_WAY) || profile.isBuiltIn()) { return null; } QProfileDto sonarWay = Stream.of(SONAR_WAY, SONARQUBE_WAY) .map(name -> dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name, profile.getLanguage())) .filter(Objects::nonNull) .filter(QProfileDto::isBuiltIn) .findFirst() .orElse(null); if (sonarWay == null) { return null; } long missingRuleCount = ruleIndex.search( new RuleQuery().setQProfile(profile).setActivation(false).setCompareToQProfile(sonarWay), new SearchOptions().setLimit(1)) .getTotal(); return CompareToSonarWay.newBuilder() .setProfile(sonarWay.getKee()) .setProfileName(sonarWay.getName()) .setMissingRuleCount(missingRuleCount) .build(); }
private SearchWsResponse doHandle(SearchRequest request) { try (DbSession dbSession = dbClient.openSession(false)) { OrganizationDto organization = getOrganization(dbSession, request); ComponentQuery esQuery = buildEsQuery(organization, request); SearchIdResult<String> results = componentIndex.search(esQuery, new SearchOptions().setPage(request.getPage(), request.getPageSize())); List<ComponentDto> components = dbClient.componentDao().selectByUuids(dbSession, results.getIds()); Map<String, String> projectKeysByUuids = searchProjectsKeysByUuids(dbSession, components); return buildResponse(components, organization, projectKeysByUuids, Paging.forPageIndex(request.getPage()).withPageSize(request.getPageSize()).andTotal((int) results.getTotal())); } }