From 69bab4f4d7b9344ed379c6553ad39c09688c434b Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 24 Apr 2013 15:48:23 +0200 Subject: [PATCH] SONAR-3755 Add parameter to IssueFinder to know if there were security exclusions --- .../main/java/org/sonar/api/issue/IssueFinder.java | 2 ++ .../org/sonar/server/issue/ServerIssueFinder.java | 10 ++++++++-- .../WEB-INF/app/controllers/api/issues_controller.rb | 1 + .../sonar/server/issue/ServerIssueFinderTest.java | 4 +++- .../java/org/sonar/wsclient/issue/IssueParser.java | 3 +++ .../main/java/org/sonar/wsclient/issue/Issues.java | 12 +++++++++++- .../org/sonar/wsclient/issue/IssueParserTest.java | 10 ++++++++++ .../sonar/wsclient/issue/IssueParserTest/search.json | 11 ++++++----- 8 files changed, 44 insertions(+), 9 deletions(-) diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java b/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java index 59257860eaf..d82d43c0011 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java @@ -49,6 +49,8 @@ public interface IssueFinder extends ServerComponent { Collection components(); Paging paging(); + + boolean securityExclusions(); } Results find(IssueQuery query, @Nullable Integer currentUserId, String role); diff --git a/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueFinder.java b/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueFinder.java index c57ce7ffb97..e0fbe4b0362 100644 --- a/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueFinder.java +++ b/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueFinder.java @@ -89,7 +89,7 @@ public class ServerIssueFinder implements IssueFinder { } } - return new DefaultResults(issues, getRulesByIssue(issues, ruleIds), getComponentsByIssue(issues, componentIds), paging); + return new DefaultResults(issues, getRulesByIssue(issues, ruleIds), getComponentsByIssue(issues, componentIds), paging, authorizedIssues.size() != allIssuesDto.size()); } finally { MyBatis.closeQuietly(sqlSession); } @@ -172,12 +172,14 @@ public class ServerIssueFinder implements IssueFinder { private final Paging paging; private final Map rulesByIssue; private final Map componentsByIssue; + private final boolean securityExclusions; - DefaultResults(List issues, Map rulesByIssue, Map componentsByIssue, Paging paging) { + DefaultResults(List issues, Map rulesByIssue, Map componentsByIssue, Paging paging, boolean securityExclusions) { this.issues = issues; this.rulesByIssue = rulesByIssue; this.componentsByIssue = componentsByIssue; this.paging = paging; + this.securityExclusions = securityExclusions; } @Override @@ -201,6 +203,10 @@ public class ServerIssueFinder implements IssueFinder { return componentsByIssue.values(); } + public boolean securityExclusions() { + return securityExclusions; + } + public Paging paging() { return paging; } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/issues_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/issues_controller.rb index 010ce384b92..d5350a804f1 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/issues_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/issues_controller.rb @@ -51,6 +51,7 @@ class Api::IssuesController < Api::ApiController json = {} json[:issues] = results.issues.map { |issue| issue_to_json(issue) } json[:paging] = pagination_to_json(results.paging) + json[:securityExclusions] = results.securityExclusions json end diff --git a/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueFinderTest.java b/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueFinderTest.java index b82e21562ac..03524777c6a 100644 --- a/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueFinderTest.java +++ b/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueFinderTest.java @@ -92,6 +92,7 @@ public class ServerIssueFinderTest { Issue issue = results.issues().iterator().next(); assertThat(issue.componentKey()).isEqualTo("Action.java"); assertThat(issue.ruleKey().toString()).isEqualTo("squid:AvoidCycle"); + assertThat(results.securityExclusions()).isFalse(); } @Test @@ -110,9 +111,10 @@ public class ServerIssueFinderTest { when(authorizationDao.keepAuthorizedComponentIds(anySet(), anyInt(), anyString(), any(SqlSession.class))).thenReturn(newHashSet(123)); when(issueDao.selectByIds(anyCollection(), any(SqlSession.class))).thenReturn(newArrayList(issue1)); - finder.find(issueQuery, null, UserRole.USER); + IssueFinder.Results results = finder.find(issueQuery, null, UserRole.USER); verify(issueDao).selectByIds(eq(newHashSet(1L)), any(SqlSession.class)); + assertThat(results.securityExclusions()).isTrue(); } @Test diff --git a/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/IssueParser.java b/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/IssueParser.java index af538b4b277..ef76e3630a6 100644 --- a/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/IssueParser.java +++ b/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/IssueParser.java @@ -20,6 +20,7 @@ package org.sonar.wsclient.issue; import org.json.simple.JSONValue; +import org.sonar.wsclient.unmarshallers.JsonUtils; import java.util.List; import java.util.Map; @@ -34,6 +35,8 @@ class IssueParser { } Map paging = (Map) jRoot.get("paging"); result.setPaging(new Paging(paging)); + + result.setSecurityExclusions(JsonUtils.getBoolean(jRoot, "securityExclusions")); return result; } } diff --git a/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/Issues.java b/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/Issues.java index e4663e8ea24..7f9c655aa6b 100644 --- a/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/Issues.java +++ b/sonar-ws-client/src/main/java/org/sonar/wsclient/issue/Issues.java @@ -29,6 +29,7 @@ public class Issues { private final List list = new ArrayList(); private Paging paging; + private Boolean securityExclusions; Issues add(Issue issue) { list.add(issue); @@ -38,12 +39,21 @@ public class Issues { return list; } - void setPaging(Paging paging) { + Issues setPaging(Paging paging) { this.paging = paging; + return this; } public Paging paging(){ return paging; } + public Boolean securityExclusions() { + return securityExclusions; + } + + Issues setSecurityExclusions(Boolean securityExclusions) { + this.securityExclusions = securityExclusions; + return this; + } } diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/issue/IssueParserTest.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/issue/IssueParserTest.java index 003bd527a60..363e08ec08f 100644 --- a/sonar-ws-client/src/test/java/org/sonar/wsclient/issue/IssueParserTest.java +++ b/sonar-ws-client/src/test/java/org/sonar/wsclient/issue/IssueParserTest.java @@ -60,5 +60,15 @@ public class IssueParserTest { assertThat(second.description()).isNull(); assertThat(second.attribute("JIRA")).isNull(); assertThat(second.attributes()).isEmpty(); + + assertThat(issues.paging()).isNotNull(); + Paging paging = issues.paging(); + assertThat(paging.pageIndex()).isEqualTo(1); + assertThat(paging.pageSize()).isEqualTo(100); + assertThat(paging.pages()).isEqualTo(1); + assertThat(paging.total()).isEqualTo(2); + + assertThat(issues.securityExclusions()).isTrue(); } + } diff --git a/sonar-ws-client/src/test/resources/org/sonar/wsclient/issue/IssueParserTest/search.json b/sonar-ws-client/src/test/resources/org/sonar/wsclient/issue/IssueParserTest/search.json index d253a8642ef..14b1a6a402d 100644 --- a/sonar-ws-client/src/test/resources/org/sonar/wsclient/issue/IssueParserTest/search.json +++ b/sonar-ws-client/src/test/resources/org/sonar/wsclient/issue/IssueParserTest/search.json @@ -29,11 +29,12 @@ "status": "OPEN" } ], - "pagination": + "paging": { - "page": 1, - "limit": 100, - "size": 2, + "pageIndex": 1, + "pageSize": 100, + "total": 2, "pages": 1 - } + }, + "securityExclusions": true } \ No newline at end of file -- 2.39.5