aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-06-20 09:51:12 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-06-20 10:01:30 +0200
commitbe7938d5466a777ced1fefde77cb75c97b09637d (patch)
treec85d1b81962314545c2962435d00789860ff306a /sonar-server
parent2f49e919ce9455fdb10613334ed23ae0ae076e2e (diff)
downloadsonarqube-be7938d5466a777ced1fefde77cb75c97b09637d.tar.gz
sonarqube-be7938d5466a777ced1fefde77cb75c97b09637d.zip
SONAR-5329 - Added UserName and RuleName into QProfileActivity
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/activity/index/ActivityDoc.java4
-rw-r--r--sonar-server/src/main/java/org/sonar/server/activity/index/ActivityNormalizer.java4
-rw-r--r--sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java2
-rw-r--r--sonar-server/src/main/java/org/sonar/server/db/DbClient.java7
-rw-r--r--sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActivity.java25
-rw-r--r--sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java37
-rw-r--r--sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java10
7 files changed, 63 insertions, 26 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityDoc.java b/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityDoc.java
index baa7be28955..a2032f4569c 100644
--- a/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityDoc.java
+++ b/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityDoc.java
@@ -42,8 +42,8 @@ public class ActivityDoc extends BaseDoc implements Activity {
}
@Override
- public String author() {
- return this.getNullableField(ActivityNormalizer.LogFields.AUTHOR.field());
+ public String login() {
+ return this.getNullableField(ActivityNormalizer.LogFields.LOGIN.field());
}
@Override
diff --git a/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityNormalizer.java b/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityNormalizer.java
index def1b40fa76..6758799a3d4 100644
--- a/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityNormalizer.java
+++ b/sonar-server/src/main/java/org/sonar/server/activity/index/ActivityNormalizer.java
@@ -53,7 +53,7 @@ public class ActivityNormalizer extends BaseNormalizer<ActivityDto, String> {
public final static IndexField ACTION = addSortable(IndexField.Type.STRING, "action");
public final static IndexField CREATED_AT = addSortable(IndexField.Type.DATE, "createdAt");
public final static IndexField UPDATED_AT = addSortable(IndexField.Type.DATE, BaseNormalizer.UPDATED_AT_FIELD);
- public final static IndexField AUTHOR = addSearchable(IndexField.Type.STRING, "author");
+ public final static IndexField LOGIN = addSearchable(IndexField.Type.STRING, "login");
public final static IndexField DETAILS = addSearchable(IndexField.Type.OBJECT, "details");
public final static IndexField MESSAGE = addSearchable(IndexField.Type.STRING, "message");
@@ -97,7 +97,7 @@ public class ActivityNormalizer extends BaseNormalizer<ActivityDto, String> {
logDoc.put(LogFields.KEY.field(), dto.getKey());
logDoc.put(LogFields.TYPE.field(), dto.getType());
logDoc.put(LogFields.ACTION.field(), dto.getAction());
- logDoc.put(LogFields.AUTHOR.field(), dto.getAuthor());
+ logDoc.put(LogFields.LOGIN.field(), dto.getAuthor());
logDoc.put(LogFields.MESSAGE.field(), dto.getMessage());
logDoc.put(LogFields.CREATED_AT.field(), dto.getCreatedAt());
logDoc.put(LogFields.UPDATED_AT.field(), dto.getUpdatedAt());
diff --git a/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java b/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java
index 23b30c7b424..ae2deb2f453 100644
--- a/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java
+++ b/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java
@@ -39,7 +39,7 @@ public class ActivityMapping extends BaseMapping {
addIndexStringField("type", ActivityNormalizer.LogFields.TYPE.field());
addIndexStringField("action", ActivityNormalizer.LogFields.ACTION.field());
addIndexDatetimeField("createdAt", ActivityNormalizer.LogFields.CREATED_AT.field());
- addIndexStringField("userLogin", ActivityNormalizer.LogFields.AUTHOR.field());
+ addIndexStringField("login", ActivityNormalizer.LogFields.LOGIN.field());
addIndexStringField("message", ActivityNormalizer.LogFields.MESSAGE.field());
addField("details", new DetailField());
}
diff --git a/sonar-server/src/main/java/org/sonar/server/db/DbClient.java b/sonar-server/src/main/java/org/sonar/server/db/DbClient.java
index 2085472ad9e..f1df9faa91e 100644
--- a/sonar-server/src/main/java/org/sonar/server/db/DbClient.java
+++ b/sonar-server/src/main/java/org/sonar/server/db/DbClient.java
@@ -31,6 +31,7 @@ import org.sonar.core.resource.ResourceDao;
import org.sonar.core.technicaldebt.db.CharacteristicDao;
import org.sonar.core.template.LoadedTemplateDao;
import org.sonar.core.user.AuthorizationDao;
+import org.sonar.core.user.UserDao;
import org.sonar.server.activity.db.ActivityDao;
import org.sonar.server.component.persistence.ComponentDao;
import org.sonar.server.measure.persistence.MeasureDao;
@@ -57,6 +58,7 @@ public class DbClient implements ServerComponent {
private final MeasureDao measureDao;
private final ActivityDao activityDao;
private final AuthorizationDao authorizationDao;
+ private final UserDao userDao;
public DbClient(Database db, MyBatis myBatis, DaoComponent... daoComponents) {
this.db = db;
@@ -77,6 +79,7 @@ public class DbClient implements ServerComponent {
measureDao = getDao(map, MeasureDao.class);
activityDao = getDao(map, ActivityDao.class);
authorizationDao = getDao(map, AuthorizationDao.class);
+ userDao = getDao(map, UserDao.class);
}
public Database database() {
@@ -131,6 +134,10 @@ public class DbClient implements ServerComponent {
return authorizationDao;
}
+ public UserDao userDao() {
+ return userDao;
+ }
+
private <K> K getDao(Map<Class, DaoComponent> map, Class<K> clazz) {
return (K) map.get(clazz);
}
diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActivity.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActivity.java
index fd2c453d0f6..6174556166f 100644
--- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActivity.java
+++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActivity.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
import org.sonar.api.rule.RuleKey;
import org.sonar.core.activity.Activity;
import org.sonar.server.activity.index.ActivityDoc;
+import org.sonar.server.activity.index.ActivityNormalizer;
import java.util.Map;
@@ -42,6 +43,22 @@ public class QProfileActivity extends ActivityDoc implements Activity {
}
}
+ public String ruleName() {
+ return ruleName;
+ }
+
+ public void ruleName(String ruleName) {
+ this.ruleName = ruleName;
+ }
+
+ public String authorName() {
+ return authorName;
+ }
+
+ public void authorName(String authorName) {
+ this.authorName = authorName;
+ }
+
public String profileKey(){
return getField("profileKey");
}
@@ -50,12 +67,8 @@ public class QProfileActivity extends ActivityDoc implements Activity {
return RuleKey.parse((String) getField("ruleKey"));
}
- public String ruleName(){
- return this.ruleName;
- }
-
- public String authorName(){
- return this.authorName;
+ public String login() {
+ return getField(ActivityNormalizer.LogFields.LOGIN.field());
}
public String severity(){
diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java
index ee2c8b40954..9c888bc31d5 100644
--- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java
+++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java
@@ -32,6 +32,7 @@ import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.qualityprofile.db.ActiveRuleKey;
import org.sonar.core.qualityprofile.db.QualityProfileDto;
+import org.sonar.core.user.UserDto;
import org.sonar.server.activity.index.ActivityIndex;
import org.sonar.server.db.DbClient;
import org.sonar.server.qualityprofile.index.ActiveRuleIndex;
@@ -44,7 +45,6 @@ import org.sonar.server.user.UserSession;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
@@ -278,17 +278,30 @@ public class QProfileService implements ServerComponent {
public List<QProfileActivity> findActivities(QProfileActivityQuery query, QueryOptions options) {
List<QProfileActivity> results = Lists.newArrayList();
-
- OrFilterBuilder activityFilter = FilterBuilders.orFilter();
- for (String profileKey : query.getQprofileKeys()) {
- activityFilter.add(FilterBuilders.termFilter("details.profileKey", profileKey));
- }
-
- SearchResponse response = index.get(ActivityIndex.class).search(query, options, activityFilter);
- for (SearchHit hit : response.getHits().getHits()) {
- QProfileActivity profileActivity = new QProfileActivity(hit.getSource());
- results.add(profileActivity);
+ DbSession session = db.openSession(false);
+ try {
+ OrFilterBuilder activityFilter = FilterBuilders.orFilter();
+ for (String profileKey : query.getQprofileKeys()) {
+ activityFilter.add(FilterBuilders.termFilter("details.profileKey", profileKey));
+ }
+
+ SearchResponse response = index.get(ActivityIndex.class).search(query, options, activityFilter);
+ for (SearchHit hit : response.getHits().getHits()) {
+ QProfileActivity profileActivity = new QProfileActivity(hit.getSource());
+ profileActivity.ruleName(
+ db.ruleDao().getByKey(session, profileActivity.ruleKey()).getName());
+
+ UserDto user = db.userDao().selectActiveUserByLogin(profileActivity.login(), session);
+ if (user != null) {
+ profileActivity.authorName(user.getName());
+ } else {
+ profileActivity.authorName(profileActivity.login());
+ }
+ results.add(profileActivity);
+ }
+ return results;
+ } finally {
+ session.close();
}
- return results;
}
}
diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java
index 1e6207bb3d5..90e74c4f5dc 100644
--- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java
@@ -133,6 +133,11 @@ public class QProfileServiceMediumTest {
@Test
public void search_qprofile_activity() throws InterruptedException {
+ MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me");
+
+ // We need an actual rule in DB to test RuleName in Activity
+ RuleDto rule = db.ruleDao().getByKey(dbSession, RuleTesting.XOO_X1);
+
tester.get(ActivityService.class).write(dbSession, Activity.Type.QPROFILE,
ActiveRuleChange.createFor(ActiveRuleChange.Type.ACTIVATED, ActiveRuleKey.of(XOO_P1_KEY, RuleTesting.XOO_X1))
.setSeverity(Severity.MAJOR)
@@ -150,8 +155,7 @@ public class QProfileServiceMediumTest {
assertThat(activity.profileKey()).isEqualTo(XOO_P1_KEY);
assertThat(activity.parameters().get("max")).isEqualTo("10");
assertThat(activity.severity()).isEqualTo(Severity.MAJOR);
- //TODO Implement folding Name and Author from from service
-// assertThat(activity.ruleName()).isEqualTo("Rule name");
-// assertThat(activity.authorName()).isEqualTo("me");
+ assertThat(activity.ruleName()).isEqualTo(rule.getName());
+ assertThat(activity.authorName()).isEqualTo("me");
}
}