Skip to content

Commit

Permalink
SONAR-6947 api/issues/search use issue.SearchWsRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
teryk committed Nov 18, 2015
1 parent 01570a4 commit 678d275
Show file tree
Hide file tree
Showing 18 changed files with 809 additions and 92 deletions.
17 changes: 14 additions & 3 deletions it/it-tests/src/test/java/it/issue/CommonRulesTest.java
Expand Up @@ -23,17 +23,22 @@
import java.util.List; import java.util.List;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.sonar.wsclient.issue.Issue; import org.sonarqube.ws.Issues.Issue;
import org.sonar.wsclient.issue.IssueQuery; import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.issue.SearchWsRequest;


import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.runProjectAnalysis; import static util.ItUtils.runProjectAnalysis;


public class CommonRulesTest extends AbstractIssueTest { public class CommonRulesTest extends AbstractIssueTest {


public static final String FILE_KEY = "common-rules-project:src/Sample.xoo"; public static final String FILE_KEY = "common-rules-project:src/Sample.xoo";
public static final String TEST_FILE_KEY = "common-rules-project:test/SampleTest.xoo"; public static final String TEST_FILE_KEY = "common-rules-project:test/SampleTest.xoo";


private static WsClient adminWsClient;

@BeforeClass @BeforeClass
public static void setUp() { public static void setUp() {
ORCHESTRATOR.resetData(); ORCHESTRATOR.resetData();
Expand All @@ -43,6 +48,8 @@ public static void setUp() {
runProjectAnalysis(ORCHESTRATOR, "issue/common-rules", runProjectAnalysis(ORCHESTRATOR, "issue/common-rules",
"sonar.cpd.xoo.minimumTokens", "2", "sonar.cpd.xoo.minimumTokens", "2",
"sonar.cpd.xoo.minimumLines", "2"); "sonar.cpd.xoo.minimumLines", "2");

adminWsClient = newAdminWsClient(ORCHESTRATOR);
} }


@Test @Test
Expand Down Expand Up @@ -79,6 +86,10 @@ public void test_rule_on_test_errors() {
} }


private List<Issue> findIssues(String componentKey, String ruleKey) { private List<Issue> findIssues(String componentKey, String ruleKey) {
return searchIssues(IssueQuery.create().components(componentKey).rules(ruleKey)); return adminWsClient.issuesWsClient().search(
new SearchWsRequest()
.setComponents(singletonList(componentKey))
.setRules(singletonList(ruleKey)))
.getIssuesList();
} }
} }
Expand Up @@ -49,7 +49,7 @@
import org.sonar.server.es.SearchOptions; import org.sonar.server.es.SearchOptions;
import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.issue.actionplan.ActionPlanService; import org.sonar.server.issue.actionplan.ActionPlanService;
import org.sonar.server.issue.filter.IssueFilterParameters; import org.sonarqube.ws.client.issue.IssueFilterParameters;
import org.sonar.server.issue.filter.IssueFilterService; import org.sonar.server.issue.filter.IssueFilterService;
import org.sonar.server.search.QueryContext; import org.sonar.server.search.QueryContext;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
Expand Down
Expand Up @@ -43,18 +43,19 @@
import org.sonar.api.resources.Qualifiers; import org.sonar.api.resources.Qualifiers;
import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleKey;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
import org.sonar.api.server.ws.Request; import org.sonar.api.utils.DateUtils;
import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.SonarException;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.api.web.UserRole; import org.sonar.api.web.UserRole;
import org.sonar.core.rule.RuleKeyFunctions; import org.sonar.core.rule.RuleKeyFunctions;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
import org.sonar.server.component.ComponentService; import org.sonar.server.component.ComponentService;
import org.sonar.server.issue.filter.IssueFilterParameters;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonar.server.util.RubyUtils; import org.sonar.server.util.RubyUtils;
import org.sonarqube.ws.client.issue.IssueFilterParameters;
import org.sonarqube.ws.client.issue.SearchWsRequest;


