aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core/src
diff options
context:
space:
mode:
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2015-05-22 11:08:06 +0200
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2015-05-26 16:04:31 +0200
commit63efb0936a910d2051ae806bf60f80ba3497ab17 (patch)
tree3ae37b4d7c69e7c8071d250e9610bb2e9837f389 /sonar-core/src
parent478815189f2e78920ed22b5852259d347418246d (diff)
downloadsonarqube-63efb0936a910d2051ae806bf60f80ba3497ab17.tar.gz
sonarqube-63efb0936a910d2051ae806bf60f80ba3497ab17.zip
SONAR-6465 Replace groupsCount by groups
Diffstat (limited to 'sonar-core/src')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java18
-rw-r--r--sonar-core/src/main/java/org/sonar/core/user/GroupMembershipMapper.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/user/LoginGroup.java (renamed from sonar-core/src/main/java/org/sonar/core/user/UserGroupCount.java)10
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml6
-rw-r--r--sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java15
5 files changed, 25 insertions, 26 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java b/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java
index 31ff32405c2..84447d42d1f 100644
--- a/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java
@@ -22,8 +22,10 @@ package org.sonar.core.user;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
+import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -80,16 +82,16 @@ public class GroupMembershipDao implements DaoComponent {
return result;
}
- public Map<String, Integer> countGroupsByLogins(final DbSession session, Collection<String> logins) {
- final Map<String, Integer> result = Maps.newHashMap();
- DaoUtils.executeLargeInputs(logins, new NonNullInputFunction<List<String>, List<UserGroupCount>>() {
+ public Multimap<String, String> selectGroupsByLogins(final DbSession session, Collection<String> logins) {
+ final Multimap<String, String> result = ArrayListMultimap.create();
+ DaoUtils.executeLargeInputs(logins, new NonNullInputFunction<List<String>, List<LoginGroup>>() {
@Override
- protected List<UserGroupCount> doApply(List<String> input) {
- List<UserGroupCount> groupCounts = mapper(session).countGroupsByLogins(input);
- for (UserGroupCount count : groupCounts) {
- result.put(count.login(), count.groupCount());
+ protected List<LoginGroup> doApply(List<String> input) {
+ List<LoginGroup> groupMemberships = mapper(session).selectGroupsByLogins(input);
+ for (LoginGroup membership : groupMemberships) {
+ result.put(membership.login(), membership.groupName());
}
- return groupCounts;
+ return groupMemberships;
}
});
diff --git a/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipMapper.java b/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipMapper.java
index b4a66a5ba9a..777aa1eea00 100644
--- a/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/user/GroupMembershipMapper.java
@@ -34,5 +34,5 @@ public interface GroupMembershipMapper {
List<GroupUserCount> countUsersByGroup(@Param("groupIds") List<Long> groupIds);
- List<UserGroupCount> countGroupsByLogins(@Param("logins") List<String> logins);
+ List<LoginGroup> selectGroupsByLogins(@Param("logins") List<String> logins);
}
diff --git a/sonar-core/src/main/java/org/sonar/core/user/UserGroupCount.java b/sonar-core/src/main/java/org/sonar/core/user/LoginGroup.java
index 712c1b435f1..7f25a8cee5f 100644
--- a/sonar-core/src/main/java/org/sonar/core/user/UserGroupCount.java
+++ b/sonar-core/src/main/java/org/sonar/core/user/LoginGroup.java
@@ -19,16 +19,16 @@
*/
package org.sonar.core.user;
-public class UserGroupCount {
+public class LoginGroup {
private String login;
- private int groupCount;
+ private String groupName;
public String login() {
return login;
}
- public int groupCount() {
- return groupCount;
+ public String groupName() {
+ return groupName;
}
-} \ No newline at end of file
+}
diff --git a/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml b/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml
index 7774f9eb4b0..2663c390189 100644
--- a/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml
@@ -45,17 +45,17 @@
GROUP BY g.name
</select>
- <select id="countGroupsByLogins" parameterType="string" resultType="org.sonar.core.user.UserGroupCount">
- SELECT u.login as login, count(gu.user_id) as groupCount
+ <select id="selectGroupsByLogins" parameterType="string" resultType="org.sonar.core.user.LoginGroup">
+ SELECT u.login as login, g.name as groupName
FROM users u
LEFT JOIN groups_users gu ON gu.user_id=u.id
+ INNER JOIN groups g ON gu.group_id=g.id
<where>
u.login in
<foreach collection="logins" open="(" close=")" item="login" separator=",">
#{login}
</foreach>
</where>
- GROUP BY u.login
</select>
</mapper>
diff --git a/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java b/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java
index 570a7921777..ed86008d099 100644
--- a/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java
@@ -20,6 +20,7 @@
package org.sonar.core.user;
+import com.google.common.collect.Multimap;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
@@ -192,15 +193,11 @@ public class GroupMembershipDaoTest {
DbSession session = dbTester.myBatis().openSession(false);
try {
- assertThat(dao.countGroupsByLogins(session, Arrays.<String>asList())).isEmpty();
- assertThat(dao.countGroupsByLogins(session, Arrays.asList("two-hundred")))
- .containsExactly(entry("two-hundred", 3));
- assertThat(dao.countGroupsByLogins(session, Arrays.asList("two-hundred", "two-hundred-one")))
- .containsOnly(entry("two-hundred", 3), entry("two-hundred-one", 1));
- assertThat(dao.countGroupsByLogins(session, Arrays.asList("two-hundred", "two-hundred-one", "two-hundred-two")))
- .containsOnly(entry("two-hundred", 3), entry("two-hundred-one", 1), entry("two-hundred-two", 0));
- assertThat(dao.countGroupsByLogins(session, Arrays.asList("two-hundred-two")))
- .containsOnly(entry("two-hundred-two", 0));
+ assertThat(dao.selectGroupsByLogins(session, Arrays.<String>asList()).keys()).isEmpty();
+ Multimap<String, String> groupsByLogin = dao.selectGroupsByLogins(session, Arrays.asList("two-hundred", "two-hundred-one", "two-hundred-two"));
+ assertThat(groupsByLogin.get("two-hundred")).containsOnly("sonar-administrators", "sonar-users", "sonar-reviewers");
+ assertThat(groupsByLogin.get("two-hundred-one")).containsOnly("sonar-users");
+ assertThat(groupsByLogin.get("two-hundred-two")).isEmpty();
} finally {
session.close();
}