From 7b8464adf1bc41765efe1f582e7fef3ee7d9af48 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 1 Oct 2014 12:32:26 +0200 Subject: [PATCH] SONAR-5529 Move IssueQuery from api to server Conflicts: server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java --- .../issue/InternalRubyIssueService.java | 5 +- .../server/issue/IssueBulkChangeService.java | 1 - .../org/sonar/server/issue/IssueService.java | 1 - .../sonar/server/issue/IssueStatsFinder.java | 1 - .../sonar/server/issue/IssuesFinderSort.java | 1 - .../issue/actionplan/ActionPlanService.java | 2 +- .../issue/filter/IssueFilterService.java | 2 +- .../sonar/server/issue/index/IssueIndex.java | 22 ++---- .../sonar/server/issue/ws/SearchAction.java | 2 +- .../org/sonar/server/search/FacetValue.java | 14 +++- .../batch/UploadReportActionMediumTest.java | 2 +- .../issue/InternalRubyIssueServiceTest.java | 1 - .../issue/IssueBulkChangeServiceTest.java | 1 - .../sonar/server}/issue/IssueQueryTest.java | 78 +------------------ .../server/issue/IssueServiceMediumTest.java | 1 - .../server/issue/IssueStatsFinderTest.java | 1 - .../server/issue/IssuesFinderSortTest.java | 1 - .../actionplan/ActionPlanServiceTest.java | 2 +- .../issue/filter/IssueFilterServiceTest.java | 2 +- .../issue/index/IssueIndexMediumTest.java | 2 +- .../org/sonar/core/issue/db/IssueDao.java | 2 +- .../org/sonar/core/issue/db/IssueMapper.java | 2 +- .../sonar/core/issue/db/IssueStatsDao.java | 2 +- .../sonar/core/issue/db/IssueStatsMapper.java | 2 +- .../org/sonar/core/issue/db/IssueDaoTest.java | 2 +- .../core/issue/db/IssueStatsDaoTest.java | 2 +- .../{api => server}/issue/IssueQuery.java | 2 +- 27 files changed, 35 insertions(+), 121 deletions(-) rename {sonar-plugin-api/src/test/java/org/sonar/api => server/sonar-server/src/test/java/org/sonar/server}/issue/IssueQueryTest.java (69%) rename sonar-plugin-api/src/main/java/org/sonar/{api => server}/issue/IssueQuery.java (99%) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java index 91c23e4e102..271849db29c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java @@ -33,14 +33,12 @@ import org.sonar.api.ServerComponent; import org.sonar.api.issue.ActionPlan; import org.sonar.api.issue.Issue; import org.sonar.api.issue.IssueComment; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.action.Action; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.DefaultIssueComment; import org.sonar.api.issue.internal.FieldDiffs; import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.SonarException; -import org.sonar.api.web.UserRole; import org.sonar.core.issue.ActionPlanStats; import org.sonar.core.issue.DefaultActionPlan; import org.sonar.core.issue.DefaultIssueFilter; @@ -636,13 +634,12 @@ public class InternalRubyIssueService implements ServerComponent { } public int maxPageSize() { - return IssueQuery.MAX_PAGE_SIZE; + return QueryContext.MAX_LIMIT; } @VisibleForTesting static IssueQuery toQuery(Map props) { IssueQuery.Builder builder = IssueQuery.builder() - .requiredRole(UserRole.USER) .issueKeys(RubyUtils.toStrings(props.get(IssueFilterParameters.ISSUES))) .severities(RubyUtils.toStrings(props.get(IssueFilterParameters.SEVERITIES))) .statuses(RubyUtils.toStrings(props.get(IssueFilterParameters.STATUSES))) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java index 646f825e054..1146566a937 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java @@ -26,7 +26,6 @@ import com.google.common.collect.Iterables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.issue.Issue; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.api.rule.RuleKey; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java index 36e7e6de7c1..94e9fc9f8fc 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java @@ -27,7 +27,6 @@ import org.apache.commons.lang.StringUtils; import org.sonar.api.ServerComponent; import org.sonar.api.issue.ActionPlan; import org.sonar.api.issue.Issue; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.api.rule.RuleKey; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueStatsFinder.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueStatsFinder.java index fc08e3d28ba..0eec6f684ce 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueStatsFinder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueStatsFinder.java @@ -24,7 +24,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.sonar.api.ServerComponent; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.user.User; import org.sonar.api.user.UserFinder; import org.sonar.core.issue.db.IssueStatsColumn; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java index fa1ca37845d..937bf337896 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssuesFinderSort.java @@ -21,7 +21,6 @@ package org.sonar.server.issue; import com.google.common.base.Function; import com.google.common.collect.Ordering; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.rule.Severity; import org.sonar.core.issue.db.IssueDto; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/actionplan/ActionPlanService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/actionplan/ActionPlanService.java index f3320dbdf69..a85a7dcb37b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/actionplan/ActionPlanService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/actionplan/ActionPlanService.java @@ -24,7 +24,6 @@ import com.google.common.base.Function; import com.google.common.collect.Iterables; import org.sonar.api.ServerComponent; import org.sonar.api.issue.ActionPlan; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.api.web.UserRole; @@ -37,6 +36,7 @@ import org.sonar.core.resource.ResourceDao; import org.sonar.core.resource.ResourceDto; import org.sonar.core.resource.ResourceQuery; import org.sonar.server.exceptions.NotFoundException; +import org.sonar.server.issue.IssueQuery; import org.sonar.server.user.UserSession; import javax.annotation.CheckForNull; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterService.java index a1bf7157d37..bf53ae3f6c3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterService.java @@ -26,7 +26,6 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import org.sonar.api.ServerComponent; import org.sonar.api.issue.Issue; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.utils.Paging; import org.sonar.core.issue.DefaultIssueFilter; import org.sonar.core.issue.IssueFilterSerializer; @@ -40,6 +39,7 @@ import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; +import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index e8fc75ffd39..5fb9a69306d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -26,32 +26,20 @@ import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.common.unit.TimeValue; -import org.elasticsearch.index.query.BoolFilterBuilder; -import org.elasticsearch.index.query.FilterBuilders; -import org.elasticsearch.index.query.OrFilterBuilder; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.index.query.*; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.sonar.api.issue.Issue; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.web.UserRole; import org.sonar.core.issue.db.IssueDto; -import org.sonar.server.search.BaseIndex; -import org.sonar.server.search.IndexDefinition; -import org.sonar.server.search.IndexField; -import org.sonar.server.search.QueryContext; -import org.sonar.server.search.Result; -import org.sonar.server.search.SearchClient; +import org.sonar.server.issue.IssueQuery; +import org.sonar.server.search.*; import javax.annotation.Nullable; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; + +import java.util.*; import static com.google.common.collect.Lists.newArrayList; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java index e82a740f2db..4e7cb0f9c62 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java @@ -29,7 +29,6 @@ import org.sonar.api.i18n.I18n; import org.sonar.api.issue.ActionPlan; import org.sonar.api.issue.Issue; import org.sonar.api.issue.IssueComment; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.internal.DefaultIssueComment; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; @@ -47,6 +46,7 @@ import org.sonar.core.issue.db.IssueChangeDao; import org.sonar.core.persistence.DbSession; import org.sonar.markdown.Markdown; import org.sonar.server.db.DbClient; +import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.IssueService; import org.sonar.server.issue.actionplan.ActionPlanService; import org.sonar.server.issue.filter.IssueFilterParameters; diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/FacetValue.java b/server/sonar-server/src/main/java/org/sonar/server/search/FacetValue.java index 887e13847be..ffcb9a58219 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/FacetValue.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/FacetValue.java @@ -46,24 +46,32 @@ public class FacetValue implements Comparable { return key; } - public void setKey(String key) { + public FacetValue setKey(String key) { this.key = key; + return this; } public Integer getValue() { return value; } - public void setValue(Integer value) { + public FacetValue setValue(Integer value) { this.value = value; + return this; } public Multimap getSubFacets() { return subFacets; } - public void setSubFacets(Multimap subFacets) { + public FacetValue setSubFacets(Multimap subFacets) { this.subFacets = subFacets; + return this; + } + + public FacetValue setSort(Sort sort) { + this.sort = sort; + return this; } @Override diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java index b7e696c377c..adfc9545ece 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java @@ -24,7 +24,6 @@ import org.junit.After; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.security.DefaultGroups; import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.DateUtils; @@ -39,6 +38,7 @@ import org.sonar.core.rule.RuleDto; import org.sonar.server.component.SnapshotTesting; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.IssueTesting; import org.sonar.server.issue.db.IssueDao; import org.sonar.server.issue.index.IssueAuthorizationIndex; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java index 40cd3426730..049e76e0b93 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java @@ -30,7 +30,6 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.issue.ActionPlan; import org.sonar.api.issue.Issue; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.action.Action; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.FieldDiffs; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java index 15d996feea0..f35d0c3e198 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java @@ -24,7 +24,6 @@ import com.google.common.collect.Lists; import org.junit.Before; import org.junit.Test; import org.sonar.api.issue.Issue; -import org.sonar.api.issue.IssueQuery; import org.sonar.api.issue.condition.Condition; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java similarity index 69% rename from sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java rename to server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java index 933934f838f..55553d9b854 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java @@ -17,20 +17,18 @@ * 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.api.issue; +package org.sonar.server.issue; +import com.google.common.collect.Lists; import org.junit.Test; +import org.sonar.api.issue.Issue; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; -import org.sonar.api.web.UserRole; -import java.util.Arrays; import java.util.Date; -import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; -import static org.fest.assertions.Fail.fail; public class IssueQueryTest { @@ -39,7 +37,7 @@ public class IssueQueryTest { IssueQuery query = IssueQuery.builder() .issueKeys(newArrayList("ABCDE")) .severities(newArrayList(Severity.BLOCKER)) - .statuses(newArrayList(Issue.STATUS_RESOLVED)) + .statuses(Lists.newArrayList(Issue.STATUS_RESOLVED)) .resolutions(newArrayList(Issue.RESOLUTION_FALSE_POSITIVE)) .components(newArrayList("org/struts/Action.java")) .componentRoots(newArrayList("org.struts:core")) @@ -57,9 +55,6 @@ public class IssueQueryTest { .resolved(true) .sort(IssueQuery.SORT_BY_ASSIGNEE) .asc(true) - .pageSize(10) - .pageIndex(2) - .requiredRole(UserRole.USER) .build(); assertThat(query.issueKeys()).containsOnly("ABCDE"); assertThat(query.severities()).containsOnly(Severity.BLOCKER); @@ -81,9 +76,6 @@ public class IssueQueryTest { assertThat(query.resolved()).isTrue(); assertThat(query.sort()).isEqualTo(IssueQuery.SORT_BY_ASSIGNEE); assertThat(query.asc()).isTrue(); - assertThat(query.pageSize()).isEqualTo(10); - assertThat(query.pageIndex()).isEqualTo(2); - assertThat(query.requiredRole()).isEqualTo(UserRole.USER); } @Test @@ -160,71 +152,9 @@ public class IssueQueryTest { assertThat(query.planned()).isNull(); assertThat(query.resolved()).isNull(); assertThat(query.sort()).isNull(); - assertThat(query.pageSize()).isEqualTo(100); - assertThat(query.pageIndex()).isEqualTo(1); - assertThat(query.requiredRole()).isEqualTo(UserRole.USER); - assertThat(query.maxResults()).isEqualTo(IssueQuery.MAX_RESULTS); } - @Test - public void use_max_page_size_if_negative() throws Exception { - IssueQuery query = IssueQuery.builder().pageSize(0).build(); - assertThat(query.pageSize()).isEqualTo(IssueQuery.MAX_PAGE_SIZE); - - query = IssueQuery.builder().pageSize(-1).build(); - assertThat(query.pageSize()).isEqualTo(IssueQuery.MAX_PAGE_SIZE); - } - - @Test - public void test_default_page_index_and_size() throws Exception { - IssueQuery query = IssueQuery.builder().build(); - assertThat(query.pageSize()).isEqualTo(IssueQuery.DEFAULT_PAGE_SIZE); - assertThat(query.pageIndex()).isEqualTo(IssueQuery.DEFAULT_PAGE_INDEX); - } - - @Test - public void reset_to_max_page_size() throws Exception { - IssueQuery query = IssueQuery.builder() - .pageSize(IssueQuery.MAX_PAGE_SIZE + 100) - .build(); - assertThat(query.pageSize()).isEqualTo(IssueQuery.MAX_PAGE_SIZE); - } - - @Test - public void could_disable_paging_on_single_component() throws Exception { - IssueQuery query = IssueQuery.builder().components(Arrays.asList("Action.java")).build(); - assertThat(query.pageSize()).isGreaterThan(IssueQuery.MAX_PAGE_SIZE); - } - - @Test - public void page_index_should_be_positive() throws Exception { - try { - IssueQuery.builder() - .pageIndex(0) - .build(); - fail(); - } catch (Exception e) { - assertThat(e).hasMessage("Page index must be greater than 0 (got 0)").isInstanceOf(IllegalArgumentException.class); - } - } - - @Test - public void number_of_issue_keys_should_be_limited() throws Exception { - List issueKeys = newArrayList(); - for (int i=0; i