diff options
author | Jean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com> | 2015-05-22 11:08:06 +0200 |
---|---|---|
committer | Jean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com> | 2015-05-26 16:04:31 +0200 |
commit | 63efb0936a910d2051ae806bf60f80ba3497ab17 (patch) | |
tree | 3ae37b4d7c69e7c8071d250e9610bb2e9837f389 /sonar-core/src | |
parent | 478815189f2e78920ed22b5852259d347418246d (diff) | |
download | sonarqube-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.java | 18 | ||||
-rw-r--r-- | sonar-core/src/main/java/org/sonar/core/user/GroupMembershipMapper.java | 2 | ||||
-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.xml | 6 | ||||
-rw-r--r-- | sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java | 15 |
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(); } |