diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-12-03 11:39:40 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-12-03 11:40:19 +0100 |
commit | 9c2cd3a5927430275914a6ebb0e885a85a699f3c (patch) | |
tree | 342a95d605d2915e255a9dece137a8aaa54315c3 /sonar-batch | |
parent | 8389b135a1f331dfe90e3648dfa825402a78d502 (diff) | |
download | sonarqube-9c2cd3a5927430275914a6ebb0e885a85a699f3c.tar.gz sonarqube-9c2cd3a5927430275914a6ebb0e885a85a699f3c.zip |
SONAR-4816 Provide assignee real name in json report and issues WS
Diffstat (limited to 'sonar-batch')
4 files changed, 78 insertions, 9 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java index c80ae324a5e..3edf7f278ec 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java @@ -34,10 +34,31 @@ import org.sonar.batch.DefaultFileLinesContextFactory; import org.sonar.batch.DefaultResourceCreationLock; import org.sonar.batch.ProjectConfigurator; import org.sonar.batch.ProjectTree; -import org.sonar.batch.bootstrap.*; +import org.sonar.batch.bootstrap.BootstrapSettings; +import org.sonar.batch.bootstrap.ExtensionInstaller; +import org.sonar.batch.bootstrap.ExtensionMatcher; +import org.sonar.batch.bootstrap.ExtensionUtils; +import org.sonar.batch.bootstrap.MetricProvider; import org.sonar.batch.components.PeriodsDefinition; -import org.sonar.batch.index.*; -import org.sonar.batch.issue.*; +import org.sonar.batch.index.Caches; +import org.sonar.batch.index.ComponentDataCache; +import org.sonar.batch.index.ComponentDataPersister; +import org.sonar.batch.index.DefaultIndex; +import org.sonar.batch.index.DefaultPersistenceManager; +import org.sonar.batch.index.DefaultResourcePersister; +import org.sonar.batch.index.DependencyPersister; +import org.sonar.batch.index.EventPersister; +import org.sonar.batch.index.LinkPersister; +import org.sonar.batch.index.MeasurePersister; +import org.sonar.batch.index.MemoryOptimizer; +import org.sonar.batch.index.ResourceCache; +import org.sonar.batch.index.SnapshotCache; +import org.sonar.batch.index.SourcePersister; +import org.sonar.batch.issue.DefaultProjectIssues; +import org.sonar.batch.issue.DeprecatedViolations; +import org.sonar.batch.issue.IssueCache; +import org.sonar.batch.issue.IssuePersister; +import org.sonar.batch.issue.ScanIssueStorage; import org.sonar.batch.phases.GraphPersister; import org.sonar.batch.profiling.PhasesSumUpTimeProfiler; import org.sonar.batch.scan.filesystem.InputFileCache; @@ -59,6 +80,7 @@ import org.sonar.core.test.TestPlanBuilder; import org.sonar.core.test.TestPlanPerspectiveLoader; import org.sonar.core.test.TestableBuilder; import org.sonar.core.test.TestablePerspectiveLoader; +import org.sonar.core.user.DefaultUserFinder; public class ProjectScanContainer extends ComponentContainer { public ProjectScanContainer(ComponentContainer taskContainer) { @@ -120,6 +142,7 @@ public class ProjectScanContainer extends ComponentContainer { ResourceCache.class, ComponentDataCache.class, ComponentDataPersister.class, + DefaultUserFinder.class, // file system InputFileCache.class, diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/report/JsonReport.java b/sonar-batch/src/main/java/org/sonar/batch/scan/report/JsonReport.java index e43dd40be50..2d924d02043 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/report/JsonReport.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/report/JsonReport.java @@ -30,6 +30,8 @@ import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.platform.Server; import org.sonar.api.rule.RuleKey; import org.sonar.api.scan.filesystem.ModuleFileSystem; +import org.sonar.api.user.User; +import org.sonar.api.user.UserFinder; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.SonarException; import org.sonar.batch.bootstrap.AnalysisMode; @@ -43,6 +45,8 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.Set; @@ -63,15 +67,16 @@ public class JsonReport implements BatchComponent { private final EventBus eventBus; private final ComponentSelector componentSelector; private AnalysisMode analysisMode; + private UserFinder userFinder; public JsonReport(Settings settings, ModuleFileSystem fileSystem, Server server, RuleI18nManager ruleI18nManager, IssueCache issueCache, - EventBus eventBus, ComponentSelectorFactory componentSelectorFactory, AnalysisMode mode) { - this(settings, fileSystem, server, ruleI18nManager, issueCache, eventBus, componentSelectorFactory.create(), mode); + EventBus eventBus, ComponentSelectorFactory componentSelectorFactory, AnalysisMode mode, UserFinder userFinder) { + this(settings, fileSystem, server, ruleI18nManager, issueCache, eventBus, componentSelectorFactory.create(), mode, userFinder); } @VisibleForTesting JsonReport(Settings settings, ModuleFileSystem fileSystem, Server server, RuleI18nManager ruleI18nManager, IssueCache issueCache, - EventBus eventBus, ComponentSelector componentSelector, AnalysisMode analysisMode) { + EventBus eventBus, ComponentSelector componentSelector, AnalysisMode analysisMode, UserFinder userFinder) { this.settings = settings; this.fileSystem = fileSystem; this.server = server; @@ -80,6 +85,7 @@ public class JsonReport implements BatchComponent { this.eventBus = eventBus; this.componentSelector = componentSelector; this.analysisMode = analysisMode; + this.userFinder = userFinder; } public void execute() { @@ -116,10 +122,13 @@ public class JsonReport implements BatchComponent { json.name("version").value(server.getVersion()); Set<RuleKey> ruleKeys = newHashSet(); + Set<String> userLogins = newHashSet(); componentSelector.init(); - writeJsonIssues(json, ruleKeys); + writeJsonIssues(json, ruleKeys, userLogins); writeJsonComponents(json); writeJsonRules(json, ruleKeys); + List<User> users = userFinder.findByLogins(new ArrayList<String>(userLogins)); + writeUsers(json, users); json.endObject().flush(); } catch (IOException e) { @@ -129,7 +138,7 @@ public class JsonReport implements BatchComponent { } } - private void writeJsonIssues(JsonWriter json, Set<RuleKey> ruleKeys) throws IOException { + private void writeJsonIssues(JsonWriter json, Set<RuleKey> ruleKeys, Set<String> logins) throws IOException { json.name("issues").beginArray(); for (DefaultIssue issue : getIssues()) { if (issue.resolution() == null && componentSelector.register(issue)) { @@ -147,6 +156,12 @@ public class JsonReport implements BatchComponent { .name("reporter").value(issue.reporter()) .name("assignee").value(issue.assignee()) .name("effortToFix").value(issue.effortToFix()); + if (issue.reporter() != null) { + logins.add(issue.reporter()); + } + if (issue.assignee() != null) { + logins.add(issue.assignee()); + } if (issue.creationDate() != null) { json.name("creationDate").value(DateUtils.formatDateTime(issue.creationDate())); } @@ -188,6 +203,18 @@ public class JsonReport implements BatchComponent { json.endArray(); } + private void writeUsers(JsonWriter json, List<User> users) throws IOException { + json.name("users").beginArray(); + for (User user : users) { + json + .beginObject() + .name("login").value(user.login()) + .name("name").value(user.name()) + .endObject(); + } + json.endArray(); + } + private String getRuleName(RuleKey ruleKey) { return ruleI18nManager.getName(ruleKey.repository(), ruleKey.rule(), Locale.getDefault()); } diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/report/JsonReportTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/report/JsonReportTest.java index 2c8d070c97d..c2aa4b686af 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/scan/report/JsonReportTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/scan/report/JsonReportTest.java @@ -33,20 +33,25 @@ import org.sonar.api.resources.Resource; import org.sonar.api.rule.RuleKey; import org.sonar.api.rules.Rule; import org.sonar.api.scan.filesystem.ModuleFileSystem; +import org.sonar.api.user.User; +import org.sonar.api.user.UserFinder; import org.sonar.batch.bootstrap.AnalysisMode; import org.sonar.batch.events.EventBus; import org.sonar.batch.issue.IssueCache; import org.sonar.core.i18n.RuleI18nManager; +import org.sonar.core.user.DefaultUser; import org.sonar.test.TestUtils; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Collections; import java.util.Locale; import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -63,6 +68,7 @@ public class JsonReportTest { Settings settings; IssueCache issueCache = mock(IssueCache.class); private AnalysisMode mode; + private UserFinder userFinder; @Before public void setUp() { @@ -72,7 +78,8 @@ public class JsonReportTest { settings = new Settings(); mode = mock(AnalysisMode.class); when(mode.isPreview()).thenReturn(true); - jsonReport = new JsonReport(settings, fileSystem, server, ruleI18nManager, issueCache, mock(EventBus.class), new DefaultComponentSelector(), mode); + userFinder = mock(UserFinder.class); + jsonReport = new JsonReport(settings, fileSystem, server, ruleI18nManager, issueCache, mock(EventBus.class), new DefaultComponentSelector(), mode, userFinder); } @Test @@ -94,6 +101,9 @@ public class JsonReportTest { .setNew(false); when(ruleI18nManager.getName("squid", "AvoidCycles", Locale.getDefault())).thenReturn("Avoid Cycles"); when(jsonReport.getIssues()).thenReturn(Lists.<DefaultIssue>newArrayList(issue)); + DefaultUser user1 = new DefaultUser().setLogin("julien").setName("Julien"); + DefaultUser user2 = new DefaultUser().setLogin("simon").setName("Simon"); + when(userFinder.findByLogins(eq(Arrays.asList("julien", "simon")))).thenReturn(Lists.<User>newArrayList(user1, user2)); StringWriter writer = new StringWriter(); jsonReport.writeJson(writer); diff --git a/sonar-batch/src/test/resources/org/sonar/batch/scan/report/JsonReportTest/report.json b/sonar-batch/src/test/resources/org/sonar/batch/scan/report/JsonReportTest/report.json index 6b6ead4619e..8d539f907f9 100644 --- a/sonar-batch/src/test/resources/org/sonar/batch/scan/report/JsonReportTest/report.json +++ b/sonar-batch/src/test/resources/org/sonar/batch/scan/report/JsonReportTest/report.json @@ -24,4 +24,13 @@ "rule": "AvoidCycles", "repository": "squid" } +], "users": [ + { + "login": "julien", + "name": "Julien" + }, + { + "login": "simon", + "name": "Simon" + } ]} |