+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2017 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.es;
-
-import org.sonar.api.ce.ComputeEngineSide;
-import org.sonar.api.server.ServerSide;
-
-@ServerSide
-@ComputeEngineSide
-public abstract class BaseIndex {
-
- private final EsClient client;
-
- public BaseIndex(EsClient client) {
- this.client = client;
- }
-
- protected EsClient getClient() {
- return client;
- }
-
-}
import org.sonar.core.util.NonNullInputFunction;
import org.sonar.core.util.stream.Collectors;
import org.sonar.db.component.ComponentDto;
-import org.sonar.server.es.BaseIndex;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.EsUtils;
import org.sonar.server.es.SearchOptions;
* The unique entry-point to interact with Elasticsearch index "issues".
* All the requests are listed here.
*/
-public class IssueIndex extends BaseIndex {
+public class IssueIndex {
private static final String SUBSTRING_MATCH_REGEXP = ".*%s.*";
};
private final Sorting sorting;
+ private final EsClient client;
private final System2 system;
private final UserSession userSession;
private final AuthorizationTypeSupport authorizationTypeSupport;
public IssueIndex(EsClient client, System2 system, UserSession userSession, AuthorizationTypeSupport authorizationTypeSupport) {
- super(client);
-
+ this.client = client;
this.system = system;
this.userSession = userSession;
this.authorizationTypeSupport = authorizationTypeSupport;
}
public SearchResult<IssueDoc> search(IssueQuery query, SearchOptions options) {
- SearchRequestBuilder requestBuilder = getClient()
+ SearchRequestBuilder requestBuilder = client
.prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE);
configureSorting(query, requestBuilder);
private Optional<Long> getMinCreatedAt(Map<String, QueryBuilder> filters, QueryBuilder esQuery) {
String facetNameAndField = IssueIndexDefinition.FIELD_ISSUE_FUNC_CREATED_AT;
- SearchRequestBuilder esRequest = getClient()
+ SearchRequestBuilder esRequest = client
.prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE)
.setSize(0);
BoolQueryBuilder esFilter = boolQuery();
}
public List<String> listTags(@Nullable String textQuery, int maxNumberOfTags) {
- SearchRequestBuilder requestBuilder = getClient()
+ SearchRequestBuilder requestBuilder = client
.prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE, RuleIndexDefinition.INDEX_TYPE_RULE);
requestBuilder.setQuery(boolQuery().must(matchAllQuery()).filter(createBoolFilter(
}
private Terms listTermsMatching(String fieldName, IssueQuery query, @Nullable String textQuery, Terms.Order termsOrder, int maxNumberOfTags) {
- SearchRequestBuilder requestBuilder = getClient()
+ SearchRequestBuilder requestBuilder = client
.prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE)
// Avoids returning search hits
.setSize(0);
throw new IllegalStateException(format("Component of scope '%s' is not allowed", component.scope()));
}
- SearchRequestBuilder requestBuilder = getClient()
+ SearchRequestBuilder requestBuilder = client
.prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE)
.setSearchType(SearchType.SCAN)
.setScroll(TimeValue.timeValueMinutes(EsUtils.SCROLL_TIME_IN_MINUTES))
.setQuery(boolQuery().must(matchAllQuery()).filter(filter));
SearchResponse response = requestBuilder.get();
- return EsUtils.scroll(getClient(), response.getScrollId(), DOC_CONVERTER);
+ return EsUtils.scroll(client, response.getScrollId(), DOC_CONVERTER);
}
}
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.sonar.core.util.stream.Collectors;
-import org.sonar.server.es.BaseIndex;
import org.sonar.server.es.DefaultIndexSettingsElement;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.SearchIdResult;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGES;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_TAGS;
-public class ProjectMeasuresIndex extends BaseIndex {
+public class ProjectMeasuresIndex {
public static final List<String> SUPPORTED_FACETS = ImmutableList.of(
NCLOC_KEY,
.put(FIELD_TAGS, ProjectMeasuresIndex::addTagsFacet)
.build();
+ private final EsClient client;
private final AuthorizationTypeSupport authorizationTypeSupport;
public ProjectMeasuresIndex(EsClient client, AuthorizationTypeSupport authorizationTypeSupport) {
- super(client);
+ this.client = client;
this.authorizationTypeSupport = authorizationTypeSupport;
}
public SearchIdResult<String> search(ProjectMeasuresQuery query, SearchOptions searchOptions) {
- SearchRequestBuilder requestBuilder = getClient()
+ SearchRequestBuilder requestBuilder = client
.prepareSearch(INDEX_TYPE_PROJECT_MEASURES)
.setFetchSource(false)
.setFrom(searchOptions.getOffset())
tagFacet.include(".*" + escapeSpecialRegexChars(textQuery) + ".*");
}
- SearchRequestBuilder searchQuery = getClient()
+ SearchRequestBuilder searchQuery = client
.prepareSearch(INDEX_TYPE_PROJECT_MEASURES)
.setQuery(authorizationTypeSupport.createQueryFilter())
.setFetchSource(false)
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
import org.sonar.api.rules.RuleType;
-import org.sonar.server.es.BaseIndex;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.SearchIdResult;
import org.sonar.server.es.SearchOptions;
* The unique entry-point to interact with Elasticsearch index "rules".
* All the requests are listed here.
*/
-public class RuleIndex extends BaseIndex {
+public class RuleIndex {
public static final String FACET_LANGUAGES = "languages";
public static final String FACET_TAGS = "tags";
Collections2.filter(
Collections2.transform(Arrays.asList(RuleStatus.values()), RuleStatus::toString),
input -> !RuleStatus.REMOVED.toString().equals(input)));
+ private final EsClient client;
public RuleIndex(EsClient client) {
- super(client);
+ this.client = client;
}
public SearchIdResult<RuleKey> search(RuleQuery query, SearchOptions options) {
- SearchRequestBuilder esSearch = getClient()
+ SearchRequestBuilder esSearch = client
.prepareSearch(INDEX_TYPE_RULE);
QueryBuilder qb = buildQuery(query);
* Return all keys matching the search query, without pagination nor facets
*/
public Iterator<RuleKey> searchAll(RuleQuery query) {
- SearchRequestBuilder esSearch = getClient()
+ SearchRequestBuilder esSearch = client
.prepareSearch(INDEX_TYPE_RULE)
.setSearchType(SearchType.SCAN)
.setScroll(TimeValue.timeValueMinutes(SCROLL_TIME_IN_MINUTES));
esSearch.setQuery(boolQuery().must(qb).filter(fb));
SearchResponse response = esSearch.get();
- return scrollIds(getClient(), response.getScrollId(), RuleKey::parse);
+ return scrollIds(client, response.getScrollId(), RuleKey::parse);
}
/* Build main query (search based) */
if (query != null) {
termsAggregation.include(".*" + escapeSpecialRegexChars(query) + ".*");
}
- SearchRequestBuilder request = getClient()
+ SearchRequestBuilder request = client
.prepareSearch(INDEX_TYPE_RULE, INDEX_TYPE_ACTIVE_RULE)
.setQuery(matchAllQuery())
.setSize(0)
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.search.SearchHit;
import org.sonar.core.util.NonNullInputFunction;
-import org.sonar.server.es.BaseIndex;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.SearchOptions;
import org.sonar.server.es.SearchResult;
import static org.sonar.server.test.index.TestIndexDefinition.FIELD_FILE_UUID;
import static org.sonar.server.test.index.TestIndexDefinition.FIELD_TEST_UUID;
-public class TestIndex extends BaseIndex {
+public class TestIndex {
private static final Function<Map<String, Object>, TestDoc> CONVERTER = new NonNullInputFunction<Map<String, Object>, TestDoc>() {
@Override
protected TestDoc doApply(Map<String, Object> fields) {
return new TestDoc(fields);
}
};
+ private final EsClient client;
public TestIndex(EsClient client) {
- super(client);
+ this.client = client;
}
public List<CoveredFileDoc> coveredFiles(String testUuid) {
List<CoveredFileDoc> coveredFiles = new ArrayList<>();
- for (SearchHit hit : getClient().prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
+ for (SearchHit hit : client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
.setSize(1)
.setQuery(boolQuery().must(matchAllQuery()).filter(termQuery(FIELD_TEST_UUID, testUuid)))
.get().getHits().getHits()) {
}
public SearchResult<TestDoc> searchByTestFileUuid(String testFileUuid, SearchOptions searchOptions) {
- SearchRequestBuilder searchRequest = getClient().prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
+ SearchRequestBuilder searchRequest = client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
.setSize(searchOptions.getLimit())
.setFrom(searchOptions.getOffset())
.setQuery(boolQuery().must(matchAllQuery()).filter(termQuery(FIELD_FILE_UUID, testFileUuid)));
}
public SearchResult<TestDoc> searchBySourceFileUuidAndLineNumber(String sourceFileUuid, int lineNumber, SearchOptions searchOptions) {
- SearchRequestBuilder searchRequest = getClient().prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
+ SearchRequestBuilder searchRequest = client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
.setSize(searchOptions.getLimit())
.setFrom(searchOptions.getOffset())
.setQuery(nestedQuery(FIELD_COVERED_FILES, boolQuery()
}
public Optional<TestDoc> getNullableByTestUuid(String testUuid) {
- for (SearchHit hit : getClient().prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
+ for (SearchHit hit : client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
.setSize(1)
.setQuery(boolQuery().must(matchAllQuery()).filter(termQuery(FIELD_TEST_UUID, testUuid)))
.get().getHits().getHits()) {
}
public SearchResult<TestDoc> searchByTestUuid(String testUuid, SearchOptions searchOptions) {
- SearchRequestBuilder searchRequest = getClient().prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
+ SearchRequestBuilder searchRequest = client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST)
.setSize(searchOptions.getLimit())
.setFrom(searchOptions.getOffset())
.setQuery(boolQuery().must(matchAllQuery()).filter(termQuery(FIELD_TEST_UUID, testUuid)));