diff options
author | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-06-20 09:51:12 +0200 |
---|---|---|
committer | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-06-20 10:01:30 +0200 |
commit | be7938d5466a777ced1fefde77cb75c97b09637d (patch) | |
tree | c85d1b81962314545c2962435d00789860ff306a /sonar-server | |
parent | 2f49e919ce9455fdb10613334ed23ae0ae076e2e (diff) | |
download | sonarqube-be7938d5466a777ced1fefde77cb75c97b09637d.tar.gz sonarqube-be7938d5466a777ced1fefde77cb75c97b09637d.zip |
SONAR-5329 - Added UserName and RuleName into QProfileActivity
Diffstat (limited to 'sonar-server')
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"); } } |