import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.newArrayList;
import static org.sonar.db.component.ComponentDtoFunctions.toCopyResourceId; import static org.sonar.db.component.ComponentDtoFunctions.toCopyResourceId;
Expand Down Expand Up @@ -156,51 +157,52 @@ private Date buildCreatedAfter(@Nullable Date createdAfter, @Nullable String cre
return actualCreatedAfter; return actualCreatedAfter;
} }


public IssueQuery createFromRequest(Request request) { public IssueQuery createFromRequest(SearchWsRequest request) {
DbSession session = dbClient.openSession(false); DbSession session = dbClient.openSession(false);
try { try {
IssueQuery.Builder builder = IssueQuery.builder(userSession) IssueQuery.Builder builder = IssueQuery.builder(userSession)
.issueKeys(request.paramAsStrings(IssueFilterParameters.ISSUES)) .issueKeys(request.getIssues())
.severities(request.paramAsStrings(IssueFilterParameters.SEVERITIES)) .severities(request.getSeverities())
.statuses(request.paramAsStrings(IssueFilterParameters.STATUSES)) .statuses(request.getStatuses())
.resolutions(request.paramAsStrings(IssueFilterParameters.RESOLUTIONS)) .resolutions(request.getResolutions())
.resolved(request.paramAsBoolean(IssueFilterParameters.RESOLVED)) .resolved(request.getResolved())
.rules(stringsToRules(request.paramAsStrings(IssueFilterParameters.RULES))) .rules(stringsToRules(request.getRules()))
.actionPlans(request.paramAsStrings(IssueFilterParameters.ACTION_PLANS)) .actionPlans(request.getActionPlans())
.reporters(request.paramAsStrings(IssueFilterParameters.REPORTERS)) .reporters(request.getReporters())
.assignees(buildAssignees(request.paramAsStrings(IssueFilterParameters.ASSIGNEES))) .assignees(buildAssignees(request.getAssignees()))
.languages(request.paramAsStrings(IssueFilterParameters.LANGUAGES)) .languages(request.getLanguages())
.tags(request.paramAsStrings(IssueFilterParameters.TAGS)) .tags(request.getTags())
.assigned(request.paramAsBoolean(IssueFilterParameters.ASSIGNED)) .assigned(request.getAssigned())
.planned(request.paramAsBoolean(IssueFilterParameters.PLANNED)) .planned(request.getPlanned())
.createdAt(request.paramAsDateTime(IssueFilterParameters.CREATED_AT)) .createdAt(parseAsDateTime(request.getCreatedAt()))
.createdAfter(buildCreatedAfter(request.paramAsDateTime(IssueFilterParameters.CREATED_AFTER), request.param(IssueFilterParameters.CREATED_IN_LAST))) .createdAfter(buildCreatedAfter(parseAsDateTime(request.getCreatedAfter()), request.getCreatedInLast()))
.createdBefore(request.paramAsDateTime(IssueFilterParameters.CREATED_BEFORE)) .createdBefore(parseAsDateTime(request.getCreatedBefore()))
.facetMode(request.mandatoryParam(IssueFilterParameters.FACET_MODE)); .facetMode(request.getFacetMode());


Set<String> allComponentUuids = Sets.newHashSet(); Set<String> allComponentUuids = Sets.newHashSet();
boolean effectiveOnComponentOnly = mergeDeprecatedComponentParameters(session, boolean effectiveOnComponentOnly = mergeDeprecatedComponentParameters(session,
request.paramAsBoolean(IssueFilterParameters.ON_COMPONENT_ONLY), request.getOnComponentOnly(),
request.paramAsStrings(IssueFilterParameters.COMPONENTS), request.getComponents(),
request.paramAsStrings(IssueFilterParameters.COMPONENT_UUIDS), request.getComponentUuids(),
request.paramAsStrings(IssueFilterParameters.COMPONENT_KEYS), request.getComponentKeys(),
request.paramAsStrings(IssueFilterParameters.COMPONENT_ROOT_UUIDS), request.getComponentRootUuids(),
request.paramAsStrings(IssueFilterParameters.COMPONENT_ROOTS), request.getComponentRoots(),
allComponentUuids); allComponentUuids);


addComponentParameters(builder, session, addComponentParameters(builder, session,
effectiveOnComponentOnly, effectiveOnComponentOnly,
allComponentUuids, allComponentUuids,
request.paramAsStrings(IssueFilterParameters.PROJECT_UUIDS), request.paramAsStrings(IssueFilterParameters.PROJECT_KEYS), request.getProjectUuids(),
request.paramAsStrings(IssueFilterParameters.MODULE_UUIDS), request.getProjectKeys(),
request.paramAsStrings(IssueFilterParameters.DIRECTORIES), request.getModuleUuids(),
request.paramAsStrings(IssueFilterParameters.FILE_UUIDS), request.getDirectories(),
request.paramAsStrings(IssueFilterParameters.AUTHORS)); request.getFileUuids(),

request.getAuthors());
String sort = request.param(WebService.Param.SORT);
String sort = request.getSort();
if (!Strings.isNullOrEmpty(sort)) { if (!Strings.isNullOrEmpty(sort)) {
builder.sort(sort); builder.sort(sort);
builder.asc(request.paramAsBoolean(WebService.Param.ASCENDING)); builder.asc(request.getAsc());
} }
return builder.build(); return builder.build();


Expand Down Expand Up @@ -409,4 +411,20 @@ private static Collection<RuleKey> stringsToRules(@Nullable Collection<String> r
} }
return null; return null;
} }

@CheckForNull
private static Date parseAsDateTime(@Nullable String stringDate) {
if (stringDate != null) {
try {
return DateUtils.parseDateTime(stringDate);
} catch (SonarException notDateTime) {
try {
return DateUtils.parseDate(stringDate);
} catch (SonarException notDateEither) {
throw new SonarException(String.format("'%s' cannot be parsed as either a date or date+time", stringDate));
}
}
}
return null;
}
} }
Expand Up @@ -47,6 +47,7 @@
import org.sonar.server.issue.index.IssueDoc; import org.sonar.server.issue.index.IssueDoc;
import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonarqube.ws.client.issue.IssueFilterParameters;


