aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-12-03 11:39:40 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2013-12-03 11:40:19 +0100
commit9c2cd3a5927430275914a6ebb0e885a85a699f3c (patch)
tree342a95d605d2915e255a9dece137a8aaa54315c3 /sonar-batch
parent8389b135a1f331dfe90e3648dfa825402a78d502 (diff)
downloadsonarqube-9c2cd3a5927430275914a6ebb0e885a85a699f3c.tar.gz
sonarqube-9c2cd3a5927430275914a6ebb0e885a85a699f3c.zip
SONAR-4816 Provide assignee real name in json report and issues WS
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java29
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/report/JsonReport.java37
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/report/JsonReportTest.java12
-rw-r--r--sonar-batch/src/test/resources/org/sonar/batch/scan/report/JsonReportTest/report.json9
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"
+ }
]}