import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.newArrayList;


Expand Down
Expand Up @@ -64,7 +64,6 @@
import org.joda.time.Duration; import org.joda.time.Duration;
import org.sonar.api.issue.Issue; import org.sonar.api.issue.Issue;
import org.sonar.api.resources.Scopes; import org.sonar.api.resources.Scopes;
import org.sonar.api.rule.Severity;
import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.core.util.NonNullInputFunction; import org.sonar.core.util.NonNullInputFunction;
Expand All @@ -77,7 +76,7 @@
import org.sonar.server.es.Sorting; import org.sonar.server.es.Sorting;
import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.IssueQuery;
import org.sonar.server.issue.filter.IssueFilterParameters; import org.sonarqube.ws.client.issue.IssueFilterParameters;
import org.sonar.server.rule.index.RuleNormalizer; import org.sonar.server.rule.index.RuleNormalizer;
import org.sonar.server.search.IndexDefinition; import org.sonar.server.search.IndexDefinition;
import org.sonar.server.search.StickyFacetBuilder; import org.sonar.server.search.StickyFacetBuilder;
Expand Down
Expand Up @@ -30,7 +30,7 @@
import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.IssueQuery;
import org.sonar.server.issue.IssueQueryService; import org.sonar.server.issue.IssueQueryService;
import org.sonar.server.issue.IssueService; import org.sonar.server.issue.IssueService;
import org.sonar.server.issue.filter.IssueFilterParameters; import org.sonarqube.ws.client.issue.IssueFilterParameters;


import java.util.Map; import java.util.Map;


Expand Down

0 comments on commit 678d275

Please sign in to comment.